ವಿಕಿಪೀಡಿಯ tcywiki https://tcy.wikipedia.org/wiki/%E0%B2%AE%E0%B3%81%E0%B2%96%E0%B3%8D%E0%B2%AF_%E0%B2%AA%E0%B3%81%E0%B2%9F MediaWiki 1.47.0-wmf.24 first-letter ಮಾದ್ಯಮೊ ವಿಸೇಸೊ ಪಾತೆರ ಬಳಕೆದಾರೆ ಬಳಕೆದಾರೆ ಪಾತೆರ ವಿಕಿಪೀಡಿಯ ವಿಕಿಪೀಡಿಯ ಪಾತೆರ ಫೈಲ್ ಫೈಲ್ ಪಾತೆರ ಮಾದ್ಯಮೊವಿಕಿ ಮಾದ್ಯಮೊವಿಕಿ ಪಾತೆರ ಟೆಂಪ್ಲೇಟ್ ಟೆಂಪ್ಲೇಟ್ ಪಾತೆರ ಸಕಾಯೊ ಸಕಾಯೊ ಪಾತೆರ ವರ್ಗೊ ವರ್ಗೊ ಪಾತೆರ ತಡ್ಯ ತಡ್ಯ ಪಾತೆರ ಕರಡು ಕರಡು ಪಾತೆರ TimedText TimedText talk ಮೋಡ್ಯೂಲ್ ಮೋಡ್ಯೂಲ್ ಪಾತೆರ Event Event talk ಟೆಂಪ್ಲೇಟ್:UF-hcard-geo 10 6362 373879 372955 2026-10-26T16:32:00Z en>Danny 1994 0 Removed double space. 373879 wikitext text/x-wiki The HTML markup produced by this template includes an [[HCard|hCard microformat]], which makes the place-name and location [[Parsing|parsable]] by computers, either acting automatically to catalogue articles across Wikipedia, or via a browser tool operated by a person, to (for example) add the subject to an address book. Within the hCard is a [[Geo (microformat)|Geo microformat]], which additionally makes the [[Geographic coordinate system|coordinates]] (latitude & longitude) parsable, so that they can be, say, looked up on a map, or downloaded to a [[Global Positioning System|GPS]] unit. For more information about the use of [[microformat]]s on Wikipedia, please see [[Wikipedia:WikiProject Microformats|the microformat project]]. === Sub-templates === If the place or venue has "established", "founded", "opened" or similar dates, use {{template link|start date}} for the earliest of those dates [[Wikipedia:WikiProject Microformats/dates|unless the date is before 1583 CE]]. If it has a URL, use {{template link|URL}}. '''Please do not remove instances of these sub-templates.''' === Classes === hCard uses HTML classes including: {{Flat list| *adr *agent *category *county-name *extended-address *fn *label *locality *nickname *note *org *region *street-address *uid *url *vcard }} Geo is produced by calling {{template link|coord}}, and uses HTML classes: {{Flat list| *geo *latitude *longitude }} '''Please do not rename or remove these classes nor collapse nested elements which use them.''' === Precision === When giving coordinates, '''please use an [[Wikipedia:WikiProject Geographical coordinates#Precision|appropriate level of precision]]'''. Do '''not''' use {{template link|coord}}'s {{parameter|name}} parameter.<includeonly>{{Sandbox other|| [[Category:Templates with coordinates fields]] [[Category:Templates generating hCards and Geo]] }}</includeonly><noinclude>__NOTOC__{{documentation}}</noinclude> 0b6r82calse3p6ryeke27uubcubj2yy 373880 373879 2026-10-28T05:55:29Z ChiK 1136 1 revision imported from [[:en:Template:UF-hcard-geo]] 373879 wikitext text/x-wiki The HTML markup produced by this template includes an [[HCard|hCard microformat]], which makes the place-name and location [[Parsing|parsable]] by computers, either acting automatically to catalogue articles across Wikipedia, or via a browser tool operated by a person, to (for example) add the subject to an address book. Within the hCard is a [[Geo (microformat)|Geo microformat]], which additionally makes the [[Geographic coordinate system|coordinates]] (latitude & longitude) parsable, so that they can be, say, looked up on a map, or downloaded to a [[Global Positioning System|GPS]] unit. For more information about the use of [[microformat]]s on Wikipedia, please see [[Wikipedia:WikiProject Microformats|the microformat project]]. === Sub-templates === If the place or venue has "established", "founded", "opened" or similar dates, use {{template link|start date}} for the earliest of those dates [[Wikipedia:WikiProject Microformats/dates|unless the date is before 1583 CE]]. If it has a URL, use {{template link|URL}}. '''Please do not remove instances of these sub-templates.''' === Classes === hCard uses HTML classes including: {{Flat list| *adr *agent *category *county-name *extended-address *fn *label *locality *nickname *note *org *region *street-address *uid *url *vcard }} Geo is produced by calling {{template link|coord}}, and uses HTML classes: {{Flat list| *geo *latitude *longitude }} '''Please do not rename or remove these classes nor collapse nested elements which use them.''' === Precision === When giving coordinates, '''please use an [[Wikipedia:WikiProject Geographical coordinates#Precision|appropriate level of precision]]'''. Do '''not''' use {{template link|coord}}'s {{parameter|name}} parameter.<includeonly>{{Sandbox other|| [[Category:Templates with coordinates fields]] [[Category:Templates generating hCards and Geo]] }}</includeonly><noinclude>__NOTOC__{{documentation}}</noinclude> 0b6r82calse3p6ryeke27uubcubj2yy ಮೋಡ್ಯೂಲ್:Lang 828 7281 373853 370552 2026-10-23T20:48:59Z en>Theknightwho 0 Comments re class="error". No changes to code. 373853 Scribunto text/plain --[=[ Lua support for the {{lang}}, {{langx}}, {{lang-??}}, and {{transliteration}} templates and replacement of various supporting templates. ]=] require('strict'); local getArgs = require ('Module:Arguments').getArgs; local unicode = require ("Module:Unicode data"); -- for is_Latin() and is_rtl() local yesno = require ('Module:Yesno'); local sandbox = (mw.getCurrentFrame():getTitle():match ('/sandbox') or ''); -- when called from a sandbox template or module load sandbox data and sandbox configuration local lang_data = mw.loadData ('Module:Lang/data' .. sandbox); -- language name override and transliteration tool-tip tables local lang_name_table = lang_data.lang_name_table; -- language codes, names, regions, scripts, suppressed scripts local lang_table = lang_data.lang_name_table.lang; local lang_dep_table = lang_data.lang_name_table.lang_dep; local script_table = lang_data.lang_name_table.script; local region_table = lang_data.lang_name_table.region; local variant_table = lang_data.lang_name_table.variant; local suppressed_table = lang_data.lang_name_table.suppressed; local override_table = lang_data.override; local synonym_table = mw.loadData ('Module:Lang/ISO 639 synonyms'); -- ISO 639-2/639-2T code translation to 639-1 code local cfg = mw.loadData ('Module:Lang/configuration' .. sandbox); -- for internationalization local is_latn_data = mw.loadData ('Module:Lang/data/is latn data'); local sizeof_ranges_t = is_latn_data.sizeof_ranges_t; local namespace = mw.title.getCurrentTitle().namespace; -- used for categorization local content_lang = mw.language.getContentLanguage(); local this_wiki_lang_tag = content_lang.code; -- get this wiki's language tag local this_wiki_lang_dir = content_lang:getDir(); -- get this wiki's language direction local initial_style_state; -- set by lang_xx_normal() and lang_xx_italic() local maint_cats = {}; -- maintenance categories go here local maint_msgs = {}; -- and their messages go here --[[--------------------------< M A K E _ E R R O R _ S P A N >-------------------------------------------------- ]] local function make_error_span (template, msg) --[[ WARNING: must have the class "error" to be detected as an error by {{#iferror:}}. Please do not remove, to avoid breaking any downstream templates relying on this. ]] return table.concat ({'<span class="error" style="font-size: inherit;">', cfg.misc_text_t.error, ': ', template, msg, '</span>'}) end --[[--------------------------< S U B S T I T U T E >---------------------------------------------------------- Substitutes $1, $2, etc in <message> with data from <data_t>. Returns plain-text substituted string when <data_t> not nil; returns <message> else. ]] local function substitute (message, data_t) return data_t and mw.message.newRawMessage (message, data_t):plain() or message; end --[[--------------------------< M A K E _ E R R O R _ M S G >-------------------------------------------------- Assembles an error message from template name, message text, help link, and error category. ]] local function make_error_msg (msg, args_t, template) local category; local text; -- handle the oddity that is {{langx}} if cfg.templates_t.langxx == template then text = args_t.text or args_t[1]; -- for {{lang-xx}} else text = args_t.text or args_t[2]; -- for {{lang}}, {{langx}}, and {{transliteration}} end if cfg.templates_t.transliteration == template then category = cfg.make_error_msg_t.xlit_err_cat; else category = cfg.make_error_msg_t.lang_err_cat; end local category_link = ((0 == namespace or 10 == namespace) and not args_t.nocat) and substitute ('[[Category:$1]]', {category}) or ''; --[[ WARNING: must have the class "error" to be detected as an error by {{#iferror:}}. Please do not remove, to avoid breaking any downstream templates relying on this. ]] return substitute ('[$1] <span class="error" style="font-size: inherit;">$2: &#x7B;{$3}}: $4 ([[:Category:$5|$6]])</span>$7', -- &#x7B; prevents the template name from being treated as a template call in certain situations { text or cfg.make_error_msg_t.undefined, cfg.misc_text_t.error, template, msg, category, cfg.misc_text_t.help, category_link }) end --[[--------------------------< P A R A M E T E R _ V A L I D A T E >------------------------------------------ ]] local function parameter_validate (args_t, template) local err_msg = cfg.parameter_validate_t.invalid_param; if cfg.templates_t.lang == template then -- for {{lang}} for param, _ in pairs (args_t) do if not cfg.known_params_t.params_lang_t[param] and -- unique {{lang}} parameters not cfg.known_params_t.common_params_all_t[param] then -- common to all return substitute (err_msg, {param}); -- <param> not found so abandon end end elseif cfg.templates_t.langx == template then -- for {{langx}} for param, _ in pairs (args_t) do if not cfg.known_params_t.params_langx_t[param] and -- unique {{langx}} parameters not cfg.known_params_t.params_x_t[param] and -- common to {{langx}} and {{lang-xx}} not cfg.known_params_t.common_params_all_t[param] then -- common to all return substitute (err_msg, {param}); -- <param> not found so abandon end end elseif cfg.templates_t.langxx == template then -- for {{lang-xx}} for param, _ in pairs (args_t) do if not cfg.known_params_t.params_lang_xx_t[param] and -- unique {{lang-xx}} parameters not cfg.known_params_t.params_x_t[param] and -- common to {{langx}} and {{lang-xx}} not cfg.known_params_t.common_params_all_t[param] then -- common to all return substitute (err_msg, {param}); -- <param> not found so abandon end end end end --[[--------------------------< I S _ S E T >------------------------------------------------------------------ Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not an empty string. ]] local function is_set (var) return not (var == nil or var == ''); end --[[--------------------------< I N V E R T _ I T A L I C S >------------------------------------------------- This function attempts to invert the italic markup a args.text by adding/removing leading/trailing italic markup in args.text. Like |italic=unset, |italic=invert disables automatic italic markup. Individual leading/trailing apostrophes are converted to their HTML numeric entity equivalent so that the new italic markup doesn't become bold markup inadvertently. Leading and trailing wiki markup is extracted from args.text into separate table elements. Addition, removal, replacement of wiki markup is handled by a string.gsub() replacement table operating only on these separate elements. In the string.gsub() matching pattern, '.*' matches empty string as well as the three expected wiki markup patterns. This function expects that markup in args.text is complete and correct; if it is not, oddness may result. ]] local function invert_italics (source) local invert_pattern_table = { -- leading/trailing markup add/remove/replace patterns [""]="\'\'", -- empty string becomes italic markup ["\'\'"]="", -- italic markup becomes empty string ["\'\'\'"]="\'\'\'\'\'", -- bold becomes bold italic ["\'\'\'\'\'"]="\'\'\'", -- bold italic become bold }; local seg = {}; source = source:gsub ("%f[\']\'%f[^\']", '&#39;'); -- protect single quote marks from being interpreted as bold markup seg[1] = source:match ('^(\'\'+%f[^\']).+') or ''; -- get leading markup, if any; ignore single quote seg[3] = source:match ('.+(%f[\']\'\'+)$') or ''; -- get trailing markup, if any; ignore single quote if '' ~= seg[1] and '' ~= seg[3] then -- extract the 'text' seg[2] = source:match ('^\'\'+%f[^\'](.+)%f[\']\'\'+$') -- from between leading and trailing markup elseif '' ~= seg[1] then seg[2] = source:match ('^\'\'+%f[^\'](.+)') -- following leading markup elseif '' ~= seg[3] then seg[2] = source:match ('(.+)%f[\']\'\'+$') -- preceding trailing markup else seg[2] = source -- when there is no markup end seg[1] = invert_pattern_table[seg[1]] or seg[1]; -- replace leading markup according to pattern table seg[3] = invert_pattern_table[seg[3]] or seg[3]; -- replace leading markup according to pattern table return table.concat (seg); -- put it all back together and done end --[[--------------------------< V A L I D A T E _ I T A L I C >------------------------------------------------ Validates |italic= or |italics= assigned values. When |italic= is set and has an acceptable assigned value, return the matching CSS font-style property value or, for the special case 'default', return nil. When |italic= is not set, or has an unacceptable assigned value, return nil and a nil error message. When both |italic= and |italics= are set, returns nil and a 'conflicting' error message. The return value nil causes the calling lang, lang_xx, or xlit function to set args.italic according to the template's defined default ('inherit' for {{lang}}, 'inherit' or 'italic' for {{lang-??}} depending on the individual template's requirements, 'italic' for {{transliteration}}) or to the value appropriate to |script=, if set ({{lang}} and {{lang-??}} only). Accepted values and the values that this function returns are are: nil - when |italic= absent or not set; returns nil default - for completeness, should rarely if ever be used; returns nil yes - force args.text to be rendered in italic font; returns 'italic' no - force args.text to be rendered in normal font; returns 'normal' unset - disables font control so that font-style applied to text is dictated by markup inside or outside the template; returns 'inherit' invert - disables font control so that font-style applied to text is dictated by markup outside or inverted inside the template; returns 'invert' ]] local function validate_italic (args) local properties = {[cfg.keywords_t.affirmative] = 'italic', [cfg.keywords_t.negative] = 'normal', [cfg.keywords_t.unset] = 'inherit', [cfg.keywords_t.invert] = 'invert', [cfg.keywords_t.default] = nil}; local italic, count = nil, 0 for _, param in pairs {'italic', 'italics', 'i'} do local arg = args[param] if nil ~= arg then if nil == italic then italic = arg end count = count + 1 end end if count > 1 then -- return an error message if more than one is set return cfg.validate_italic_t.multi_italic; end args.style = properties[italic] -- set args.style to an appropriate value args.italic = italic; -- use args.italic as the canonical parameter return nil; -- return a nil error message end --[=[--------------------------< V A L I D A T E _ C A T _ A R G S >---------------------------------------------------------- Default behavior of the {{lang}} and {{lang-??}} templates is to add categorization when the templates are used in main space. This default functionality may be suppressed by setting |nocat=yes or |cat=no. This function selects one of these two parameters to control categorization. Because having two parameters with 'opposite' names and 'opposite' values is confusing, this function accepts only affirmative values for |nocat= and only negative values for |cat=; in both cases the 'other' sense (and non-sense) is not accepted and the parameter is treated as if it were not set in the template. Sets args.nocat to true if categorization is to be turned off; to nil if the default behavior should apply. Accepted values for |nocat= are the text strings: 'yes', 'y', 'true', 't', on, '1' -- [[Module:Yesno]] returns logical true for all of these; false or nil else for |cat= 'no', 'n', 'false', 'f', 'off', '0' -- [[Module:Yesno]] returns logical false for all of these; true or nil else ]=] local function validate_cat_args (args) if not (args.nocat or args.cat) then -- both are nil, so categorize return; end if false == yesno (args.cat) or true == yesno (args.nocat) then args.nocat = true; -- set to true when args.nocat is affirmative; nil else (as if the parameter were not set in the template) else -- args.nocat is the parameter actually used. args.nocat = nil; end end --[[--------------------------< I N _ A R R A Y >-------------------------------------------------------------- Whether needle is in haystack. ]] local function in_array (needle, haystack) if needle == nil then return false; end for n,v in ipairs (haystack) do if v == needle then return n; end end return false; end --[[--------------------------< F O R M A T _ I E T F _ T A G >------------------------------------------------ Prettify IETF tags to use recommended subtag formats: code: lower case script: sentence case region: upper case variant: lower case private: lower case prefixed with -x- ]] local function format_ietf_tag (code, script, region, variant, private) local out = {}; if is_set (private) then return table.concat ({code:lower(), 'x', private:lower()}, '-'); -- if private, all other tags ignored end table.insert (out, code:lower()); if is_set (script) then script = script:lower():gsub ('^%a', string.upper); table.insert (out, script); end if is_set (region) then table.insert (out, region:upper()); end if is_set (variant) then table.insert (out, variant:lower()); end return table.concat (out, '-'); end --[[--------------------------< G E T _ I E T F _ P A R T S >-------------------------------------------------- Extracts and returns IETF language tag parts: primary language subtag (required) - 2 or 3 character IANA language code script subtag - four character IANA script code region subtag - two-letter or three digit IANA region code variant subtag - four digit or 5-8 alnum variant code; only one variant subtag supported private subtag - x- followed by 1-8 alnum private code; only supported with the primary language tag in any one of these forms lang lang-variant lang-script lang-script-variant lang-region lang-region-variant lang-script-region lang-script-region-variant lang-x-private each of lang, script, region, variant, and private, when used, must be valid. Languages with both two- and three-character code synonyms are promoted to the two-character synonym because the IANA registry file omits the synonymous three-character code; we cannot depend on browsers understanding the synonymous three-character codes in the lang= attribute. For {{lang-??}} templates, the parameters |script=, |region=, and |variant= are supported (not supported in {{lang}} because those parameters are superfluous to the IETF subtags in |code=). Returns six values; all lower case. Valid parts are returned as themselves; omitted parts are returned as empty strings, invalid parts are returned as nil; the sixth returned item is an error message (if an error detected) or nil. See http://www.rfc-editor.org/rfc/bcp/bcp47.txt section 2.1. ]] local function get_ietf_parts (source, args_script, args_region, args_variant) local code, script, region, variant, private; -- IETF tag parts if not is_set (source) then return nil, nil, nil, nil, nil, cfg.get_ietf_parts_t.missing_lang_tag; end local pattern = { -- table of tables holding acceptable IETF tag patterns and short names of the IETF part captured by the pattern {'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 1 - ll-Ssss-RR-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 2 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 4 digits) {'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 3 - ll-Ssss-RR-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 4 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d%d)$', 's', 'v'}, -- 5 - ll-Ssss-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%a%a%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'v'}, -- 6 - ll-Ssss-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a)%-(%d%d%d%d)$', 'r', 'v'}, -- 7 - ll-RR-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%d%d%d)%-(%d%d%d%d)$', 'r', 'v'}, -- 8 - ll-DDD-variant (where region is 3 digits; variant is 4 digits) {'^(%a%a%a?)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 9 - ll-RR-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 10 - ll-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%d%d%d%d)$', 'v'}, -- 11 - ll-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%w%w%w%w%w%w?%w?%w?)$', 'v'}, -- 12 - ll-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)$', 's', 'r'}, -- 13 - ll-Ssss-RR {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)$', 's', 'r'}, -- 14 - ll-Ssss-DDD (region is 3 digits) {'^(%a%a%a?)%-(%a%a%a%a)$', 's'}, -- 15 - ll-Ssss {'^(%a%a%a?)%-(%a%a)$', 'r'}, -- 16 - ll-RR {'^(%a%a%a?)%-(%d%d%d)$', 'r'}, -- 17 - ll-DDD (region is 3 digits) {'^(%a%a%a?)$'}, -- 18 - ll {'^(%a%a%a?)%-x%-(%w%w?%w?%w?%w?%w?%w?%w?)$', 'p'}, -- 19 - ll-x-pppppppp (private is 1-8 alnum characters) } local t = {}; -- table of captures; serves as a translator between captured IETF tag parts and named variables for i, v in ipairs (pattern) do -- spin through the pattern table looking for a match local c1, c2, c3, c4; -- captures in the 'pattern' from the pattern table go here c1, c2, c3, c4 = source:match (pattern[i][1]); -- one or more captures set if source matches pattern[i]) if c1 then -- c1 always set on match code = c1; -- first capture is always code t = { [pattern[i][2] or 'x'] = c2, -- fill the table of captures with the rest of the captures [pattern[i][3] or 'x'] = c3, -- take index names from pattern table and assign sequential captures [pattern[i][4] or 'x'] = c4, -- index name may be nil in pattern[i] table so "or 'x'" spoofs a name for this index in this table }; script = t.s or ''; -- translate table contents to named variables; region = t.r or ''; -- absent table entries are nil so set named IETF parts to empty string for concatenation variant= t.v or ''; private = t.p or ''; break; -- and done end end if not code then return nil, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_tag, {source}); -- don't know what we got but it is malformed end code = code:lower(); -- ensure that we use and return lower case version of this if not (override_table[code] or lang_table[code] or synonym_table[code] or lang_dep_table[code]) then return nil, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_code, {code}); -- invalid language code, don't know about the others (don't care?) end if synonym_table[code] then -- if 639-2/639-2T code has a 639-1 synonym table.insert (maint_cats, substitute (cfg.get_ietf_parts_t.maint_promo_cat, {code})); table.insert (maint_msgs, substitute (cfg.get_ietf_parts_t.maint_promo_msg, {code, synonym_table[code]})); code = synonym_table[code]; -- use the synonym end if is_set (script) then if is_set (args_script) then return code, nil, nil, nil, nil, cfg.get_ietf_parts_t.redundant_scr; -- both code with script and |script= not allowed end else script = args_script or ''; -- use args.script if provided end if is_set (script) then script = script:lower(); -- ensure that we use and return lower case version of this if not script_table[script] then return code, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_scr_code, {script, code}); -- language code OK, invalid script, don't know about the others (don't care?) end end if suppressed_table[script] then -- ensure that code-script does not use a suppressed script if in_array (code, suppressed_table[script]) then return code, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.script_code, {script, code}); -- language code OK, script is suppressed for this code end end if is_set (region) then if is_set (args_region) then return code, nil, nil, nil, nil, cfg.get_ietf_parts_t.redundant_reg; -- both code with region and |region= not allowed end else region = args_region or ''; -- use args.region if provided end if is_set (region) then region = region:lower(); -- ensure that we use and return lower case version of this if not region_table[region] then return code, script, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_reg_code, {region, code}); end end if is_set (variant) then if is_set (args_variant) then return code, nil, nil, nil, nil, cfg.get_ietf_parts_t.redundant_var; -- both code with variant and |variant= not allowed end else variant = args_variant or ''; -- use args.variant if provided end if is_set (variant) then variant = variant:lower(); -- ensure that we use and return lower case version of this if not variant_table[variant] then -- make sure variant is valid return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var, {variant}); end -- does this duplicate/replace tests in lang() and lang_xx()? if is_set (script) then -- if script set it must be part of the 'prefix' if not in_array (table.concat ({code, '-', script}), variant_table[variant]['prefixes']) then return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var_code_scr, {variant, code, script}); end elseif is_set (region) then -- if region set, there are some prefixes that require lang code and region (en-CA-newfound) if not in_array (code, variant_table[variant]['prefixes']) then -- first see if lang code is all that's required (en-oxendict though en-GB-oxendict is preferred) if not in_array (table.concat ({code, '-', region}), variant_table[variant]['prefixes']) then -- now try for lang code and region (en-CA-newfound) return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var_code_reg, {variant, code, region}); end end else -- cheap way to determine if there are prefixes; fonipa and others don't have prefixes; # operator always returns 0 if variant_table[variant]['prefixes'][1] and not in_array (code, variant_table[variant]['prefixes']) then return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var_code, {variant, code}); end end end if is_set (private) then private = private:lower(); -- ensure that we use and return lower case version of this if not override_table[table.concat ({code, '-x-', private})] then -- make sure private tag is valid; note that index return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_pri, {private}); end end return code, script, region, variant, private, nil; -- return the good bits; make sure that msg is nil end --[=[-------------------------< M A K E _ W I K I L I N K >---------------------------------------------------- Makes a wikilink; when both link and display text is provided, returns a wikilink in the form [[L|D]]; if only link is provided, returns a wikilink in the form [[L]]; if neither are provided or link is omitted, returns an empty string. ]=] local function make_wikilink (link, display) if is_set (link) then if is_set (display) then return table.concat ({'[[', link, '|', display, ']]'}); else return table.concat ({'[[', link, ']]'}); end else return ''; end end --[[--------------------------< D I V _ M A R K U P _ A D D >-------------------------------------------------- Adds <i> and </i> tags to list-item text or to implied <p>..</p> text. Mixed not supported. ]] local function div_markup_add (text, style) if text:find ('^\n[%*:;#]') then -- look for list markup; list markup must begin at start of text if 'italic' == style then return text:gsub ('(\n[%*:;#]+)([^\n]+)', '%1<i>%2</i>'); -- insert italic markup at each list item else return text; end end if text:find ('\n+') then -- look for any number of \n characters in text text = text:gsub ('([^\n])\n([^\n])', '%1 %2'); -- replace single newline characters with a space character which mimics MediaWiki if 'italic' == style then text = text:gsub('[^\n]+', '<p><i>%1</i></p>'); -- insert p and italic markup tags at each implied p (two or more consecutive '\n\n' sequences) else text = text:gsub ('[^\n]+', '<p>%1</p>'); -- insert p markup at each implied p text = text:gsub ('\n', ''); -- strip newline characters end end return text; end --[[--------------------------< T I T L E _ W R A P P E R _ M A K E >------------------------------------------ Makes a <span title="<title text>"><content_text></span> or <div title="<title text>"><content_text></div> where <title text> is in the tool-tip in the wiki's local language and <content_text> is non-local-language text in HTML markup. This because the lang= attribute applies to the content of its enclosing tag. <tag> holds a string 'div' or 'span' used to choose the correct wrapping tag. ]] local function title_wrapper_make (title_text, content_text, tag) local wrapper_t = {}; table.insert (wrapper_t, table.concat ({'<', tag})); -- open opening wrapper tag table.insert (wrapper_t, ' title=\"'); -- begin title attribute table.insert (wrapper_t, title_text); -- add <title_text> table.insert (wrapper_t, '\">'); -- end title attribute and close opening wrapper tag table.insert (wrapper_t, content_text); -- add <content_text> table.insert (wrapper_t, table.concat ({'</', tag, '>'})); -- add closing wrapper tag return table.concat (wrapper_t); -- make a big string and done end --[[--------------------------< M A K E _ T E X T _ H T M L >-------------------------------------------------- Add the HTML markup to text according to the type of content that it is: <span> or <i> tags for inline content or <div> tags for block content The lang= attribute also applies to the content of the tag where it is placed so this is wrong because 'Spanish language text' is English: <i lang="es" title="Spanish language text">casa</i> should be: <span title="Spanish language text"><i lang="es">casa</i></span> or for <div>...</div>: <div title="Spanish language text"><div lang="es"><spanish-language-text></div></div> ]] local function make_text_html (code, text, tag, rtl, style, size, language) local html_t = {}; local style_added = ''; local wrapper_tag = tag; -- <tag> gets modified so save a copy for use when/if we create a wrapper span or div if text:match ('^%*') then table.insert (html_t, '&#42;'); -- move proto language text prefix outside of italic markup if any; use numeric entity because plain splat confuses MediaWiki text = text:gsub ('^%*', ''); -- remove the splat from the text end if 'span' == tag then -- default HTML tag for inline content if 'italic' == style then -- but if italic tag = 'i'; -- change to <i> tags end else -- must be div so go text = div_markup_add (text, style); -- handle implied <p>, implied <p> with <i>, and list markup (*;:#) with <i> end table.insert (html_t, table.concat ({'<', tag})); -- open the <i>, <span>, or <div> HTML tag code = code:gsub ('%-x%-.*', ''); -- strip private use subtag from code tag because meaningless outside of Wikipedia table.insert (html_t, table.concat ({' lang="', code, '\"'})); -- add language attribute if (rtl or unicode.is_rtl(text)) and ('ltr' == this_wiki_lang_dir) then -- text is right-to-left on a left-to-right wiki table.insert (html_t, ' dir="rtl"'); -- add direction attribute for right-to-left languages elseif not (rtl or unicode.is_rtl(text)) and ('rtl' == this_wiki_lang_dir) then -- text is left-to-right on a right-to-left wiki table.insert (html_t, ' dir="ltr"'); -- add direction attribute for left-to-right languages end if 'normal' == style then -- when |italic=no table.insert (html_t, ' style=\"font-style: normal;'); -- override external markup, if any style_added = '\"'; -- remember that style attribute added and is not yet closed end if is_set (size) then -- when |size=<something> if is_set (style_added) then table.insert (html_t, table.concat ({' font-size: ', size, ';'})); -- add when style attribute already inserted else table.insert (html_t, table.concat ({' style=\"font-size: ', size, ';'})); -- create style attribute style_added = '\"'; -- remember that style attribute added and is not yet closed end end table.insert (html_t, table.concat ({style_added, '>'})); -- close the opening HTML tag table.insert (html_t, text); -- insert the text table.insert (html_t, table.concat ({'</', tag, '>'})); -- close the 'text' <i>, <span>, or <div> HTML tag if is_set (language) then -- create a <title_text> string for the title= attribute in a wrapper span or div local title_text; if 'zxx' == code then -- special case for this tag 'no linguistic content' title_text = substitute ('$1 $2', {language, cfg.make_text_html_t.zxx}); -- not a language so don't use 'language' in title text elseif mw.ustring.find (language, 'languages', 1, true) then title_text = substitute ('$1 $2', {language, cfg.make_text_html_t.collective}); -- for collective languages else title_text = substitute ('$1-$2', {language, cfg.make_text_html_t.individual}); -- for individual languages end return title_wrapper_make (title_text, table.concat (html_t), wrapper_tag); else return table.concat (html_t); end end --[=[-------------------------< M A K E _ C A T E G O R Y >---------------------------------------------------- For individual language, <language>, returns: [[Category:Articles containing <language>-language text]] For English: [[Category:Articles containing explicitly cited English-language text]] For ISO 639-2 collective languages (and for 639-1 bh): [[Category:Articles with text in <language> languages]] ]=] local function make_category (code, language_name, nocat, name_get) if ((0 ~= namespace) or nocat) and not name_get then -- only categorize in article space return ''; -- return empty string for concatenation end if mw.ustring.find (language_name, 'languages', 1, true) then return substitute ('[[$1 $2]]', {cfg.make_category_t.collective_cat, language_name}); end if this_wiki_lang_tag == code then return substitute ('[[$1 $2 $3-$4]]', { -- unique category name for the local language cfg.make_category_t.cat_prefix, cfg.make_category_t.explicit_cat, language_name, cfg.make_category_t.cat_postfix, }); else return substitute ('[[$1 $2-$3]]', { -- category for individual languages cfg.make_category_t.cat_prefix, language_name, cfg.make_category_t.cat_postfix, }); end end --[[--------------------------< M A K E _ T R A N S L I T >---------------------------------------------------- Return translit <i lang=xx-Latn>...</i> where xx is the language code; else return empty string. The value |script= is not used in {{transliteration}} for this purpose; instead it uses |code. Because language scripts are listed in the {{transliteration}} switches they are included in the data tables. The script parameter is introduced at {{Language with name and transliteration}}. If |script= is set, this function uses it in preference to code. To avoid confusion, in this module and the templates that use it, the transliteration script parameter is renamed to be |translit-script= (in this function, tscript). This function is used by both lang_xx() and xlit() lang_xx() always provides code, language_name, and translit; may provide tscript; never provides style xlit() always provides language_name, translit, and one of code or tscript, never both; always provides style For {{transliteration}}, style only applies when a language code is provided. ]] local function make_translit (code, language_name, translit, std, tscript, style, engvar) local title_t = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards local title_text = ''; -- tool tip text for title= attribute std = std and std:lower(); -- lower case for table indexing if not is_set (std) and not is_set (tscript) then -- when neither standard nor script specified title_text = language_name; -- write a generic tool tip if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name) title_text = substitute ('$1-$2', {title_text, cfg.misc_text_t.language}); -- skip this text (individual and macro languages only) end title_text = substitute ('$1 $2', {title_text, mw.ustring.lower (cfg.engvar_t[engvar]['romanisz_lc'])}); -- finish the tool tip; use romanization when neither script nor standard supplied elseif is_set (std) and is_set (tscript) then -- when both are specified if title_t[std] then -- and if standard is legitimate if title_t[std][tscript] then -- and if script for that standard is legitimate if script_table[tscript] then title_text = substitute ('$1$2 ($3 $4) $5', { -- add the appropriate text to the tool tip title_text, title_t[std][tscript:lower()], script_table[tscript], cfg.make_translit_t.script, cfg.make_translit_t.transliteration, }); else title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard? end else title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard? end else return ''; -- invalid standard, setup for error message end elseif is_set (std) then -- translit-script not set, use language code if not title_t[std] then return ''; end -- invalid standard, setup for error message if title_t[std][code] then -- if language code is in the table (xlit may not provide a language code) local fmt_str = '$1$2 ($3 $4) $5'; -- generic format string for tool tip if language_name:match ('languages') then fmt_str = '$1$2 ($3) $5'; -- format string for collective languages tool tip end title_text = substitute (fmt_str, { -- add the appropriate text to the tool tip title_text, title_t[std][code:lower()], language_name, cfg.misc_text_t.language, cfg.make_translit_t.transliteration, }); else -- code doesn't match title_text = title_text .. title_t[std]['default']; -- so use the standard's default end else -- here if translit-script set but translit-std not set if title_t['no_std'][tscript] then title_text = title_text .. title_t['no_std'][tscript]; -- use translit-script if set elseif title_t['no_std'][code] then title_text = title_text .. title_t['no_std'][code]; -- use language code else if is_set (tscript) then title_text = substitute ('$1$2-$3 $4', { -- write a script tool tip title_text, language_name, cfg.make_translit_t.script, cfg.make_translit_t.transliteration, }); elseif is_set (code) then if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name) title_text = substitute ('$1-$2', { -- skip this text (individual and macro languages only) title_text, cfg.misc_text_t.language, }); end title_text = substitute ('$1 $2', { -- finish the tool tip title_text, cfg.make_translit_t.transliteration, }); else title_text = substitute ('$1 $2', { -- generic tool tip (can we ever get here?) title_text, cfg.make_translit_t.transliteration, }); end end end local tag if is_set (code) then -- when a language code is provided (always with {{lang-??}} templates, not always with {{transliteration}}) code = code:match ('^(%a%a%a?)'); -- strip all subtags leaving only the language subtag if not style then -- nil for the default italic style tag = '<i lang="%s-Latn">%s</i>' else tag = '<span style="font-style: %s" lang="%s-Latn">%s</span>' -- non-standard style, construct a span tag for it tag = string.format(tag, style, "%s", "%s") end tag = string.format(tag, code, "%s") else tag = '<span>%s</span>' -- when no language code: no lang= attribute, not italic ({{transliteration}} only) end tag = string.format(tag, translit) -- add the translit text if '' == title_text then -- when there is no need for a tool-tip return tag; -- done else title_text = cfg.engvar_sel_t.gb == engvar and title_text:gsub ('([Rr]omani)z', '%1s') or title_text; -- gb eng when engvar specifies gb eng; us eng else return title_wrapper_make (title_text, tag, 'span'); -- wrap with a tool-tip span and done end end --[[--------------------------< V A L I D A T E _ T E X T >---------------------------------------------------- This function checks the content of args.text and returns empty string if nothing is amiss else it returns an error message. The tests are for empty or missing text and for improper or disallowed use of apostrophe markup. Italic rendering is controlled by the |italic= template parameter so italic markup should never appear in args.text either as ''itself'' or as '''''bold italic''''' unless |italic=unset or |italic=invert. ]] local function validate_text (template, args) if not is_set (args.text) then return make_error_msg (cfg.validate_text_t.no_text, args, template); end if args.text:find ("%f[\']\'\'\'\'%f[^\']") or args.text:find ("\'\'\'\'\'[\']+") then -- because we're looking, look for 4 appostrophes or 6+ appostrophes return make_error_msg (cfg.validate_text_t.malformed_markup, args, template); end local italic = args.italic; if (cfg.keywords_t.unset ~= italic) and (cfg.keywords_t.invert ~= italic) then if args.text:find ("%f[\']\'\'%f[^\']") or args.text:find ("%f[\']\'\'\'\'\'%f[^\']") then -- italic but not bold, or bold italic return make_error_msg (cfg.validate_text_t.italic_markup, args, template); end end end --[[--------------------------< R E N D E R _ M A I N T >------------------------------------------------------ Render mainenance messages and categories. ]] local function render_maint (nocat) local maint = {}; if 0 < #maint_msgs then -- when there are maintenance messages table.insert (maint, table.concat ({'<span class="lang-comment" style="font-style: normal; display: none; color: #33aa33; margin-left: 0.3em;">'})); -- opening <span> tag for _, msg in ipairs (maint_msgs) do table.insert (maint, table.concat ({msg, ' '})); -- add message strings end table.insert (maint, '</span>'); -- close the span end if (0 < #maint_cats) and (0 == namespace) and not nocat then -- when there are maintenance categories; article namespace only for _, cat in ipairs (maint_cats) do table.insert (maint, table.concat ({'[[Category:', cat, ']]'})); -- format and add the categories end end return table.concat (maint); end --[[--------------------------< P R O T O _ P R E F I X >------------------------------------------------------ For proto languages, text is prefixed with a splat. We do that here as a flag for make_text_html() so that a splat will be rendered outside of italic markup (if used). If the first character in text here is already a splat, we do nothing. proto_param is boolean or nil; true adds splat prefix regardless of language name; false removes and inhibits regardless of language name; nil does nothing; presumes that the value in text is correct but removes extra splac. ]] local function proto_prefix (text, language_name, proto_param) if false == proto_param then -- when forced by |proto=no return text:gsub ('^%**', ''); -- return text without splat prefix regardless of language name or existing splat prefix in text elseif (language_name:find ('^Proto%-') or (true == proto_param)) then -- language is a proto or forced by |proto=yes return text:gsub ('^%**', '*'); -- prefix proto-language text with a splat; also removes duplicate prefixing splats end return text:gsub ('^%*+', '*'); -- return text unmolested except multiple splats reduced to one splat end --[[--------------------------< H A S _ P O E M _ T A G >------------------------------------------------------ Looks for a poem strip marker in text; returns true when found; false else. Auto-italic detection disabled when text has poem stripmarker because it is not possible for this code to know the content that will replace the stripmarker. ]] local function has_poem_tag (text) return text:find ('\127[^\127]*UNIQ%-%-poem%-[%a%d]+%-QINU[^\127]*\127') and true or false; end --[[--------------------------< H T M L _ T A G _ S E L E C T >------------------------------------------------ Inspects content of and selectively trims text. Returns text and the name of an appropriate HTML tag for text. If text contains: \n\n text has implied <p>..</p> tags - trim leading and trailing whitespace and return If text begins with list markup: \n* unordered \n; definition \n: definition \n# ordered trim all leading whitespace except \n and trim all trailing whitespace If text contains <poem>...</poem> stripmarker, return text unmodified and choose <div>..</div> tags because the stripmarker is replaced with text wrapped in <div>..</div> tags. If the text contains any actual <div>...</div> tags, then it's again returned unmodified and <div>...</div> tags are used to wrap it, to prevent div/span inversion. ]] local function html_tag_select (text) local tag; if has_poem_tag (text) then -- contains poem stripmarker (we can't know the content of that) tag = 'div'; -- poem replacement is in div tags so lang must use div tags elseif text:find ('<div') then -- reductive; if the text contains a div tag, we must use div tags tag = 'div'; elseif mw.text.trim (text):find ('\n\n+') then -- contains implied p tags text = mw.text.trim (text); -- trim leading and trailing whitespace characters tag = 'div'; -- must be div because span may not contain p tags (added later by MediaWiki); poem replacement is in div tags elseif text:find ('\n[%*:;%#]') then -- if text has list markup text = text:gsub ('^[\t\r\f ]*', ''):gsub ('%s*$', ''); -- trim all whitespace except leading newline character '\n' tag = 'div'; -- must be div because span may not contain ul, dd, dl, ol tags (added later by MediaWiki) else text = mw.text.trim (text); -- plain text tag = 'span'; -- so span is fine end return text, tag; end --[[--------------------------< V A L I D A T E _ P R O T O >-------------------------------------------------- Validates value assigned to |proto=; permitted values are yes and no; yes returns as true, no returns as false, empty string (or parameter omitted) returns as nil; any other value returns nil with <proto_param> as second return value for use in error message. ]] local function validate_proto (proto_param) if cfg.keywords_t.affirmative == proto_param then return true; elseif cfg.keywords_t.negative == proto_param then return false; elseif is_set (proto_param) then return nil, proto_param; -- |proto= something other than 'yes' or 'no' else return nil; -- missing or empty end end --[[--------------------------< L A N G U A G E _ N A M E _ G E T >-------------------------------------------- Common function to return language name from the data set according to IETF tag. Returns language name if found in data tables; nil else. ]] local function language_name_get (ietf, code, cat) ietf = ietf:lower(); -- ietf:lower() because format_ietf_tag() returns mixed case local name; -- remains nil if not found if override_table[ietf] then -- look for whole IETF tag in override table name = override_table[ietf]; elseif override_table[code] then -- not there so try basic language tag name = override_table[code]; elseif lang_table[code] then -- shift to IANA active tag/name table name = lang_table[code]; elseif lang_dep_table[code] then -- try the IANA deprecated tag/name table name = lang_dep_table[code]; end if lang_dep_table[code] and cat then -- because deprecated code may have been overridden to en.wiki preferred name table.insert (maint_cats, substitute (cfg.language_name_get_t.deprecated_cat, {code})); table.insert (maint_msgs, substitute (cfg.language_name_get_t.deprecated_msg, {code})); end return name; -- name from data tables or nil end --[[--------------------------< T E X T _ S C R I P T _ M A T C H _ T E S T >---------------------------------- IETF script subtag should match the script of the <text>. This module does not attempt to know all scripts and what they look like. It does know what Latn script looks like so when <text> is written using other than the Latn script, the IETF script subtag, if present, should not be Latn. Conversely, when <text> is written using the Latn script, the IETF script subtag, if present, should be Latn. For the purposes of this test, Latf (Fraktur) and Latg (Gaelic) are considered to be equivalent to Latn because unicode treats these two scripts as font-specific variants of Latn. Returns an error message when mismatch detected; nil else. ]] local function text_script_match_test (script, is_latn_text, pos, char) local scripts_t = {['latf'] = true, ['latg'] = true, ['latn'] = true}; -- unicode 'latn' scripts; 'latf' and 'latg' are font variants so there are no Fraktur or Gaelic codepoints if is_set (script) then -- don't bother with the rest of this if <script> is nil or empty string script = script:lower(); -- lower case to index into <scripts_t> if is_latn_text then -- when text is wholly Latn script if not scripts_t[script] then -- but a non-Latn script is specified return cfg.text_script_match_test_t.latn_txt_mismatch; -- emit an error message end else -- when text is not wholly Latn script if scripts_t[script] then -- but a Latn script is specified return substitute (cfg.text_script_match_test_t.latn_scr_mismatch, {pos, char}); -- emit an error message with position of first offending character end end end end --[[--------------------------< B I N A R Y _ S E A R C H >--------------------------------------------------- conducts a binary search of <ranges_t> for a sub-range that holds <target>. returns boolean true if a sub-range holding <target> is found; boolean false else. ]] local function binary_search (target, ranges_t) local idx_bot = 1; -- initialize to index of first key local idx_top = sizeof_ranges_t; -- initialize to index of last key (number of keys) if (target < ranges_t[idx_bot][1]) or (target > ranges_t[idx_top][2]) then -- invalid; target out of range return; -- abandon end local idx_mid; -- calculated index of range midway between top index and bottom index local flag = false; -- flag to tell us when we've evaluated last (highest) range in <ranges_t> while 1 do idx_mid = math.ceil ((idx_bot + idx_top) / 2); -- get the mid-point in the <ranges_t> sequence if (target >= ranges_t[idx_mid][1]) and (target <= ranges_t[idx_mid][2]) then -- indexed range low value <= target <= indexed range high value return true; -- we found the range that holds the <target> character; return true elseif (target > ranges_t[idx_mid][2]) then -- is <target> > indexed range high value? idx_bot = idx_mid; -- adjust <idx_bot> up else -- here when <target> less than indexed range low value idx_top = idx_mid - 1; -- adjust <idx_top> down end if flag then break; -- here when we just evaluated the last range and <target> not found end if not flag and (idx_bot == idx_top) then -- set true just before we evaluate the last (highest) range in <ranges_t> flag = true; end end end --[[--------------------------< I S _ L A T I N >-------------------------------------------------------------- compare <text> as codepoints to lists of known codepoints accepted as Latn script returns boolean true and modified <text> when <text> is wrapped in accept-as-written markup returns boolean true and <text> when codepoint is known returns boolean false, <text>, non-Latn codepoint position in <text> (left to right), and the codepoint character when codepoint is not known TODO: when text has accept-as-written markup, return a non-boolean value to indicate that <text> is not wholly latn script? Use that return value to create non-Latn HTML lang= attribute because <text> isn't really latn so lang=und (undetermined)? or instead, omit the -Latn subtag? (without -Latn need to force |italic=yes) ]] local function is_latin (text, tag) local count; text, count = text:gsub ('^%(%((.+)%)%)$', '%1'); -- remove accept-as-written markup if present if 0 ~= count then return true, text; -- markup present so assume that <text> is Latn-script end local pos = 0; -- position counter for error messaging for codepoint in mw.ustring.gcodepoint (text) do -- fetch each code point pos = pos + 1; -- bump the position counter if not is_latn_data.singles_t[codepoint] and -- codepoint not found in the singles list? not binary_search (codepoint, is_latn_data.ranges_t) and -- codepoint not a member of a listed range? not (tag and is_latn_data.specials_t[codepoint] and is_latn_data.specials_t[codepoint][tag]) then -- not a language-specific codepoint? return false, text, pos, mw.ustring.char (codepoint); -- codepoint not known; return false with codepoint position and character representation end end return true, text; -- is known; return <text> end --[[--------------------------< _ L A N G >-------------------------------------------------------------------- Entry point for {{lang}}. There should be no reason to set parameters in the {{lang}} {{#invoke:}} <includeonly>{{#invoke:lang|lang}}</includeonly> Parameters are received from the template's frame (parent frame). ]] local function _lang (args) local out = {}; local language_name; -- used to make category names local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set local subtags = {}; -- IETF subtags script, region, variant, and private local code; -- the language code local msg; -- for error messages local tag = 'span'; -- initial value for make_text_html() local template = args.template or cfg.templates_t.lang; maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once maint_msgs = {}; validate_cat_args (args); -- determine if categorization should be suppressed if args[1] and args.code then return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {'1', cfg.lang_t.conflict_n_param_types.code}), args, template); else args.code = args[1] or args.code; -- prefer args.code end if args[2] and args.text then return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {'2', cfg.lang_t.conflict_n_param_types.text}), args, template); else args.text = args[2] or args.text; -- prefer args.text end msg = validate_italic (args); if msg then return make_error_msg (msg, args, template); end msg = validate_text (template, args); -- ensure that |text= is set if is_set (msg) then -- msg is an already-formatted error message return msg; end args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate HTML tag with text trimmed accordingly args.rtl = args.rtl == cfg.keywords_t.affirmative; -- convert to boolean: 'yes' -> true, other values -> false args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag if msg then return make_error_msg (substitute (cfg.lang_t.invalid_proto, {msg}), args, template); end code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code); -- |script=, |region=, |variant= not supported because they should be part of args.code ({{{1}}} in {{lang}}) if msg then return make_error_msg (msg, args, template); end local is_latn_text, pos, char; is_latn_text, args.text, pos, char= is_latin (args.text, code); -- make a boolean msg = text_script_match_test (subtags.script, is_latn_text, pos, char) if msg then -- if an error detected then there is an error message return make_error_msg (msg, args, template); end if nil == args.style then -- nil when |italic= absent or not set or |italic=default; args.style controls if ('latn' == subtags.script) or -- script is latn (this_wiki_lang_tag ~= code and not is_set (subtags.script) and not has_poem_tag (args.text) and is_latn_text) then -- text not this wiki's language, no script specified and not in poem markup but is wholly latn script (auto-italics) args.style = 'italic'; -- DEFAULT for {{lang}} templates is upright; but if latn script set for font-style:italic else args.style = 'inherit'; -- italic not set; script not latn; inherit current style end end if is_set (subtags.script) then -- if script set, override rtl setting if in_array (subtags.script, lang_data.rtl_scripts) then args.rtl = true; -- script is an rtl script else args.rtl = false; -- script is not an rtl script end end args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles language_name = language_name_get (args.code, code, true); -- get language name; try IETF tag first, then code w/o variant then code w/ variant if cfg.keywords_t.invert == args.style and 'span' == tag then -- invert only supported for in-line content args.text = invert_italics (args.text) end args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.style, args.size, language_name)); table.insert (out, make_category (code, language_name, args.nocat)); table.insert (out, render_maint (args.nocat)); -- maintenance messages and categories return table.concat (out); -- put it all together and done end --[[--------------------------< L A N G >---------------------------------------------------------------------- Entry point for {{lang}}. There should be no reason to set parameters in the {{lang}} {{#invoke:}} <includeonly>{{#invoke:lang|lang}}</includeonly> Parameters are received from the template's frame (parent frame). ]] local function lang (frame) local args_t = getArgs (frame, { -- this code so that we can detect and handle wiki list markup in text valueFunc = function (key, value) if 2 == key or 'text' == key then -- the 'text' parameter; do not trim wite space return value; -- return untrimmed 'text' elseif value then -- all other values: if the value is not nil value = mw.text.trim (value); -- trim whitespace if '' ~= value then -- empty string when value was only whitespace return value; end end return nil; -- value was empty or contained only whitespace end -- end of valueFunc }); args_t.fn = nil; -- unset because not supported but this function might have been called by {{lang|fn=lang|...}} local msg = parameter_validate (args_t, cfg.templates_t.lang); -- verify that all supplied parameters are supported by {{lang-??}} if msg then return make_error_msg (msg, args_t, cfg.templates_t.lang); -- when template has unsupported params, abandon with error message end return _lang (args_t); end --[[--------------------------< T R A N S L A T I O N _ M A K E >---------------------------------------------- Stand-alone function to create literal translation of main text. Also used by {{lang-x2}}. ]] local function translation_make (args_t) local translation_t = {', '}; -- initialize output if 'none' ~= args_t.label then -- if we want a label table.insert (translation_t, '<small>'); -- open the <small> HTML tag if cfg.keywords_t.negative == args_t.link then table.insert (translation_t, substitute ('<abbr title="$1">$2</abbr>', {cfg.translation_make_t.lit_xlation, cfg.translation_make_t.lit_abbr})); -- unlinked form else table.insert (translation_t, make_wikilink (cfg.translation_make_t.lit_xlation, cfg.translation_make_t.lit_abbr)); -- linked form end table.insert (translation_t, "&thinsp;</small>"); -- close the <small> HTML tag end table.insert (translation_t, table.concat ({ -- user styling spans match spand from {{gloss}} '<span class="gloss-quot">\'</span>', -- user styling span for quote marks; use HTML entities to avoid wiki markup confusion '<span class="gloss-text">', -- open user styling span for the translation args_t.translation, -- the translation '</span>', -- close user styling span for the translation '<span class="gloss-quot">\'</span>' -- user styling span for quote marks })); return table.concat (translation_t); -- make a big string and done end --[[--------------------------< _ L A N G _ X X >-------------------------------------------------------------- For the {{lang-??}} templates, the only parameter required to be set in the template is the language code. All other parameters can, usually should, be written in the template call. For {{lang-??}} templates for languages that can have multiple writing systems, it may be appropriate to set |script= as well. For each {{lang-??}} template choose the appropriate entry-point function so that this function knows the default styling that should be applied to text. For normal, upright style: <includeonly>{{#invoke:lang|lang_xx_inherit|code=xx}}</includeonly> For italic style: <includeonly>{{#invoke:lang|lang_xx_italic|code=xx}}</includeonly> All other parameters should be received from the template's frame (parent frame) Supported parameters are: |code = (required) the IANA language code |script = IANA script code; especially for use with languages that use multiple writing systems |region = IANA region code |variant = IANA variant code |text = (required) the displayed text in language specified by code |link = boolean false ('no') does not link code-spcified language name to associated language article |rtl = boolean true ('yes') identifies the language specified by code as a right-to-left language |nocat = boolean true ('yes') inhibits normal categorization; error categories are not affected |cat = boolian false ('no') opposite form of |nocat= |italic = boolean true ('yes') renders displayed text in italic font; boolean false ('no') renders displayed text in normal font; not set renders according to initial_style_state |lit = text that is a literal translation of text |label = 'none' to suppress all labeling (language name, 'translit.', 'lit.') any other text replaces language-name label - automatic wikilinking disabled for those {{lang-??}} templates that support transliteration (those templates where |text= is not entirely latn script): |translit = text that is a transliteration of text |translit-std = the standard that applies to the transliteration |translit-script = ISO 15924 script name; falls back to code For {{lang-??}}, the positional parameters are: {{{1}}} text {{{2}}} transliterated text {{{3}}} literal translation text no other positional parameters are allowed ]] local function _lang_xx (args, base_template) -- base_template will be either of 'langx' or 'lang-xx' local out = {}; local language_name; -- used to make display text, article links local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set local subtags = {}; -- IETF subtags script, region, and variant local code; -- the language code local translit_script_name; -- name associated with IANA (ISO 15924) script code local translit; local msg; -- for error messages local tag = 'span'; -- initial value for make_text_html() local template = args.template or base_template; maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once maint_msgs = {}; local text_idx = (cfg.templates_t.langx == base_template) and 2 or 1; -- for {{langx}} 'text' positional parameter is '2' local translit_idx = (cfg.templates_t.langx == base_template) and 3 or 2; local xlate_idx = (cfg.templates_t.langx == base_template) and 4 or 3; if args[text_idx] and args.text then return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {text_idx, cfg.lang_t.conflict_n_param_types.text}), args, template); else args.text = args[text_idx] or args.text; -- prefer positional 'text' parameter end msg = validate_italic (args); if msg then return make_error_msg (msg, args, template); end msg = validate_text (template, args); -- ensure that |text= is set, does not contain italic markup and is protected from improper bolding if is_set (msg) then return msg; end args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate HTML tag with text trimmed accordingly if args[translit_idx] and args.translit then return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {translit_idx, cfg.lang_t.conflict_n_param_types.translit}), args, template); else args.translit = args[translit_idx] or args.translit -- prefer positional 'translit' parameter end args.engvar = cfg.engvar_sel_t[args.engvar] or cfg.default_engvar; -- |engvar= when valid; cfg.default_engvar else if args[xlate_idx] and (args.translation or args.lit) then return make_error_msg (substitute (cfg.lang_xx_t.conflict_n_lit, {xlate_idx}), args, template); elseif args.translation and args.lit then return make_error_msg (cfg.lang_xx_t.conflict_lit, args, template); else args.translation = args[xlate_idx] or args.translation or args.lit; -- prefer positional 'translation' parameter end if args.links and args.link then return make_error_msg (cfg.lang_xx_t.conflict_link, args, template); else args.link = args.link or args.links; -- prefer args.link end validate_cat_args (args); -- determine if categorization should be suppressed args.rtl = args.rtl == cfg.keywords_t.affirmative; -- convert to boolean: 'yes' -> true, other values -> false code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code, args.script, args.region, args.variant); -- private omitted because private if msg then -- if an error detected then there is an error message return make_error_msg (msg, args, template); end if args.translit then local latn, pos, char; latn, args.translit, pos, char = is_latin (args.translit, (('' ~= subtags.private) and (code .. '-x-' .. subtags.private)) or code); if not latn then return make_error_msg (substitute (cfg.lang_xx_t.translit_nonlatn, {pos, char}), args, template); end end local is_latn_text, text, pos, char = is_latin (args.text, code); -- make a boolean args.text = text; -- may have been modified (accept-as-written markup removed) msg = text_script_match_test (subtags.script, is_latn_text, pos, char) if msg then -- if an error detected then there is an error message return make_error_msg (msg, args, template); end if cfg.templates_t.langx == base_template then -- auto-italics for {{langx}} templates; adapted from {{lang}} (no support for poem tag) if nil == args.style then -- nil when |italic= absent or not set or |italic=default; args.style controls if ('latn' == subtags.script) or -- script is latn (this_wiki_lang_tag ~= code and not is_set (subtags.script) and is_latn_text) then -- text is not this wiki's language, no script specified and is wholly latn script (auto-italics) args.style = 'italic'; -- set font-style:italic else args.style = 'inherit'; -- italic not set; script not latn; inherit current style end end else -- {{lang-xx}} does not do auto italics; retained for those wikis that don't support {{langx}} if nil == args.style then -- args.style controls if is_set (subtags.script) then if 'latn' == subtags.script then args.style = 'italic'; -- |script=Latn; set for font-style:italic else args.style = initial_style_state; -- italic not set; script is not latn; set for font-style:<initial_style_state> end else args.style = initial_style_state; -- here when |italic= and |script= not set; set for font-style:<initial_style_state> end end end if is_set (subtags.script) then -- if script set override rtl setting if in_array (subtags.script, lang_data.rtl_scripts) then args.rtl = true; -- script is an rtl script else args.rtl = false; -- script is not an rtl script end end args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag if msg then return make_error_msg (substitute (cfg.lang_t.invalid_proto, {args.proto}), args, template); end args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles language_name = language_name_get (args.code, code, true); -- get language name; try IETF tag first, then code w/o variant then code w/ variant category_name = language_name; -- category names retain IANA parenthetical diambiguators (if any) language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them if args.label then if 'none' ~= args.label then table.insert (out, table.concat ({args.label, ': '})); -- custom label end else if cfg.keywords_t.negative == args.link then table.insert (out, language_name); -- language name without wikilink else if mw.ustring.find (language_name, 'languages', 1, true) then table.insert (out, make_wikilink (language_name)); -- collective language name uses simple wikilink elseif lang_data.article_name[args.code:lower()] then -- is IETF tag in article name over ride? table.insert (out, make_wikilink (lang_data.article_name[args.code:lower()], language_name)); -- language name with wikilink from override data elseif lang_data.article_name[code] then -- is language tag in article override table.insert (out, make_wikilink (lang_data.article_name[code], language_name)); -- language name with wikilink from override data else table.insert (out, make_wikilink (substitute ('$1 $2', {language_name, cfg.misc_text_t.language}), language_name)); -- language name with wikilink end end table.insert (out, ': '); -- separator end if cfg.keywords_t.invert == args.italic then args.text = invert_italics (args.text) end args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.style, args.size, ('none' == args.label) and language_name or nil)) if is_set (args.translit) and not is_latn_text then -- transliteration; not supported when args.text is wholly latn text (this is an imperfect test) table.insert (out, ', '); -- comma to separate text from translit if 'none' ~= args.label then table.insert (out, '<small>'); if script_table[args['translit-script']] then -- when |translit-script= is set, try to use the script's name translit_script_name = script_table[args['translit-script']]; else translit_script_name = language_name; -- fall back on language name end local translit_title_obj = mw.title.makeTitle (0, substitute ('$1 $2',{cfg.lang_xx_t.romanization, translit_script_name})); -- make a title object; no engvar, article titles use US spelling if translit_title_obj.exists and (cfg.keywords_t.negative ~= args.link) then table.insert (out, make_wikilink (substitute ('$1 $2', {cfg.lang_xx_t.romanization, translit_script_name or language_name}), substitute ('$1', {cfg.engvar_t[args.engvar]['romanisz_pt']})) .. ':'); -- make a wikilink if there is an article to link to; engvar the display text else table.insert (out, substitute ('$1:', {cfg.engvar_t[args.engvar]['romanisz_pt']})); -- else plain text per engvar end table.insert (out, '&nbsp;</small>'); -- close the small tag end translit = make_translit (args.code, language_name, args.translit, args['translit-std'], args['translit-script'], nil, args.engvar) if is_set (translit) then table.insert (out, translit); else return make_error_msg (substitute ('$1: $2', {cfg.lang_xx_t.invalid_xlit_std, args['translit-std'] or '[missing]'}), args, template); end elseif is_set (args.translit) and is_latn_text then -- when creating a transliteration of Latn script <text> return make_error_msg (cfg.lang_xx_t.xlit_of_latn, args, template); -- emit error message and abandon end if is_set (args.translation) then -- translation (not supported in {{lang}}) table.insert (out, translation_make (args)); end table.insert (out, make_category (code, category_name, args.nocat)); table.insert (out, render_maint(args.nocat)); -- maintenance messages and categories return table.concat (out); -- put it all together and done end --[[--------------------------< L A N G _ X X _ A R G S _ G E T >---------------------------------------------- Common function to get args table from {{lang-??}} templates. Returns table of args. Text positional parameters are not trimmed here but are selectively trimmed at html_tag_select(). ]] local function lang_xx_args_get (frame, base_template) local args_t = getArgs(frame, { parentFirst= true, -- parameters in the template override parameters set in the {{#invoke:}} valueFunc = function (key, value) if ((cfg.templates_t.langx == base_template) and 2 or 1) == key then -- the 'text' positional parameter; 1 for {{lang-??}}, 2 for {{langx}}; do not trim wite space return value; -- return untrimmed 'text' positional parameter elseif value then -- all other values: if the value is not nil value = mw.text.trim (value); -- trim whitespace if '' ~= value then -- empty string when value was only whitespace return value; end end return nil; -- value was empty or contained only whitespace end -- end of valueFunc }); return args_t; end --[[--------------------------< L A N G _ X X _ I T A L I C >-------------------------------------------------- Entry point for those {{lang-??}} templates that call lang_xx_italic(). Sets the initial style state to italic. ]] local function lang_xx_italic (frame) local args = lang_xx_args_get (frame, cfg.templates_t.langxx); args.fn = nil; -- unset because not supported but this function might have been called by {{lang|fn=lang_xx_italic|...}} local msg = parameter_validate (args, cfg.templates_t.langxx); -- verify that all supplied parameters are supported by {{lang-??}} if msg then return make_error_msg (msg, args, cfg.templates_t.langxx); -- when template has unsupported params, abandon with error message end initial_style_state = 'italic'; return _lang_xx (args, cfg.templates_t.langxx) .. '[[Category:Pages using Lang-xx templates]]'; -- temporary category end --[[--------------------------< _ L A N G _ X X _ I T A L I C >------------------------------------------------ Entry point from another module. Sets the initial style state to italic. ]] local function _lang_xx_italic (args) initial_style_state = 'italic'; return _lang_xx (args, cfg.templates_t.langxx); end --[[--------------------------< L A N G _ X X _ I N H E R I T >------------------------------------------------ Entry point for those {{lang-??}} templates that call lang_xx_inherit(). Sets the initial style state to inherit. ]] local function lang_xx_inherit (frame) local args = lang_xx_args_get (frame, cfg.templates_t.langxx); args.fn = nil; -- unset because not supported but this function might have been called by {{lang|fn=lang_xx_inherit|...}} local msg = parameter_validate (args, cfg.templates_t.langxx); -- verify that all supplied parameters are supported by {{lang-??}} if msg then return make_error_msg (msg, args, cfg.templates_t.langxx); -- when template has unsupported params, abandon with error message end initial_style_state = 'inherit'; return _lang_xx (args, cfg.templates_t.langxx) .. '[[Category:Pages using Lang-xx templates]]'; -- temporary category end --[[--------------------------< _ L A N G _ X X _ I N H E R I T >---------------------------------------------- Entry point from another module. Sets the initial style state to inherit. ]] local function _lang_xx_inherit (args) initial_style_state = 'inherit'; return _lang_xx (args, cfg.templates_t.langxx); end --[[--------------------------< _ L A N G X >------------------------------------------------------------------ Entry point from another module. ]] local function _langx (args_t) local langx_data = mw.loadData ('Module:Lang/langx'); -- get necessary data local rtl_t = langx_data.rtl_t; -- get list of language tags for languages that are rendered right-to-left local link_t = langx_data.link_t; -- get list of language tags for {{lang-??}} templates that set |link=<something> local size_t = langx_data.size_t; -- get list of language tags for {{lang-??}} templates that set |size=<something> local msg = parameter_validate (args_t, cfg.templates_t.langx); if msg then return make_error_msg (msg, args_t, cfg.templates_t.langx); end args_t.code = args_t[1] or args_t.code; -- get the language tag; must be {{{1}}} or |code= if not args_t.code then return make_error_msg (cfg.get_ietf_parts_t.missing_lang_tag, args_t, cfg.templates_t.langx); end args_t.rtl = args_t.rtl or (rtl_t[args_t.code] and cfg.keywords_t.affirmative); -- prefer |rtl= in template call, use rtl_t else args_t.link = args_t.link or link_t[args_t.code]; -- prefer |link= in template call, use link_t felse args_t.size = args_t.size or size_t[args_t.code]; -- prefer |size= in template call, use size_t else args_t[1] = nil; -- unset to mimic {{lang-??}} templates which set |code=xx local lang_subtag = args_t.code; -- use only the base language subtag for unsupported tag test; some args_t.code are modified by |script= etc return _lang_xx (args_t, cfg.templates_t.langx); end --[[--------------------------< L A N G X >-------------------------------------------------------------------- Entry point for {{langx}}. this function calls _lang_xx() to render non-English text. The {{lang-??}} templates have three positional paramters but {{langx}} has four: | 1 | 2 | 3 | 4 {{lang-xx |<text> |<xlit> |<xlat> }} {{langx |<tag> |<text> |<xlit> |<xlat> }} The calls to lang_xx_args_get() and _lang_xx() use 'langx' as a flag for those functions to select the proper positional parameters. {{lang-??}} depends on the calling template to select 'inherit' or 'italic' to establish the default rendering. {{langx}} can't do that. The initial version of {{langx}} relied on a list of language tags (inherit_t in ~/langx) scraped from those {{lang-??}} templates that call lang_xx_inherit() to render text in upright font. langx() now uses auto-italics code adapted from {{lang}} (doesn't support poem tags). ]] local function langx (frame) local args_t = lang_xx_args_get (frame, cfg.templates_t.langx); -- get the arguments; 'langx' is the <base_template> used to decide which positional param is 'text', 'translit', 'lit' return _langx (args_t); end --[[--------------------------< _ I S _ I E T F _ T A G >------------------------------------------------------ Returns true when a language name associated with IETF language tag exists; nil else. IETF language tag must be valid. All code combinations supported by {{lang}} and the {{lang-??}} templates are supported by this function. Module entry point from another module. ]] local function _is_ietf_tag (tag) -- entry point when this module is require()d into another local c, s, r, v, p, err; -- code, script, region, variant, private, error message c, s, r, v, p, err = get_ietf_parts (tag); -- disassemble tag into constituent part and validate return ((c and not err) and true) or nil; -- return true when code portion has a value without error message; nil else end --[[--------------------------< I S _ I E T F _ T A G >-------------------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function is_ietf_tag (frame) return _is_ietf_tag (getArgs (frame)[1]); -- args[1] is the IETF language tag to be tested; also get parent frame end --[[--------------------------< I S _ I E T F _ T A G _ F R A M E >-------------------------------------------- Module entry point from an {{#invoke:}}; same as is_ietf_tag() except does not get parameters from the parent (template) frame. This function not useful when called by {{lang|fn=is_ietf_tag_frame|<tag>}} because <tag> is in the parent frame. ]] local function is_ietf_tag_frame (frame) return _is_ietf_tag (getArgs (frame, {frameOnly = true,})[1]); -- args[1] is the IETF language tag to be tested; do not get parent frame end --[[--------------------------< _ N A M E _ F R O M _ T A G >-------------------------------------------------- Returns language name associated with IETF language tag if valid; error message else. All code combinations supported by {{lang}} and the {{lang-??}} templates are supported by this function. Set invoke's |link= parameter to yes to get wikilinked version of the language name. Module entry point from another module. ]] local function _name_from_tag (args) local subtags = {}; -- IETF subtags script, region, variant, and private local raw_code = args[1]; -- save a copy of the input IETF subtag local link = cfg.keywords_t.affirmative == args['link']; -- make a boolean local label = args.label; local code; -- the language code local msg; -- gets an error message if IETF language tag is malformed or invalid local language_name = ''; code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code); if msg then local template = (args['template'] and table.concat ({'{{', args['template'], '}}: '})) or ''; -- make template name (if provided by the template) return make_error_span (template, msg); end raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private language_name = language_name_get (raw_code, code); -- get language name; try IETF tag first, then code w/o variant then code w/ variant if 'yes' ~= args.raw then language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them end if link then -- when |link=yes, wikilink the language name if mw.ustring.find (language_name, 'languages', 1, true) then language_name = make_wikilink (language_name, label); -- collective language name uses simple wikilink elseif lang_data.article_name[raw_code:lower()] then -- is IETF tag in article name override? language_name = make_wikilink (lang_data.article_name[raw_code:lower()], label or language_name); -- language name with wikilink from override data elseif lang_data.article_name[code] then -- is language tag in article name override? language_name = make_wikilink (lang_data.article_name[code], label or language_name); -- language name with wikilink from override data else language_name = make_wikilink (substitute ('$1 $2', {language_name, cfg.misc_text_t.language}), label or language_name); -- language name with wikilink end end return language_name; end --[[--------------------------< N A M E _ F R O M _ T A G >---------------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function name_from_tag (frame) -- entry point from an {{#invoke:lang|name_from_tag|<IETF tag>|link=<yes>|template=<template name>}} return _name_from_tag (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame end --[[--------------------------< _ T A G _ F R O M _ N A M E >-------------------------------------------------- Returns the IETF language tag associated with the language name. Spelling of language name must be correct according to the spelling in the source tables. When a standard language name has a parenthetical disambiguator, that disambiguator must be omitted (they are not present in the data name-to-tag tables). Module entry point from another module. ]] local function _tag_from_name (args) -- entry point from another module local msg; if args[1] and '' ~= args[1] then local data = mw.loadData ('Module:Lang/tag from name'); -- get the reversed data tables TODO: change when going live local lang = args[1]:lower(); -- allow any-case for the language name (speeling must till be correct) local tag = data.rev_override_table[lang] or data.rev_lang_table[lang] or data.rev_lang_dep_table[lang]; -- get the code; look first in the override then in the standard if tag then return tag, true; -- language name found so return tag and done; second return used by is_lang_name() else msg = substitute (cfg.tag_from_name_t.lang_not_found, {args[1]}); -- language name not found, error message end else msg = cfg.tag_from_name_t.missing_lang_name; -- language name not found, error message end local template = ''; if args.template and '' ~= args.template then template = table.concat ({'{{', args['template'], '}}: '}); -- make template name (if provided by the template) end return make_error_span (template, msg); end --[[--------------------------< T A G _ F R O M _ N A M E >---------------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function tag_from_name (frame) -- entry point from an {{#invoke:lang|tag_from_name|<language name>|link=<yes>|template=<template name>}} local result, _ = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by is_lang_name() return result; end --[[--------------------------< I S _ L A N G _ N A M E >------------------------------------------------------ Module entry point from an {{#invoke:}}. ]] local function is_lang_name (frame) local _, result = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by tag_from_name() return result and true or nil; end --[[--------------------------< _ X L I T >-------------------------------------------------------------------- Module entry point from another module. ]] local function _xlit (args) local title_table = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards local language_name; -- language name that matches language code; used for tool tip local translit; -- transliterated text to display local script; -- IANA script local msg; -- for when called functions return an error message local template = args.template or cfg.templates_t.transliteration; maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once maint_msgs = {}; if is_set (args[3]) then -- [3] set when {{transliteration|code|standard|text}} args.text = args[3]; -- get the transliterated text args.translit_std = args[2] and args[2]:lower(); -- get the standard; lower case for table indexing if not title_table[args.translit_std] then return make_error_msg (substitute (cfg.transl_t.unrecog_xlit_std, {args.translit_std}), args, template); end else if is_set (args[2]) then -- [2] set when {{transliteration|code|text}} args.text = args[2]; -- get the transliterated text else if args[1] and (args[1]:match ('^%a%a%a?%a?$') or -- args[2] missing; is args[1] a language or script tag or is it the transliterated text? args[1]:match ('^%a%a%a?%-x%-')) then -- or is args[1] a private-use tag return make_error_msg (cfg.transl_t.no_text, args, template); -- args[1] is a code so we're missing text else args.text = args[1]; -- args[1] is not a code so we're missing that; assign args.text for error message return make_error_msg (cfg.transl_t.missing_lang_scr, args, template); end end end if is_set (args[1]) then -- IANA language code used for HTML lang= attribute; or ISO 15924 script code if args[1]:match ('^%a%a%a?%a?$') or args[1]:match ('^%a%a%a?%-x%-') then -- args[1] has correct form? args.code = args[1]:lower(); -- use the language/script code; only (2, 3, or 4 alpha characters) or private-use; lower case because table indexes are lower case else return make_error_msg (substitute (cfg.transl_t.unrecog_lang_scr, {args[1]}), args, template); -- invalid language / script code end else return make_error_msg (cfg.transl_t.missing_lang_scr, args, template); -- missing language / script code so quit end local is_latn_text, pos, char; is_latn_text, args.text, pos, char= is_latin (args.text, args.code); -- is latn text? strip accept-as-written markup if not is_latn_text then -- when text is not latn return make_error_msg (substitute (cfg.lang_xx_t.translit_nonlatn, {pos, char}), args, template); -- abandon with error message end msg = validate_italic (args); if msg then return make_error_msg (msg, args, template); end if 'italic' == args.style then -- 'italic' when |italic=yes; because that is same as absent or not set and |italic=default args.style = nil; -- set to nil; end args.engvar = cfg.engvar_sel_t[args.engvar] or cfg.default_engvar; -- |engvar= when valid; cfg.default_engvar else if override_table[args.code] then -- is code a language code defined in the override table? language_name = override_table[args.code]; args.code = args.code:match ('^%a%a%a?'); -- if private use, strip all but language subtag elseif lang_table[args.code] then -- is code a language code defined in the standard language code tables? language_name = lang_table[args.code]; elseif lang_dep_table[args.code] then -- is code a language code defined in the deprecated language code tables? language_name = lang_dep_table[args.code]; elseif script_table[args.code] then -- if here, code is not a language code; is it a script code? language_name = script_table[args.code]; script = args.code; -- code was an ISO 15924 script so use that instead args.code = ''; -- unset because not a language code else return make_error_msg (substitute (cfg.transl_t.unrecog_lang_scr, {args.code}), args, template); -- invalid language / script code end -- here only when all parameters passed to make_translit() are valid return make_translit (args.code, language_name, args.text, args.translit_std, script, args.style, args.engvar); end --[[--------------------------< X L I T >---------------------------------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function xlit (frame) return _xlit (getArgs(frame)); end --[[--------------------------< C A T E G O R Y _ F R O M _ T A G >-------------------------------------------- Returns category name associated with IETF language tag if valid; error message else. All code combinations supported by {{lang}} and the {{lang-??}} templates are supported by this function. Module entry point from another module. ]] local function _category_from_tag (args_t) local subtags = {}; -- IETF subtags script, region, variant, and private local raw_code = args_t[1]; -- save a copy of the input IETF subtag local link = cfg.keywords_t.affirmative == args_t.link; -- make a boolean local label = args_t.label; local code; -- the language code local msg; -- gets an error message if IETF language tag is malformed or invalid local category_name = ''; code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code); if msg then local template = (args_t.template and table.concat ({'{{', args_t.template, '}}: '})) or ''; -- make template name (if provided by the template) return make_error_span (template, msg); end raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private category_name = language_name_get (raw_code, code); -- get language name; try IETF tag first, then code w/o variant then code w/ variant category_name = make_category (code, category_name, nil, true):gsub ('[%[%]]', ''); if link then return table.concat ({'[[:', category_name, ']]'}); else return category_name; end end --[[--------------------------< C A T E G O R Y _ F R O M _ T A G >-------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function category_from_tag (frame) -- entry point from an {{#invoke:lang|category_from_tag|<IETF tag>|template=<template name>}} return _category_from_tag (getArgs (frame)); -- pass-on the args table, nothing else; getArgs() so we also get parent frame end --[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------ ]] return { category_from_tag = category_from_tag, -- frame entry points when this module is #invoke:ed into templates/wikitext lang = lang, -- entry point for {{lang}} langx = langx, -- entry point for {{langx}} lang_xx_inherit = lang_xx_inherit, -- entry points for {{lang-??}} lang_xx_italic = lang_xx_italic, is_ietf_tag = is_ietf_tag, is_ietf_tag_frame = is_ietf_tag_frame, is_lang_name = is_lang_name, tag_from_name = tag_from_name, -- returns IETF tag associated with language name name_from_tag = name_from_tag, -- used for template documentation; possible use in ISO 639 name from code templates xlit = xlit, -- entry point for {{transliteration}} _category_from_tag = _category_from_tag, -- API entry points when this module is require()d into other modules _lang = _lang, _langx = _langx, _lang_xx_inherit = _lang_xx_inherit, _lang_xx_italic = _lang_xx_italic, _is_ietf_tag = _is_ietf_tag, get_ietf_parts = get_ietf_parts, _tag_from_name = _tag_from_name, _name_from_tag = _name_from_tag, _xlit = _xlit, _translation_make = translation_make, }; pjs0klhaiwweelyd7pjfmp0uzocrd5t 373854 373853 2026-10-28T05:55:25Z ChiK 1136 1 revision imported from [[:en:Module:Lang]] 373853 Scribunto text/plain --[=[ Lua support for the {{lang}}, {{langx}}, {{lang-??}}, and {{transliteration}} templates and replacement of various supporting templates. ]=] require('strict'); local getArgs = require ('Module:Arguments').getArgs; local unicode = require ("Module:Unicode data"); -- for is_Latin() and is_rtl() local yesno = require ('Module:Yesno'); local sandbox = (mw.getCurrentFrame():getTitle():match ('/sandbox') or ''); -- when called from a sandbox template or module load sandbox data and sandbox configuration local lang_data = mw.loadData ('Module:Lang/data' .. sandbox); -- language name override and transliteration tool-tip tables local lang_name_table = lang_data.lang_name_table; -- language codes, names, regions, scripts, suppressed scripts local lang_table = lang_data.lang_name_table.lang; local lang_dep_table = lang_data.lang_name_table.lang_dep; local script_table = lang_data.lang_name_table.script; local region_table = lang_data.lang_name_table.region; local variant_table = lang_data.lang_name_table.variant; local suppressed_table = lang_data.lang_name_table.suppressed; local override_table = lang_data.override; local synonym_table = mw.loadData ('Module:Lang/ISO 639 synonyms'); -- ISO 639-2/639-2T code translation to 639-1 code local cfg = mw.loadData ('Module:Lang/configuration' .. sandbox); -- for internationalization local is_latn_data = mw.loadData ('Module:Lang/data/is latn data'); local sizeof_ranges_t = is_latn_data.sizeof_ranges_t; local namespace = mw.title.getCurrentTitle().namespace; -- used for categorization local content_lang = mw.language.getContentLanguage(); local this_wiki_lang_tag = content_lang.code; -- get this wiki's language tag local this_wiki_lang_dir = content_lang:getDir(); -- get this wiki's language direction local initial_style_state; -- set by lang_xx_normal() and lang_xx_italic() local maint_cats = {}; -- maintenance categories go here local maint_msgs = {}; -- and their messages go here --[[--------------------------< M A K E _ E R R O R _ S P A N >-------------------------------------------------- ]] local function make_error_span (template, msg) --[[ WARNING: must have the class "error" to be detected as an error by {{#iferror:}}. Please do not remove, to avoid breaking any downstream templates relying on this. ]] return table.concat ({'<span class="error" style="font-size: inherit;">', cfg.misc_text_t.error, ': ', template, msg, '</span>'}) end --[[--------------------------< S U B S T I T U T E >---------------------------------------------------------- Substitutes $1, $2, etc in <message> with data from <data_t>. Returns plain-text substituted string when <data_t> not nil; returns <message> else. ]] local function substitute (message, data_t) return data_t and mw.message.newRawMessage (message, data_t):plain() or message; end --[[--------------------------< M A K E _ E R R O R _ M S G >-------------------------------------------------- Assembles an error message from template name, message text, help link, and error category. ]] local function make_error_msg (msg, args_t, template) local category; local text; -- handle the oddity that is {{langx}} if cfg.templates_t.langxx == template then text = args_t.text or args_t[1]; -- for {{lang-xx}} else text = args_t.text or args_t[2]; -- for {{lang}}, {{langx}}, and {{transliteration}} end if cfg.templates_t.transliteration == template then category = cfg.make_error_msg_t.xlit_err_cat; else category = cfg.make_error_msg_t.lang_err_cat; end local category_link = ((0 == namespace or 10 == namespace) and not args_t.nocat) and substitute ('[[Category:$1]]', {category}) or ''; --[[ WARNING: must have the class "error" to be detected as an error by {{#iferror:}}. Please do not remove, to avoid breaking any downstream templates relying on this. ]] return substitute ('[$1] <span class="error" style="font-size: inherit;">$2: &#x7B;{$3}}: $4 ([[:Category:$5|$6]])</span>$7', -- &#x7B; prevents the template name from being treated as a template call in certain situations { text or cfg.make_error_msg_t.undefined, cfg.misc_text_t.error, template, msg, category, cfg.misc_text_t.help, category_link }) end --[[--------------------------< P A R A M E T E R _ V A L I D A T E >------------------------------------------ ]] local function parameter_validate (args_t, template) local err_msg = cfg.parameter_validate_t.invalid_param; if cfg.templates_t.lang == template then -- for {{lang}} for param, _ in pairs (args_t) do if not cfg.known_params_t.params_lang_t[param] and -- unique {{lang}} parameters not cfg.known_params_t.common_params_all_t[param] then -- common to all return substitute (err_msg, {param}); -- <param> not found so abandon end end elseif cfg.templates_t.langx == template then -- for {{langx}} for param, _ in pairs (args_t) do if not cfg.known_params_t.params_langx_t[param] and -- unique {{langx}} parameters not cfg.known_params_t.params_x_t[param] and -- common to {{langx}} and {{lang-xx}} not cfg.known_params_t.common_params_all_t[param] then -- common to all return substitute (err_msg, {param}); -- <param> not found so abandon end end elseif cfg.templates_t.langxx == template then -- for {{lang-xx}} for param, _ in pairs (args_t) do if not cfg.known_params_t.params_lang_xx_t[param] and -- unique {{lang-xx}} parameters not cfg.known_params_t.params_x_t[param] and -- common to {{langx}} and {{lang-xx}} not cfg.known_params_t.common_params_all_t[param] then -- common to all return substitute (err_msg, {param}); -- <param> not found so abandon end end end end --[[--------------------------< I S _ S E T >------------------------------------------------------------------ Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not an empty string. ]] local function is_set (var) return not (var == nil or var == ''); end --[[--------------------------< I N V E R T _ I T A L I C S >------------------------------------------------- This function attempts to invert the italic markup a args.text by adding/removing leading/trailing italic markup in args.text. Like |italic=unset, |italic=invert disables automatic italic markup. Individual leading/trailing apostrophes are converted to their HTML numeric entity equivalent so that the new italic markup doesn't become bold markup inadvertently. Leading and trailing wiki markup is extracted from args.text into separate table elements. Addition, removal, replacement of wiki markup is handled by a string.gsub() replacement table operating only on these separate elements. In the string.gsub() matching pattern, '.*' matches empty string as well as the three expected wiki markup patterns. This function expects that markup in args.text is complete and correct; if it is not, oddness may result. ]] local function invert_italics (source) local invert_pattern_table = { -- leading/trailing markup add/remove/replace patterns [""]="\'\'", -- empty string becomes italic markup ["\'\'"]="", -- italic markup becomes empty string ["\'\'\'"]="\'\'\'\'\'", -- bold becomes bold italic ["\'\'\'\'\'"]="\'\'\'", -- bold italic become bold }; local seg = {}; source = source:gsub ("%f[\']\'%f[^\']", '&#39;'); -- protect single quote marks from being interpreted as bold markup seg[1] = source:match ('^(\'\'+%f[^\']).+') or ''; -- get leading markup, if any; ignore single quote seg[3] = source:match ('.+(%f[\']\'\'+)$') or ''; -- get trailing markup, if any; ignore single quote if '' ~= seg[1] and '' ~= seg[3] then -- extract the 'text' seg[2] = source:match ('^\'\'+%f[^\'](.+)%f[\']\'\'+$') -- from between leading and trailing markup elseif '' ~= seg[1] then seg[2] = source:match ('^\'\'+%f[^\'](.+)') -- following leading markup elseif '' ~= seg[3] then seg[2] = source:match ('(.+)%f[\']\'\'+$') -- preceding trailing markup else seg[2] = source -- when there is no markup end seg[1] = invert_pattern_table[seg[1]] or seg[1]; -- replace leading markup according to pattern table seg[3] = invert_pattern_table[seg[3]] or seg[3]; -- replace leading markup according to pattern table return table.concat (seg); -- put it all back together and done end --[[--------------------------< V A L I D A T E _ I T A L I C >------------------------------------------------ Validates |italic= or |italics= assigned values. When |italic= is set and has an acceptable assigned value, return the matching CSS font-style property value or, for the special case 'default', return nil. When |italic= is not set, or has an unacceptable assigned value, return nil and a nil error message. When both |italic= and |italics= are set, returns nil and a 'conflicting' error message. The return value nil causes the calling lang, lang_xx, or xlit function to set args.italic according to the template's defined default ('inherit' for {{lang}}, 'inherit' or 'italic' for {{lang-??}} depending on the individual template's requirements, 'italic' for {{transliteration}}) or to the value appropriate to |script=, if set ({{lang}} and {{lang-??}} only). Accepted values and the values that this function returns are are: nil - when |italic= absent or not set; returns nil default - for completeness, should rarely if ever be used; returns nil yes - force args.text to be rendered in italic font; returns 'italic' no - force args.text to be rendered in normal font; returns 'normal' unset - disables font control so that font-style applied to text is dictated by markup inside or outside the template; returns 'inherit' invert - disables font control so that font-style applied to text is dictated by markup outside or inverted inside the template; returns 'invert' ]] local function validate_italic (args) local properties = {[cfg.keywords_t.affirmative] = 'italic', [cfg.keywords_t.negative] = 'normal', [cfg.keywords_t.unset] = 'inherit', [cfg.keywords_t.invert] = 'invert', [cfg.keywords_t.default] = nil}; local italic, count = nil, 0 for _, param in pairs {'italic', 'italics', 'i'} do local arg = args[param] if nil ~= arg then if nil == italic then italic = arg end count = count + 1 end end if count > 1 then -- return an error message if more than one is set return cfg.validate_italic_t.multi_italic; end args.style = properties[italic] -- set args.style to an appropriate value args.italic = italic; -- use args.italic as the canonical parameter return nil; -- return a nil error message end --[=[--------------------------< V A L I D A T E _ C A T _ A R G S >---------------------------------------------------------- Default behavior of the {{lang}} and {{lang-??}} templates is to add categorization when the templates are used in main space. This default functionality may be suppressed by setting |nocat=yes or |cat=no. This function selects one of these two parameters to control categorization. Because having two parameters with 'opposite' names and 'opposite' values is confusing, this function accepts only affirmative values for |nocat= and only negative values for |cat=; in both cases the 'other' sense (and non-sense) is not accepted and the parameter is treated as if it were not set in the template. Sets args.nocat to true if categorization is to be turned off; to nil if the default behavior should apply. Accepted values for |nocat= are the text strings: 'yes', 'y', 'true', 't', on, '1' -- [[Module:Yesno]] returns logical true for all of these; false or nil else for |cat= 'no', 'n', 'false', 'f', 'off', '0' -- [[Module:Yesno]] returns logical false for all of these; true or nil else ]=] local function validate_cat_args (args) if not (args.nocat or args.cat) then -- both are nil, so categorize return; end if false == yesno (args.cat) or true == yesno (args.nocat) then args.nocat = true; -- set to true when args.nocat is affirmative; nil else (as if the parameter were not set in the template) else -- args.nocat is the parameter actually used. args.nocat = nil; end end --[[--------------------------< I N _ A R R A Y >-------------------------------------------------------------- Whether needle is in haystack. ]] local function in_array (needle, haystack) if needle == nil then return false; end for n,v in ipairs (haystack) do if v == needle then return n; end end return false; end --[[--------------------------< F O R M A T _ I E T F _ T A G >------------------------------------------------ Prettify IETF tags to use recommended subtag formats: code: lower case script: sentence case region: upper case variant: lower case private: lower case prefixed with -x- ]] local function format_ietf_tag (code, script, region, variant, private) local out = {}; if is_set (private) then return table.concat ({code:lower(), 'x', private:lower()}, '-'); -- if private, all other tags ignored end table.insert (out, code:lower()); if is_set (script) then script = script:lower():gsub ('^%a', string.upper); table.insert (out, script); end if is_set (region) then table.insert (out, region:upper()); end if is_set (variant) then table.insert (out, variant:lower()); end return table.concat (out, '-'); end --[[--------------------------< G E T _ I E T F _ P A R T S >-------------------------------------------------- Extracts and returns IETF language tag parts: primary language subtag (required) - 2 or 3 character IANA language code script subtag - four character IANA script code region subtag - two-letter or three digit IANA region code variant subtag - four digit or 5-8 alnum variant code; only one variant subtag supported private subtag - x- followed by 1-8 alnum private code; only supported with the primary language tag in any one of these forms lang lang-variant lang-script lang-script-variant lang-region lang-region-variant lang-script-region lang-script-region-variant lang-x-private each of lang, script, region, variant, and private, when used, must be valid. Languages with both two- and three-character code synonyms are promoted to the two-character synonym because the IANA registry file omits the synonymous three-character code; we cannot depend on browsers understanding the synonymous three-character codes in the lang= attribute. For {{lang-??}} templates, the parameters |script=, |region=, and |variant= are supported (not supported in {{lang}} because those parameters are superfluous to the IETF subtags in |code=). Returns six values; all lower case. Valid parts are returned as themselves; omitted parts are returned as empty strings, invalid parts are returned as nil; the sixth returned item is an error message (if an error detected) or nil. See http://www.rfc-editor.org/rfc/bcp/bcp47.txt section 2.1. ]] local function get_ietf_parts (source, args_script, args_region, args_variant) local code, script, region, variant, private; -- IETF tag parts if not is_set (source) then return nil, nil, nil, nil, nil, cfg.get_ietf_parts_t.missing_lang_tag; end local pattern = { -- table of tables holding acceptable IETF tag patterns and short names of the IETF part captured by the pattern {'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 1 - ll-Ssss-RR-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 2 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 4 digits) {'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 3 - ll-Ssss-RR-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 4 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d%d)$', 's', 'v'}, -- 5 - ll-Ssss-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%a%a%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'v'}, -- 6 - ll-Ssss-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a)%-(%d%d%d%d)$', 'r', 'v'}, -- 7 - ll-RR-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%d%d%d)%-(%d%d%d%d)$', 'r', 'v'}, -- 8 - ll-DDD-variant (where region is 3 digits; variant is 4 digits) {'^(%a%a%a?)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 9 - ll-RR-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 10 - ll-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%d%d%d%d)$', 'v'}, -- 11 - ll-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%w%w%w%w%w%w?%w?%w?)$', 'v'}, -- 12 - ll-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)$', 's', 'r'}, -- 13 - ll-Ssss-RR {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)$', 's', 'r'}, -- 14 - ll-Ssss-DDD (region is 3 digits) {'^(%a%a%a?)%-(%a%a%a%a)$', 's'}, -- 15 - ll-Ssss {'^(%a%a%a?)%-(%a%a)$', 'r'}, -- 16 - ll-RR {'^(%a%a%a?)%-(%d%d%d)$', 'r'}, -- 17 - ll-DDD (region is 3 digits) {'^(%a%a%a?)$'}, -- 18 - ll {'^(%a%a%a?)%-x%-(%w%w?%w?%w?%w?%w?%w?%w?)$', 'p'}, -- 19 - ll-x-pppppppp (private is 1-8 alnum characters) } local t = {}; -- table of captures; serves as a translator between captured IETF tag parts and named variables for i, v in ipairs (pattern) do -- spin through the pattern table looking for a match local c1, c2, c3, c4; -- captures in the 'pattern' from the pattern table go here c1, c2, c3, c4 = source:match (pattern[i][1]); -- one or more captures set if source matches pattern[i]) if c1 then -- c1 always set on match code = c1; -- first capture is always code t = { [pattern[i][2] or 'x'] = c2, -- fill the table of captures with the rest of the captures [pattern[i][3] or 'x'] = c3, -- take index names from pattern table and assign sequential captures [pattern[i][4] or 'x'] = c4, -- index name may be nil in pattern[i] table so "or 'x'" spoofs a name for this index in this table }; script = t.s or ''; -- translate table contents to named variables; region = t.r or ''; -- absent table entries are nil so set named IETF parts to empty string for concatenation variant= t.v or ''; private = t.p or ''; break; -- and done end end if not code then return nil, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_tag, {source}); -- don't know what we got but it is malformed end code = code:lower(); -- ensure that we use and return lower case version of this if not (override_table[code] or lang_table[code] or synonym_table[code] or lang_dep_table[code]) then return nil, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_code, {code}); -- invalid language code, don't know about the others (don't care?) end if synonym_table[code] then -- if 639-2/639-2T code has a 639-1 synonym table.insert (maint_cats, substitute (cfg.get_ietf_parts_t.maint_promo_cat, {code})); table.insert (maint_msgs, substitute (cfg.get_ietf_parts_t.maint_promo_msg, {code, synonym_table[code]})); code = synonym_table[code]; -- use the synonym end if is_set (script) then if is_set (args_script) then return code, nil, nil, nil, nil, cfg.get_ietf_parts_t.redundant_scr; -- both code with script and |script= not allowed end else script = args_script or ''; -- use args.script if provided end if is_set (script) then script = script:lower(); -- ensure that we use and return lower case version of this if not script_table[script] then return code, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_scr_code, {script, code}); -- language code OK, invalid script, don't know about the others (don't care?) end end if suppressed_table[script] then -- ensure that code-script does not use a suppressed script if in_array (code, suppressed_table[script]) then return code, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.script_code, {script, code}); -- language code OK, script is suppressed for this code end end if is_set (region) then if is_set (args_region) then return code, nil, nil, nil, nil, cfg.get_ietf_parts_t.redundant_reg; -- both code with region and |region= not allowed end else region = args_region or ''; -- use args.region if provided end if is_set (region) then region = region:lower(); -- ensure that we use and return lower case version of this if not region_table[region] then return code, script, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_reg_code, {region, code}); end end if is_set (variant) then if is_set (args_variant) then return code, nil, nil, nil, nil, cfg.get_ietf_parts_t.redundant_var; -- both code with variant and |variant= not allowed end else variant = args_variant or ''; -- use args.variant if provided end if is_set (variant) then variant = variant:lower(); -- ensure that we use and return lower case version of this if not variant_table[variant] then -- make sure variant is valid return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var, {variant}); end -- does this duplicate/replace tests in lang() and lang_xx()? if is_set (script) then -- if script set it must be part of the 'prefix' if not in_array (table.concat ({code, '-', script}), variant_table[variant]['prefixes']) then return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var_code_scr, {variant, code, script}); end elseif is_set (region) then -- if region set, there are some prefixes that require lang code and region (en-CA-newfound) if not in_array (code, variant_table[variant]['prefixes']) then -- first see if lang code is all that's required (en-oxendict though en-GB-oxendict is preferred) if not in_array (table.concat ({code, '-', region}), variant_table[variant]['prefixes']) then -- now try for lang code and region (en-CA-newfound) return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var_code_reg, {variant, code, region}); end end else -- cheap way to determine if there are prefixes; fonipa and others don't have prefixes; # operator always returns 0 if variant_table[variant]['prefixes'][1] and not in_array (code, variant_table[variant]['prefixes']) then return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var_code, {variant, code}); end end end if is_set (private) then private = private:lower(); -- ensure that we use and return lower case version of this if not override_table[table.concat ({code, '-x-', private})] then -- make sure private tag is valid; note that index return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_pri, {private}); end end return code, script, region, variant, private, nil; -- return the good bits; make sure that msg is nil end --[=[-------------------------< M A K E _ W I K I L I N K >---------------------------------------------------- Makes a wikilink; when both link and display text is provided, returns a wikilink in the form [[L|D]]; if only link is provided, returns a wikilink in the form [[L]]; if neither are provided or link is omitted, returns an empty string. ]=] local function make_wikilink (link, display) if is_set (link) then if is_set (display) then return table.concat ({'[[', link, '|', display, ']]'}); else return table.concat ({'[[', link, ']]'}); end else return ''; end end --[[--------------------------< D I V _ M A R K U P _ A D D >-------------------------------------------------- Adds <i> and </i> tags to list-item text or to implied <p>..</p> text. Mixed not supported. ]] local function div_markup_add (text, style) if text:find ('^\n[%*:;#]') then -- look for list markup; list markup must begin at start of text if 'italic' == style then return text:gsub ('(\n[%*:;#]+)([^\n]+)', '%1<i>%2</i>'); -- insert italic markup at each list item else return text; end end if text:find ('\n+') then -- look for any number of \n characters in text text = text:gsub ('([^\n])\n([^\n])', '%1 %2'); -- replace single newline characters with a space character which mimics MediaWiki if 'italic' == style then text = text:gsub('[^\n]+', '<p><i>%1</i></p>'); -- insert p and italic markup tags at each implied p (two or more consecutive '\n\n' sequences) else text = text:gsub ('[^\n]+', '<p>%1</p>'); -- insert p markup at each implied p text = text:gsub ('\n', ''); -- strip newline characters end end return text; end --[[--------------------------< T I T L E _ W R A P P E R _ M A K E >------------------------------------------ Makes a <span title="<title text>"><content_text></span> or <div title="<title text>"><content_text></div> where <title text> is in the tool-tip in the wiki's local language and <content_text> is non-local-language text in HTML markup. This because the lang= attribute applies to the content of its enclosing tag. <tag> holds a string 'div' or 'span' used to choose the correct wrapping tag. ]] local function title_wrapper_make (title_text, content_text, tag) local wrapper_t = {}; table.insert (wrapper_t, table.concat ({'<', tag})); -- open opening wrapper tag table.insert (wrapper_t, ' title=\"'); -- begin title attribute table.insert (wrapper_t, title_text); -- add <title_text> table.insert (wrapper_t, '\">'); -- end title attribute and close opening wrapper tag table.insert (wrapper_t, content_text); -- add <content_text> table.insert (wrapper_t, table.concat ({'</', tag, '>'})); -- add closing wrapper tag return table.concat (wrapper_t); -- make a big string and done end --[[--------------------------< M A K E _ T E X T _ H T M L >-------------------------------------------------- Add the HTML markup to text according to the type of content that it is: <span> or <i> tags for inline content or <div> tags for block content The lang= attribute also applies to the content of the tag where it is placed so this is wrong because 'Spanish language text' is English: <i lang="es" title="Spanish language text">casa</i> should be: <span title="Spanish language text"><i lang="es">casa</i></span> or for <div>...</div>: <div title="Spanish language text"><div lang="es"><spanish-language-text></div></div> ]] local function make_text_html (code, text, tag, rtl, style, size, language) local html_t = {}; local style_added = ''; local wrapper_tag = tag; -- <tag> gets modified so save a copy for use when/if we create a wrapper span or div if text:match ('^%*') then table.insert (html_t, '&#42;'); -- move proto language text prefix outside of italic markup if any; use numeric entity because plain splat confuses MediaWiki text = text:gsub ('^%*', ''); -- remove the splat from the text end if 'span' == tag then -- default HTML tag for inline content if 'italic' == style then -- but if italic tag = 'i'; -- change to <i> tags end else -- must be div so go text = div_markup_add (text, style); -- handle implied <p>, implied <p> with <i>, and list markup (*;:#) with <i> end table.insert (html_t, table.concat ({'<', tag})); -- open the <i>, <span>, or <div> HTML tag code = code:gsub ('%-x%-.*', ''); -- strip private use subtag from code tag because meaningless outside of Wikipedia table.insert (html_t, table.concat ({' lang="', code, '\"'})); -- add language attribute if (rtl or unicode.is_rtl(text)) and ('ltr' == this_wiki_lang_dir) then -- text is right-to-left on a left-to-right wiki table.insert (html_t, ' dir="rtl"'); -- add direction attribute for right-to-left languages elseif not (rtl or unicode.is_rtl(text)) and ('rtl' == this_wiki_lang_dir) then -- text is left-to-right on a right-to-left wiki table.insert (html_t, ' dir="ltr"'); -- add direction attribute for left-to-right languages end if 'normal' == style then -- when |italic=no table.insert (html_t, ' style=\"font-style: normal;'); -- override external markup, if any style_added = '\"'; -- remember that style attribute added and is not yet closed end if is_set (size) then -- when |size=<something> if is_set (style_added) then table.insert (html_t, table.concat ({' font-size: ', size, ';'})); -- add when style attribute already inserted else table.insert (html_t, table.concat ({' style=\"font-size: ', size, ';'})); -- create style attribute style_added = '\"'; -- remember that style attribute added and is not yet closed end end table.insert (html_t, table.concat ({style_added, '>'})); -- close the opening HTML tag table.insert (html_t, text); -- insert the text table.insert (html_t, table.concat ({'</', tag, '>'})); -- close the 'text' <i>, <span>, or <div> HTML tag if is_set (language) then -- create a <title_text> string for the title= attribute in a wrapper span or div local title_text; if 'zxx' == code then -- special case for this tag 'no linguistic content' title_text = substitute ('$1 $2', {language, cfg.make_text_html_t.zxx}); -- not a language so don't use 'language' in title text elseif mw.ustring.find (language, 'languages', 1, true) then title_text = substitute ('$1 $2', {language, cfg.make_text_html_t.collective}); -- for collective languages else title_text = substitute ('$1-$2', {language, cfg.make_text_html_t.individual}); -- for individual languages end return title_wrapper_make (title_text, table.concat (html_t), wrapper_tag); else return table.concat (html_t); end end --[=[-------------------------< M A K E _ C A T E G O R Y >---------------------------------------------------- For individual language, <language>, returns: [[Category:Articles containing <language>-language text]] For English: [[Category:Articles containing explicitly cited English-language text]] For ISO 639-2 collective languages (and for 639-1 bh): [[Category:Articles with text in <language> languages]] ]=] local function make_category (code, language_name, nocat, name_get) if ((0 ~= namespace) or nocat) and not name_get then -- only categorize in article space return ''; -- return empty string for concatenation end if mw.ustring.find (language_name, 'languages', 1, true) then return substitute ('[[$1 $2]]', {cfg.make_category_t.collective_cat, language_name}); end if this_wiki_lang_tag == code then return substitute ('[[$1 $2 $3-$4]]', { -- unique category name for the local language cfg.make_category_t.cat_prefix, cfg.make_category_t.explicit_cat, language_name, cfg.make_category_t.cat_postfix, }); else return substitute ('[[$1 $2-$3]]', { -- category for individual languages cfg.make_category_t.cat_prefix, language_name, cfg.make_category_t.cat_postfix, }); end end --[[--------------------------< M A K E _ T R A N S L I T >---------------------------------------------------- Return translit <i lang=xx-Latn>...</i> where xx is the language code; else return empty string. The value |script= is not used in {{transliteration}} for this purpose; instead it uses |code. Because language scripts are listed in the {{transliteration}} switches they are included in the data tables. The script parameter is introduced at {{Language with name and transliteration}}. If |script= is set, this function uses it in preference to code. To avoid confusion, in this module and the templates that use it, the transliteration script parameter is renamed to be |translit-script= (in this function, tscript). This function is used by both lang_xx() and xlit() lang_xx() always provides code, language_name, and translit; may provide tscript; never provides style xlit() always provides language_name, translit, and one of code or tscript, never both; always provides style For {{transliteration}}, style only applies when a language code is provided. ]] local function make_translit (code, language_name, translit, std, tscript, style, engvar) local title_t = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards local title_text = ''; -- tool tip text for title= attribute std = std and std:lower(); -- lower case for table indexing if not is_set (std) and not is_set (tscript) then -- when neither standard nor script specified title_text = language_name; -- write a generic tool tip if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name) title_text = substitute ('$1-$2', {title_text, cfg.misc_text_t.language}); -- skip this text (individual and macro languages only) end title_text = substitute ('$1 $2', {title_text, mw.ustring.lower (cfg.engvar_t[engvar]['romanisz_lc'])}); -- finish the tool tip; use romanization when neither script nor standard supplied elseif is_set (std) and is_set (tscript) then -- when both are specified if title_t[std] then -- and if standard is legitimate if title_t[std][tscript] then -- and if script for that standard is legitimate if script_table[tscript] then title_text = substitute ('$1$2 ($3 $4) $5', { -- add the appropriate text to the tool tip title_text, title_t[std][tscript:lower()], script_table[tscript], cfg.make_translit_t.script, cfg.make_translit_t.transliteration, }); else title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard? end else title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard? end else return ''; -- invalid standard, setup for error message end elseif is_set (std) then -- translit-script not set, use language code if not title_t[std] then return ''; end -- invalid standard, setup for error message if title_t[std][code] then -- if language code is in the table (xlit may not provide a language code) local fmt_str = '$1$2 ($3 $4) $5'; -- generic format string for tool tip if language_name:match ('languages') then fmt_str = '$1$2 ($3) $5'; -- format string for collective languages tool tip end title_text = substitute (fmt_str, { -- add the appropriate text to the tool tip title_text, title_t[std][code:lower()], language_name, cfg.misc_text_t.language, cfg.make_translit_t.transliteration, }); else -- code doesn't match title_text = title_text .. title_t[std]['default']; -- so use the standard's default end else -- here if translit-script set but translit-std not set if title_t['no_std'][tscript] then title_text = title_text .. title_t['no_std'][tscript]; -- use translit-script if set elseif title_t['no_std'][code] then title_text = title_text .. title_t['no_std'][code]; -- use language code else if is_set (tscript) then title_text = substitute ('$1$2-$3 $4', { -- write a script tool tip title_text, language_name, cfg.make_translit_t.script, cfg.make_translit_t.transliteration, }); elseif is_set (code) then if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name) title_text = substitute ('$1-$2', { -- skip this text (individual and macro languages only) title_text, cfg.misc_text_t.language, }); end title_text = substitute ('$1 $2', { -- finish the tool tip title_text, cfg.make_translit_t.transliteration, }); else title_text = substitute ('$1 $2', { -- generic tool tip (can we ever get here?) title_text, cfg.make_translit_t.transliteration, }); end end end local tag if is_set (code) then -- when a language code is provided (always with {{lang-??}} templates, not always with {{transliteration}}) code = code:match ('^(%a%a%a?)'); -- strip all subtags leaving only the language subtag if not style then -- nil for the default italic style tag = '<i lang="%s-Latn">%s</i>' else tag = '<span style="font-style: %s" lang="%s-Latn">%s</span>' -- non-standard style, construct a span tag for it tag = string.format(tag, style, "%s", "%s") end tag = string.format(tag, code, "%s") else tag = '<span>%s</span>' -- when no language code: no lang= attribute, not italic ({{transliteration}} only) end tag = string.format(tag, translit) -- add the translit text if '' == title_text then -- when there is no need for a tool-tip return tag; -- done else title_text = cfg.engvar_sel_t.gb == engvar and title_text:gsub ('([Rr]omani)z', '%1s') or title_text; -- gb eng when engvar specifies gb eng; us eng else return title_wrapper_make (title_text, tag, 'span'); -- wrap with a tool-tip span and done end end --[[--------------------------< V A L I D A T E _ T E X T >---------------------------------------------------- This function checks the content of args.text and returns empty string if nothing is amiss else it returns an error message. The tests are for empty or missing text and for improper or disallowed use of apostrophe markup. Italic rendering is controlled by the |italic= template parameter so italic markup should never appear in args.text either as ''itself'' or as '''''bold italic''''' unless |italic=unset or |italic=invert. ]] local function validate_text (template, args) if not is_set (args.text) then return make_error_msg (cfg.validate_text_t.no_text, args, template); end if args.text:find ("%f[\']\'\'\'\'%f[^\']") or args.text:find ("\'\'\'\'\'[\']+") then -- because we're looking, look for 4 appostrophes or 6+ appostrophes return make_error_msg (cfg.validate_text_t.malformed_markup, args, template); end local italic = args.italic; if (cfg.keywords_t.unset ~= italic) and (cfg.keywords_t.invert ~= italic) then if args.text:find ("%f[\']\'\'%f[^\']") or args.text:find ("%f[\']\'\'\'\'\'%f[^\']") then -- italic but not bold, or bold italic return make_error_msg (cfg.validate_text_t.italic_markup, args, template); end end end --[[--------------------------< R E N D E R _ M A I N T >------------------------------------------------------ Render mainenance messages and categories. ]] local function render_maint (nocat) local maint = {}; if 0 < #maint_msgs then -- when there are maintenance messages table.insert (maint, table.concat ({'<span class="lang-comment" style="font-style: normal; display: none; color: #33aa33; margin-left: 0.3em;">'})); -- opening <span> tag for _, msg in ipairs (maint_msgs) do table.insert (maint, table.concat ({msg, ' '})); -- add message strings end table.insert (maint, '</span>'); -- close the span end if (0 < #maint_cats) and (0 == namespace) and not nocat then -- when there are maintenance categories; article namespace only for _, cat in ipairs (maint_cats) do table.insert (maint, table.concat ({'[[Category:', cat, ']]'})); -- format and add the categories end end return table.concat (maint); end --[[--------------------------< P R O T O _ P R E F I X >------------------------------------------------------ For proto languages, text is prefixed with a splat. We do that here as a flag for make_text_html() so that a splat will be rendered outside of italic markup (if used). If the first character in text here is already a splat, we do nothing. proto_param is boolean or nil; true adds splat prefix regardless of language name; false removes and inhibits regardless of language name; nil does nothing; presumes that the value in text is correct but removes extra splac. ]] local function proto_prefix (text, language_name, proto_param) if false == proto_param then -- when forced by |proto=no return text:gsub ('^%**', ''); -- return text without splat prefix regardless of language name or existing splat prefix in text elseif (language_name:find ('^Proto%-') or (true == proto_param)) then -- language is a proto or forced by |proto=yes return text:gsub ('^%**', '*'); -- prefix proto-language text with a splat; also removes duplicate prefixing splats end return text:gsub ('^%*+', '*'); -- return text unmolested except multiple splats reduced to one splat end --[[--------------------------< H A S _ P O E M _ T A G >------------------------------------------------------ Looks for a poem strip marker in text; returns true when found; false else. Auto-italic detection disabled when text has poem stripmarker because it is not possible for this code to know the content that will replace the stripmarker. ]] local function has_poem_tag (text) return text:find ('\127[^\127]*UNIQ%-%-poem%-[%a%d]+%-QINU[^\127]*\127') and true or false; end --[[--------------------------< H T M L _ T A G _ S E L E C T >------------------------------------------------ Inspects content of and selectively trims text. Returns text and the name of an appropriate HTML tag for text. If text contains: \n\n text has implied <p>..</p> tags - trim leading and trailing whitespace and return If text begins with list markup: \n* unordered \n; definition \n: definition \n# ordered trim all leading whitespace except \n and trim all trailing whitespace If text contains <poem>...</poem> stripmarker, return text unmodified and choose <div>..</div> tags because the stripmarker is replaced with text wrapped in <div>..</div> tags. If the text contains any actual <div>...</div> tags, then it's again returned unmodified and <div>...</div> tags are used to wrap it, to prevent div/span inversion. ]] local function html_tag_select (text) local tag; if has_poem_tag (text) then -- contains poem stripmarker (we can't know the content of that) tag = 'div'; -- poem replacement is in div tags so lang must use div tags elseif text:find ('<div') then -- reductive; if the text contains a div tag, we must use div tags tag = 'div'; elseif mw.text.trim (text):find ('\n\n+') then -- contains implied p tags text = mw.text.trim (text); -- trim leading and trailing whitespace characters tag = 'div'; -- must be div because span may not contain p tags (added later by MediaWiki); poem replacement is in div tags elseif text:find ('\n[%*:;%#]') then -- if text has list markup text = text:gsub ('^[\t\r\f ]*', ''):gsub ('%s*$', ''); -- trim all whitespace except leading newline character '\n' tag = 'div'; -- must be div because span may not contain ul, dd, dl, ol tags (added later by MediaWiki) else text = mw.text.trim (text); -- plain text tag = 'span'; -- so span is fine end return text, tag; end --[[--------------------------< V A L I D A T E _ P R O T O >-------------------------------------------------- Validates value assigned to |proto=; permitted values are yes and no; yes returns as true, no returns as false, empty string (or parameter omitted) returns as nil; any other value returns nil with <proto_param> as second return value for use in error message. ]] local function validate_proto (proto_param) if cfg.keywords_t.affirmative == proto_param then return true; elseif cfg.keywords_t.negative == proto_param then return false; elseif is_set (proto_param) then return nil, proto_param; -- |proto= something other than 'yes' or 'no' else return nil; -- missing or empty end end --[[--------------------------< L A N G U A G E _ N A M E _ G E T >-------------------------------------------- Common function to return language name from the data set according to IETF tag. Returns language name if found in data tables; nil else. ]] local function language_name_get (ietf, code, cat) ietf = ietf:lower(); -- ietf:lower() because format_ietf_tag() returns mixed case local name; -- remains nil if not found if override_table[ietf] then -- look for whole IETF tag in override table name = override_table[ietf]; elseif override_table[code] then -- not there so try basic language tag name = override_table[code]; elseif lang_table[code] then -- shift to IANA active tag/name table name = lang_table[code]; elseif lang_dep_table[code] then -- try the IANA deprecated tag/name table name = lang_dep_table[code]; end if lang_dep_table[code] and cat then -- because deprecated code may have been overridden to en.wiki preferred name table.insert (maint_cats, substitute (cfg.language_name_get_t.deprecated_cat, {code})); table.insert (maint_msgs, substitute (cfg.language_name_get_t.deprecated_msg, {code})); end return name; -- name from data tables or nil end --[[--------------------------< T E X T _ S C R I P T _ M A T C H _ T E S T >---------------------------------- IETF script subtag should match the script of the <text>. This module does not attempt to know all scripts and what they look like. It does know what Latn script looks like so when <text> is written using other than the Latn script, the IETF script subtag, if present, should not be Latn. Conversely, when <text> is written using the Latn script, the IETF script subtag, if present, should be Latn. For the purposes of this test, Latf (Fraktur) and Latg (Gaelic) are considered to be equivalent to Latn because unicode treats these two scripts as font-specific variants of Latn. Returns an error message when mismatch detected; nil else. ]] local function text_script_match_test (script, is_latn_text, pos, char) local scripts_t = {['latf'] = true, ['latg'] = true, ['latn'] = true}; -- unicode 'latn' scripts; 'latf' and 'latg' are font variants so there are no Fraktur or Gaelic codepoints if is_set (script) then -- don't bother with the rest of this if <script> is nil or empty string script = script:lower(); -- lower case to index into <scripts_t> if is_latn_text then -- when text is wholly Latn script if not scripts_t[script] then -- but a non-Latn script is specified return cfg.text_script_match_test_t.latn_txt_mismatch; -- emit an error message end else -- when text is not wholly Latn script if scripts_t[script] then -- but a Latn script is specified return substitute (cfg.text_script_match_test_t.latn_scr_mismatch, {pos, char}); -- emit an error message with position of first offending character end end end end --[[--------------------------< B I N A R Y _ S E A R C H >--------------------------------------------------- conducts a binary search of <ranges_t> for a sub-range that holds <target>. returns boolean true if a sub-range holding <target> is found; boolean false else. ]] local function binary_search (target, ranges_t) local idx_bot = 1; -- initialize to index of first key local idx_top = sizeof_ranges_t; -- initialize to index of last key (number of keys) if (target < ranges_t[idx_bot][1]) or (target > ranges_t[idx_top][2]) then -- invalid; target out of range return; -- abandon end local idx_mid; -- calculated index of range midway between top index and bottom index local flag = false; -- flag to tell us when we've evaluated last (highest) range in <ranges_t> while 1 do idx_mid = math.ceil ((idx_bot + idx_top) / 2); -- get the mid-point in the <ranges_t> sequence if (target >= ranges_t[idx_mid][1]) and (target <= ranges_t[idx_mid][2]) then -- indexed range low value <= target <= indexed range high value return true; -- we found the range that holds the <target> character; return true elseif (target > ranges_t[idx_mid][2]) then -- is <target> > indexed range high value? idx_bot = idx_mid; -- adjust <idx_bot> up else -- here when <target> less than indexed range low value idx_top = idx_mid - 1; -- adjust <idx_top> down end if flag then break; -- here when we just evaluated the last range and <target> not found end if not flag and (idx_bot == idx_top) then -- set true just before we evaluate the last (highest) range in <ranges_t> flag = true; end end end --[[--------------------------< I S _ L A T I N >-------------------------------------------------------------- compare <text> as codepoints to lists of known codepoints accepted as Latn script returns boolean true and modified <text> when <text> is wrapped in accept-as-written markup returns boolean true and <text> when codepoint is known returns boolean false, <text>, non-Latn codepoint position in <text> (left to right), and the codepoint character when codepoint is not known TODO: when text has accept-as-written markup, return a non-boolean value to indicate that <text> is not wholly latn script? Use that return value to create non-Latn HTML lang= attribute because <text> isn't really latn so lang=und (undetermined)? or instead, omit the -Latn subtag? (without -Latn need to force |italic=yes) ]] local function is_latin (text, tag) local count; text, count = text:gsub ('^%(%((.+)%)%)$', '%1'); -- remove accept-as-written markup if present if 0 ~= count then return true, text; -- markup present so assume that <text> is Latn-script end local pos = 0; -- position counter for error messaging for codepoint in mw.ustring.gcodepoint (text) do -- fetch each code point pos = pos + 1; -- bump the position counter if not is_latn_data.singles_t[codepoint] and -- codepoint not found in the singles list? not binary_search (codepoint, is_latn_data.ranges_t) and -- codepoint not a member of a listed range? not (tag and is_latn_data.specials_t[codepoint] and is_latn_data.specials_t[codepoint][tag]) then -- not a language-specific codepoint? return false, text, pos, mw.ustring.char (codepoint); -- codepoint not known; return false with codepoint position and character representation end end return true, text; -- is known; return <text> end --[[--------------------------< _ L A N G >-------------------------------------------------------------------- Entry point for {{lang}}. There should be no reason to set parameters in the {{lang}} {{#invoke:}} <includeonly>{{#invoke:lang|lang}}</includeonly> Parameters are received from the template's frame (parent frame). ]] local function _lang (args) local out = {}; local language_name; -- used to make category names local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set local subtags = {}; -- IETF subtags script, region, variant, and private local code; -- the language code local msg; -- for error messages local tag = 'span'; -- initial value for make_text_html() local template = args.template or cfg.templates_t.lang; maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once maint_msgs = {}; validate_cat_args (args); -- determine if categorization should be suppressed if args[1] and args.code then return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {'1', cfg.lang_t.conflict_n_param_types.code}), args, template); else args.code = args[1] or args.code; -- prefer args.code end if args[2] and args.text then return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {'2', cfg.lang_t.conflict_n_param_types.text}), args, template); else args.text = args[2] or args.text; -- prefer args.text end msg = validate_italic (args); if msg then return make_error_msg (msg, args, template); end msg = validate_text (template, args); -- ensure that |text= is set if is_set (msg) then -- msg is an already-formatted error message return msg; end args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate HTML tag with text trimmed accordingly args.rtl = args.rtl == cfg.keywords_t.affirmative; -- convert to boolean: 'yes' -> true, other values -> false args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag if msg then return make_error_msg (substitute (cfg.lang_t.invalid_proto, {msg}), args, template); end code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code); -- |script=, |region=, |variant= not supported because they should be part of args.code ({{{1}}} in {{lang}}) if msg then return make_error_msg (msg, args, template); end local is_latn_text, pos, char; is_latn_text, args.text, pos, char= is_latin (args.text, code); -- make a boolean msg = text_script_match_test (subtags.script, is_latn_text, pos, char) if msg then -- if an error detected then there is an error message return make_error_msg (msg, args, template); end if nil == args.style then -- nil when |italic= absent or not set or |italic=default; args.style controls if ('latn' == subtags.script) or -- script is latn (this_wiki_lang_tag ~= code and not is_set (subtags.script) and not has_poem_tag (args.text) and is_latn_text) then -- text not this wiki's language, no script specified and not in poem markup but is wholly latn script (auto-italics) args.style = 'italic'; -- DEFAULT for {{lang}} templates is upright; but if latn script set for font-style:italic else args.style = 'inherit'; -- italic not set; script not latn; inherit current style end end if is_set (subtags.script) then -- if script set, override rtl setting if in_array (subtags.script, lang_data.rtl_scripts) then args.rtl = true; -- script is an rtl script else args.rtl = false; -- script is not an rtl script end end args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles language_name = language_name_get (args.code, code, true); -- get language name; try IETF tag first, then code w/o variant then code w/ variant if cfg.keywords_t.invert == args.style and 'span' == tag then -- invert only supported for in-line content args.text = invert_italics (args.text) end args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.style, args.size, language_name)); table.insert (out, make_category (code, language_name, args.nocat)); table.insert (out, render_maint (args.nocat)); -- maintenance messages and categories return table.concat (out); -- put it all together and done end --[[--------------------------< L A N G >---------------------------------------------------------------------- Entry point for {{lang}}. There should be no reason to set parameters in the {{lang}} {{#invoke:}} <includeonly>{{#invoke:lang|lang}}</includeonly> Parameters are received from the template's frame (parent frame). ]] local function lang (frame) local args_t = getArgs (frame, { -- this code so that we can detect and handle wiki list markup in text valueFunc = function (key, value) if 2 == key or 'text' == key then -- the 'text' parameter; do not trim wite space return value; -- return untrimmed 'text' elseif value then -- all other values: if the value is not nil value = mw.text.trim (value); -- trim whitespace if '' ~= value then -- empty string when value was only whitespace return value; end end return nil; -- value was empty or contained only whitespace end -- end of valueFunc }); args_t.fn = nil; -- unset because not supported but this function might have been called by {{lang|fn=lang|...}} local msg = parameter_validate (args_t, cfg.templates_t.lang); -- verify that all supplied parameters are supported by {{lang-??}} if msg then return make_error_msg (msg, args_t, cfg.templates_t.lang); -- when template has unsupported params, abandon with error message end return _lang (args_t); end --[[--------------------------< T R A N S L A T I O N _ M A K E >---------------------------------------------- Stand-alone function to create literal translation of main text. Also used by {{lang-x2}}. ]] local function translation_make (args_t) local translation_t = {', '}; -- initialize output if 'none' ~= args_t.label then -- if we want a label table.insert (translation_t, '<small>'); -- open the <small> HTML tag if cfg.keywords_t.negative == args_t.link then table.insert (translation_t, substitute ('<abbr title="$1">$2</abbr>', {cfg.translation_make_t.lit_xlation, cfg.translation_make_t.lit_abbr})); -- unlinked form else table.insert (translation_t, make_wikilink (cfg.translation_make_t.lit_xlation, cfg.translation_make_t.lit_abbr)); -- linked form end table.insert (translation_t, "&thinsp;</small>"); -- close the <small> HTML tag end table.insert (translation_t, table.concat ({ -- user styling spans match spand from {{gloss}} '<span class="gloss-quot">\'</span>', -- user styling span for quote marks; use HTML entities to avoid wiki markup confusion '<span class="gloss-text">', -- open user styling span for the translation args_t.translation, -- the translation '</span>', -- close user styling span for the translation '<span class="gloss-quot">\'</span>' -- user styling span for quote marks })); return table.concat (translation_t); -- make a big string and done end --[[--------------------------< _ L A N G _ X X >-------------------------------------------------------------- For the {{lang-??}} templates, the only parameter required to be set in the template is the language code. All other parameters can, usually should, be written in the template call. For {{lang-??}} templates for languages that can have multiple writing systems, it may be appropriate to set |script= as well. For each {{lang-??}} template choose the appropriate entry-point function so that this function knows the default styling that should be applied to text. For normal, upright style: <includeonly>{{#invoke:lang|lang_xx_inherit|code=xx}}</includeonly> For italic style: <includeonly>{{#invoke:lang|lang_xx_italic|code=xx}}</includeonly> All other parameters should be received from the template's frame (parent frame) Supported parameters are: |code = (required) the IANA language code |script = IANA script code; especially for use with languages that use multiple writing systems |region = IANA region code |variant = IANA variant code |text = (required) the displayed text in language specified by code |link = boolean false ('no') does not link code-spcified language name to associated language article |rtl = boolean true ('yes') identifies the language specified by code as a right-to-left language |nocat = boolean true ('yes') inhibits normal categorization; error categories are not affected |cat = boolian false ('no') opposite form of |nocat= |italic = boolean true ('yes') renders displayed text in italic font; boolean false ('no') renders displayed text in normal font; not set renders according to initial_style_state |lit = text that is a literal translation of text |label = 'none' to suppress all labeling (language name, 'translit.', 'lit.') any other text replaces language-name label - automatic wikilinking disabled for those {{lang-??}} templates that support transliteration (those templates where |text= is not entirely latn script): |translit = text that is a transliteration of text |translit-std = the standard that applies to the transliteration |translit-script = ISO 15924 script name; falls back to code For {{lang-??}}, the positional parameters are: {{{1}}} text {{{2}}} transliterated text {{{3}}} literal translation text no other positional parameters are allowed ]] local function _lang_xx (args, base_template) -- base_template will be either of 'langx' or 'lang-xx' local out = {}; local language_name; -- used to make display text, article links local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set local subtags = {}; -- IETF subtags script, region, and variant local code; -- the language code local translit_script_name; -- name associated with IANA (ISO 15924) script code local translit; local msg; -- for error messages local tag = 'span'; -- initial value for make_text_html() local template = args.template or base_template; maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once maint_msgs = {}; local text_idx = (cfg.templates_t.langx == base_template) and 2 or 1; -- for {{langx}} 'text' positional parameter is '2' local translit_idx = (cfg.templates_t.langx == base_template) and 3 or 2; local xlate_idx = (cfg.templates_t.langx == base_template) and 4 or 3; if args[text_idx] and args.text then return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {text_idx, cfg.lang_t.conflict_n_param_types.text}), args, template); else args.text = args[text_idx] or args.text; -- prefer positional 'text' parameter end msg = validate_italic (args); if msg then return make_error_msg (msg, args, template); end msg = validate_text (template, args); -- ensure that |text= is set, does not contain italic markup and is protected from improper bolding if is_set (msg) then return msg; end args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate HTML tag with text trimmed accordingly if args[translit_idx] and args.translit then return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {translit_idx, cfg.lang_t.conflict_n_param_types.translit}), args, template); else args.translit = args[translit_idx] or args.translit -- prefer positional 'translit' parameter end args.engvar = cfg.engvar_sel_t[args.engvar] or cfg.default_engvar; -- |engvar= when valid; cfg.default_engvar else if args[xlate_idx] and (args.translation or args.lit) then return make_error_msg (substitute (cfg.lang_xx_t.conflict_n_lit, {xlate_idx}), args, template); elseif args.translation and args.lit then return make_error_msg (cfg.lang_xx_t.conflict_lit, args, template); else args.translation = args[xlate_idx] or args.translation or args.lit; -- prefer positional 'translation' parameter end if args.links and args.link then return make_error_msg (cfg.lang_xx_t.conflict_link, args, template); else args.link = args.link or args.links; -- prefer args.link end validate_cat_args (args); -- determine if categorization should be suppressed args.rtl = args.rtl == cfg.keywords_t.affirmative; -- convert to boolean: 'yes' -> true, other values -> false code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code, args.script, args.region, args.variant); -- private omitted because private if msg then -- if an error detected then there is an error message return make_error_msg (msg, args, template); end if args.translit then local latn, pos, char; latn, args.translit, pos, char = is_latin (args.translit, (('' ~= subtags.private) and (code .. '-x-' .. subtags.private)) or code); if not latn then return make_error_msg (substitute (cfg.lang_xx_t.translit_nonlatn, {pos, char}), args, template); end end local is_latn_text, text, pos, char = is_latin (args.text, code); -- make a boolean args.text = text; -- may have been modified (accept-as-written markup removed) msg = text_script_match_test (subtags.script, is_latn_text, pos, char) if msg then -- if an error detected then there is an error message return make_error_msg (msg, args, template); end if cfg.templates_t.langx == base_template then -- auto-italics for {{langx}} templates; adapted from {{lang}} (no support for poem tag) if nil == args.style then -- nil when |italic= absent or not set or |italic=default; args.style controls if ('latn' == subtags.script) or -- script is latn (this_wiki_lang_tag ~= code and not is_set (subtags.script) and is_latn_text) then -- text is not this wiki's language, no script specified and is wholly latn script (auto-italics) args.style = 'italic'; -- set font-style:italic else args.style = 'inherit'; -- italic not set; script not latn; inherit current style end end else -- {{lang-xx}} does not do auto italics; retained for those wikis that don't support {{langx}} if nil == args.style then -- args.style controls if is_set (subtags.script) then if 'latn' == subtags.script then args.style = 'italic'; -- |script=Latn; set for font-style:italic else args.style = initial_style_state; -- italic not set; script is not latn; set for font-style:<initial_style_state> end else args.style = initial_style_state; -- here when |italic= and |script= not set; set for font-style:<initial_style_state> end end end if is_set (subtags.script) then -- if script set override rtl setting if in_array (subtags.script, lang_data.rtl_scripts) then args.rtl = true; -- script is an rtl script else args.rtl = false; -- script is not an rtl script end end args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag if msg then return make_error_msg (substitute (cfg.lang_t.invalid_proto, {args.proto}), args, template); end args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles language_name = language_name_get (args.code, code, true); -- get language name; try IETF tag first, then code w/o variant then code w/ variant category_name = language_name; -- category names retain IANA parenthetical diambiguators (if any) language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them if args.label then if 'none' ~= args.label then table.insert (out, table.concat ({args.label, ': '})); -- custom label end else if cfg.keywords_t.negative == args.link then table.insert (out, language_name); -- language name without wikilink else if mw.ustring.find (language_name, 'languages', 1, true) then table.insert (out, make_wikilink (language_name)); -- collective language name uses simple wikilink elseif lang_data.article_name[args.code:lower()] then -- is IETF tag in article name over ride? table.insert (out, make_wikilink (lang_data.article_name[args.code:lower()], language_name)); -- language name with wikilink from override data elseif lang_data.article_name[code] then -- is language tag in article override table.insert (out, make_wikilink (lang_data.article_name[code], language_name)); -- language name with wikilink from override data else table.insert (out, make_wikilink (substitute ('$1 $2', {language_name, cfg.misc_text_t.language}), language_name)); -- language name with wikilink end end table.insert (out, ': '); -- separator end if cfg.keywords_t.invert == args.italic then args.text = invert_italics (args.text) end args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.style, args.size, ('none' == args.label) and language_name or nil)) if is_set (args.translit) and not is_latn_text then -- transliteration; not supported when args.text is wholly latn text (this is an imperfect test) table.insert (out, ', '); -- comma to separate text from translit if 'none' ~= args.label then table.insert (out, '<small>'); if script_table[args['translit-script']] then -- when |translit-script= is set, try to use the script's name translit_script_name = script_table[args['translit-script']]; else translit_script_name = language_name; -- fall back on language name end local translit_title_obj = mw.title.makeTitle (0, substitute ('$1 $2',{cfg.lang_xx_t.romanization, translit_script_name})); -- make a title object; no engvar, article titles use US spelling if translit_title_obj.exists and (cfg.keywords_t.negative ~= args.link) then table.insert (out, make_wikilink (substitute ('$1 $2', {cfg.lang_xx_t.romanization, translit_script_name or language_name}), substitute ('$1', {cfg.engvar_t[args.engvar]['romanisz_pt']})) .. ':'); -- make a wikilink if there is an article to link to; engvar the display text else table.insert (out, substitute ('$1:', {cfg.engvar_t[args.engvar]['romanisz_pt']})); -- else plain text per engvar end table.insert (out, '&nbsp;</small>'); -- close the small tag end translit = make_translit (args.code, language_name, args.translit, args['translit-std'], args['translit-script'], nil, args.engvar) if is_set (translit) then table.insert (out, translit); else return make_error_msg (substitute ('$1: $2', {cfg.lang_xx_t.invalid_xlit_std, args['translit-std'] or '[missing]'}), args, template); end elseif is_set (args.translit) and is_latn_text then -- when creating a transliteration of Latn script <text> return make_error_msg (cfg.lang_xx_t.xlit_of_latn, args, template); -- emit error message and abandon end if is_set (args.translation) then -- translation (not supported in {{lang}}) table.insert (out, translation_make (args)); end table.insert (out, make_category (code, category_name, args.nocat)); table.insert (out, render_maint(args.nocat)); -- maintenance messages and categories return table.concat (out); -- put it all together and done end --[[--------------------------< L A N G _ X X _ A R G S _ G E T >---------------------------------------------- Common function to get args table from {{lang-??}} templates. Returns table of args. Text positional parameters are not trimmed here but are selectively trimmed at html_tag_select(). ]] local function lang_xx_args_get (frame, base_template) local args_t = getArgs(frame, { parentFirst= true, -- parameters in the template override parameters set in the {{#invoke:}} valueFunc = function (key, value) if ((cfg.templates_t.langx == base_template) and 2 or 1) == key then -- the 'text' positional parameter; 1 for {{lang-??}}, 2 for {{langx}}; do not trim wite space return value; -- return untrimmed 'text' positional parameter elseif value then -- all other values: if the value is not nil value = mw.text.trim (value); -- trim whitespace if '' ~= value then -- empty string when value was only whitespace return value; end end return nil; -- value was empty or contained only whitespace end -- end of valueFunc }); return args_t; end --[[--------------------------< L A N G _ X X _ I T A L I C >-------------------------------------------------- Entry point for those {{lang-??}} templates that call lang_xx_italic(). Sets the initial style state to italic. ]] local function lang_xx_italic (frame) local args = lang_xx_args_get (frame, cfg.templates_t.langxx); args.fn = nil; -- unset because not supported but this function might have been called by {{lang|fn=lang_xx_italic|...}} local msg = parameter_validate (args, cfg.templates_t.langxx); -- verify that all supplied parameters are supported by {{lang-??}} if msg then return make_error_msg (msg, args, cfg.templates_t.langxx); -- when template has unsupported params, abandon with error message end initial_style_state = 'italic'; return _lang_xx (args, cfg.templates_t.langxx) .. '[[Category:Pages using Lang-xx templates]]'; -- temporary category end --[[--------------------------< _ L A N G _ X X _ I T A L I C >------------------------------------------------ Entry point from another module. Sets the initial style state to italic. ]] local function _lang_xx_italic (args) initial_style_state = 'italic'; return _lang_xx (args, cfg.templates_t.langxx); end --[[--------------------------< L A N G _ X X _ I N H E R I T >------------------------------------------------ Entry point for those {{lang-??}} templates that call lang_xx_inherit(). Sets the initial style state to inherit. ]] local function lang_xx_inherit (frame) local args = lang_xx_args_get (frame, cfg.templates_t.langxx); args.fn = nil; -- unset because not supported but this function might have been called by {{lang|fn=lang_xx_inherit|...}} local msg = parameter_validate (args, cfg.templates_t.langxx); -- verify that all supplied parameters are supported by {{lang-??}} if msg then return make_error_msg (msg, args, cfg.templates_t.langxx); -- when template has unsupported params, abandon with error message end initial_style_state = 'inherit'; return _lang_xx (args, cfg.templates_t.langxx) .. '[[Category:Pages using Lang-xx templates]]'; -- temporary category end --[[--------------------------< _ L A N G _ X X _ I N H E R I T >---------------------------------------------- Entry point from another module. Sets the initial style state to inherit. ]] local function _lang_xx_inherit (args) initial_style_state = 'inherit'; return _lang_xx (args, cfg.templates_t.langxx); end --[[--------------------------< _ L A N G X >------------------------------------------------------------------ Entry point from another module. ]] local function _langx (args_t) local langx_data = mw.loadData ('Module:Lang/langx'); -- get necessary data local rtl_t = langx_data.rtl_t; -- get list of language tags for languages that are rendered right-to-left local link_t = langx_data.link_t; -- get list of language tags for {{lang-??}} templates that set |link=<something> local size_t = langx_data.size_t; -- get list of language tags for {{lang-??}} templates that set |size=<something> local msg = parameter_validate (args_t, cfg.templates_t.langx); if msg then return make_error_msg (msg, args_t, cfg.templates_t.langx); end args_t.code = args_t[1] or args_t.code; -- get the language tag; must be {{{1}}} or |code= if not args_t.code then return make_error_msg (cfg.get_ietf_parts_t.missing_lang_tag, args_t, cfg.templates_t.langx); end args_t.rtl = args_t.rtl or (rtl_t[args_t.code] and cfg.keywords_t.affirmative); -- prefer |rtl= in template call, use rtl_t else args_t.link = args_t.link or link_t[args_t.code]; -- prefer |link= in template call, use link_t felse args_t.size = args_t.size or size_t[args_t.code]; -- prefer |size= in template call, use size_t else args_t[1] = nil; -- unset to mimic {{lang-??}} templates which set |code=xx local lang_subtag = args_t.code; -- use only the base language subtag for unsupported tag test; some args_t.code are modified by |script= etc return _lang_xx (args_t, cfg.templates_t.langx); end --[[--------------------------< L A N G X >-------------------------------------------------------------------- Entry point for {{langx}}. this function calls _lang_xx() to render non-English text. The {{lang-??}} templates have three positional paramters but {{langx}} has four: | 1 | 2 | 3 | 4 {{lang-xx |<text> |<xlit> |<xlat> }} {{langx |<tag> |<text> |<xlit> |<xlat> }} The calls to lang_xx_args_get() and _lang_xx() use 'langx' as a flag for those functions to select the proper positional parameters. {{lang-??}} depends on the calling template to select 'inherit' or 'italic' to establish the default rendering. {{langx}} can't do that. The initial version of {{langx}} relied on a list of language tags (inherit_t in ~/langx) scraped from those {{lang-??}} templates that call lang_xx_inherit() to render text in upright font. langx() now uses auto-italics code adapted from {{lang}} (doesn't support poem tags). ]] local function langx (frame) local args_t = lang_xx_args_get (frame, cfg.templates_t.langx); -- get the arguments; 'langx' is the <base_template> used to decide which positional param is 'text', 'translit', 'lit' return _langx (args_t); end --[[--------------------------< _ I S _ I E T F _ T A G >------------------------------------------------------ Returns true when a language name associated with IETF language tag exists; nil else. IETF language tag must be valid. All code combinations supported by {{lang}} and the {{lang-??}} templates are supported by this function. Module entry point from another module. ]] local function _is_ietf_tag (tag) -- entry point when this module is require()d into another local c, s, r, v, p, err; -- code, script, region, variant, private, error message c, s, r, v, p, err = get_ietf_parts (tag); -- disassemble tag into constituent part and validate return ((c and not err) and true) or nil; -- return true when code portion has a value without error message; nil else end --[[--------------------------< I S _ I E T F _ T A G >-------------------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function is_ietf_tag (frame) return _is_ietf_tag (getArgs (frame)[1]); -- args[1] is the IETF language tag to be tested; also get parent frame end --[[--------------------------< I S _ I E T F _ T A G _ F R A M E >-------------------------------------------- Module entry point from an {{#invoke:}}; same as is_ietf_tag() except does not get parameters from the parent (template) frame. This function not useful when called by {{lang|fn=is_ietf_tag_frame|<tag>}} because <tag> is in the parent frame. ]] local function is_ietf_tag_frame (frame) return _is_ietf_tag (getArgs (frame, {frameOnly = true,})[1]); -- args[1] is the IETF language tag to be tested; do not get parent frame end --[[--------------------------< _ N A M E _ F R O M _ T A G >-------------------------------------------------- Returns language name associated with IETF language tag if valid; error message else. All code combinations supported by {{lang}} and the {{lang-??}} templates are supported by this function. Set invoke's |link= parameter to yes to get wikilinked version of the language name. Module entry point from another module. ]] local function _name_from_tag (args) local subtags = {}; -- IETF subtags script, region, variant, and private local raw_code = args[1]; -- save a copy of the input IETF subtag local link = cfg.keywords_t.affirmative == args['link']; -- make a boolean local label = args.label; local code; -- the language code local msg; -- gets an error message if IETF language tag is malformed or invalid local language_name = ''; code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code); if msg then local template = (args['template'] and table.concat ({'{{', args['template'], '}}: '})) or ''; -- make template name (if provided by the template) return make_error_span (template, msg); end raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private language_name = language_name_get (raw_code, code); -- get language name; try IETF tag first, then code w/o variant then code w/ variant if 'yes' ~= args.raw then language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them end if link then -- when |link=yes, wikilink the language name if mw.ustring.find (language_name, 'languages', 1, true) then language_name = make_wikilink (language_name, label); -- collective language name uses simple wikilink elseif lang_data.article_name[raw_code:lower()] then -- is IETF tag in article name override? language_name = make_wikilink (lang_data.article_name[raw_code:lower()], label or language_name); -- language name with wikilink from override data elseif lang_data.article_name[code] then -- is language tag in article name override? language_name = make_wikilink (lang_data.article_name[code], label or language_name); -- language name with wikilink from override data else language_name = make_wikilink (substitute ('$1 $2', {language_name, cfg.misc_text_t.language}), label or language_name); -- language name with wikilink end end return language_name; end --[[--------------------------< N A M E _ F R O M _ T A G >---------------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function name_from_tag (frame) -- entry point from an {{#invoke:lang|name_from_tag|<IETF tag>|link=<yes>|template=<template name>}} return _name_from_tag (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame end --[[--------------------------< _ T A G _ F R O M _ N A M E >-------------------------------------------------- Returns the IETF language tag associated with the language name. Spelling of language name must be correct according to the spelling in the source tables. When a standard language name has a parenthetical disambiguator, that disambiguator must be omitted (they are not present in the data name-to-tag tables). Module entry point from another module. ]] local function _tag_from_name (args) -- entry point from another module local msg; if args[1] and '' ~= args[1] then local data = mw.loadData ('Module:Lang/tag from name'); -- get the reversed data tables TODO: change when going live local lang = args[1]:lower(); -- allow any-case for the language name (speeling must till be correct) local tag = data.rev_override_table[lang] or data.rev_lang_table[lang] or data.rev_lang_dep_table[lang]; -- get the code; look first in the override then in the standard if tag then return tag, true; -- language name found so return tag and done; second return used by is_lang_name() else msg = substitute (cfg.tag_from_name_t.lang_not_found, {args[1]}); -- language name not found, error message end else msg = cfg.tag_from_name_t.missing_lang_name; -- language name not found, error message end local template = ''; if args.template and '' ~= args.template then template = table.concat ({'{{', args['template'], '}}: '}); -- make template name (if provided by the template) end return make_error_span (template, msg); end --[[--------------------------< T A G _ F R O M _ N A M E >---------------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function tag_from_name (frame) -- entry point from an {{#invoke:lang|tag_from_name|<language name>|link=<yes>|template=<template name>}} local result, _ = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by is_lang_name() return result; end --[[--------------------------< I S _ L A N G _ N A M E >------------------------------------------------------ Module entry point from an {{#invoke:}}. ]] local function is_lang_name (frame) local _, result = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by tag_from_name() return result and true or nil; end --[[--------------------------< _ X L I T >-------------------------------------------------------------------- Module entry point from another module. ]] local function _xlit (args) local title_table = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards local language_name; -- language name that matches language code; used for tool tip local translit; -- transliterated text to display local script; -- IANA script local msg; -- for when called functions return an error message local template = args.template or cfg.templates_t.transliteration; maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once maint_msgs = {}; if is_set (args[3]) then -- [3] set when {{transliteration|code|standard|text}} args.text = args[3]; -- get the transliterated text args.translit_std = args[2] and args[2]:lower(); -- get the standard; lower case for table indexing if not title_table[args.translit_std] then return make_error_msg (substitute (cfg.transl_t.unrecog_xlit_std, {args.translit_std}), args, template); end else if is_set (args[2]) then -- [2] set when {{transliteration|code|text}} args.text = args[2]; -- get the transliterated text else if args[1] and (args[1]:match ('^%a%a%a?%a?$') or -- args[2] missing; is args[1] a language or script tag or is it the transliterated text? args[1]:match ('^%a%a%a?%-x%-')) then -- or is args[1] a private-use tag return make_error_msg (cfg.transl_t.no_text, args, template); -- args[1] is a code so we're missing text else args.text = args[1]; -- args[1] is not a code so we're missing that; assign args.text for error message return make_error_msg (cfg.transl_t.missing_lang_scr, args, template); end end end if is_set (args[1]) then -- IANA language code used for HTML lang= attribute; or ISO 15924 script code if args[1]:match ('^%a%a%a?%a?$') or args[1]:match ('^%a%a%a?%-x%-') then -- args[1] has correct form? args.code = args[1]:lower(); -- use the language/script code; only (2, 3, or 4 alpha characters) or private-use; lower case because table indexes are lower case else return make_error_msg (substitute (cfg.transl_t.unrecog_lang_scr, {args[1]}), args, template); -- invalid language / script code end else return make_error_msg (cfg.transl_t.missing_lang_scr, args, template); -- missing language / script code so quit end local is_latn_text, pos, char; is_latn_text, args.text, pos, char= is_latin (args.text, args.code); -- is latn text? strip accept-as-written markup if not is_latn_text then -- when text is not latn return make_error_msg (substitute (cfg.lang_xx_t.translit_nonlatn, {pos, char}), args, template); -- abandon with error message end msg = validate_italic (args); if msg then return make_error_msg (msg, args, template); end if 'italic' == args.style then -- 'italic' when |italic=yes; because that is same as absent or not set and |italic=default args.style = nil; -- set to nil; end args.engvar = cfg.engvar_sel_t[args.engvar] or cfg.default_engvar; -- |engvar= when valid; cfg.default_engvar else if override_table[args.code] then -- is code a language code defined in the override table? language_name = override_table[args.code]; args.code = args.code:match ('^%a%a%a?'); -- if private use, strip all but language subtag elseif lang_table[args.code] then -- is code a language code defined in the standard language code tables? language_name = lang_table[args.code]; elseif lang_dep_table[args.code] then -- is code a language code defined in the deprecated language code tables? language_name = lang_dep_table[args.code]; elseif script_table[args.code] then -- if here, code is not a language code; is it a script code? language_name = script_table[args.code]; script = args.code; -- code was an ISO 15924 script so use that instead args.code = ''; -- unset because not a language code else return make_error_msg (substitute (cfg.transl_t.unrecog_lang_scr, {args.code}), args, template); -- invalid language / script code end -- here only when all parameters passed to make_translit() are valid return make_translit (args.code, language_name, args.text, args.translit_std, script, args.style, args.engvar); end --[[--------------------------< X L I T >---------------------------------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function xlit (frame) return _xlit (getArgs(frame)); end --[[--------------------------< C A T E G O R Y _ F R O M _ T A G >-------------------------------------------- Returns category name associated with IETF language tag if valid; error message else. All code combinations supported by {{lang}} and the {{lang-??}} templates are supported by this function. Module entry point from another module. ]] local function _category_from_tag (args_t) local subtags = {}; -- IETF subtags script, region, variant, and private local raw_code = args_t[1]; -- save a copy of the input IETF subtag local link = cfg.keywords_t.affirmative == args_t.link; -- make a boolean local label = args_t.label; local code; -- the language code local msg; -- gets an error message if IETF language tag is malformed or invalid local category_name = ''; code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code); if msg then local template = (args_t.template and table.concat ({'{{', args_t.template, '}}: '})) or ''; -- make template name (if provided by the template) return make_error_span (template, msg); end raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private category_name = language_name_get (raw_code, code); -- get language name; try IETF tag first, then code w/o variant then code w/ variant category_name = make_category (code, category_name, nil, true):gsub ('[%[%]]', ''); if link then return table.concat ({'[[:', category_name, ']]'}); else return category_name; end end --[[--------------------------< C A T E G O R Y _ F R O M _ T A G >-------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function category_from_tag (frame) -- entry point from an {{#invoke:lang|category_from_tag|<IETF tag>|template=<template name>}} return _category_from_tag (getArgs (frame)); -- pass-on the args table, nothing else; getArgs() so we also get parent frame end --[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------ ]] return { category_from_tag = category_from_tag, -- frame entry points when this module is #invoke:ed into templates/wikitext lang = lang, -- entry point for {{lang}} langx = langx, -- entry point for {{langx}} lang_xx_inherit = lang_xx_inherit, -- entry points for {{lang-??}} lang_xx_italic = lang_xx_italic, is_ietf_tag = is_ietf_tag, is_ietf_tag_frame = is_ietf_tag_frame, is_lang_name = is_lang_name, tag_from_name = tag_from_name, -- returns IETF tag associated with language name name_from_tag = name_from_tag, -- used for template documentation; possible use in ISO 639 name from code templates xlit = xlit, -- entry point for {{transliteration}} _category_from_tag = _category_from_tag, -- API entry points when this module is require()d into other modules _lang = _lang, _langx = _langx, _lang_xx_inherit = _lang_xx_inherit, _lang_xx_italic = _lang_xx_italic, _is_ietf_tag = _is_ietf_tag, get_ietf_parts = get_ietf_parts, _tag_from_name = _tag_from_name, _name_from_tag = _name_from_tag, _xlit = _xlit, _translation_make = translation_make, }; pjs0klhaiwweelyd7pjfmp0uzocrd5t ಮೋಡ್ಯೂಲ್:Mapframe 828 7579 373855 371476 2026-10-18T22:35:06Z en>Jonesey95 0 "coordinates" is the canonical form of this parameter. "coord" is not supported by all templates that call this module, so the Lua error message should not suggest putting coordinates in "|coord=". 373855 Scribunto text/plain -- Note: Originally written on English Wikipedia at https://en.wikipedia.org/wiki/Module:Mapframe --[[---------------------------------------------------------------------------- ##### Localisation (L10n) settings ##### Replace values in quotes ("") with localised values ----------------------------------------------------------------------------]]-- local L10n = {} local wb = mw.wikibase -- Modue dependencies local parser -- local copy of https://www.mediawiki.org/wiki/Module:WikitextParser loaded lazily -- "strict" should not be used, at least until all other modules which require this module are not using globals. -- Template parameter names (unnumbered versions only) -- Specify each as either a single string, or a table of strings (aliases) -- Aliases are checked left-to-right, i.e. `{ "one", "two" }` is equivalent to using `{{{one| {{{two|}}} }}}` in a template L10n.para = { display = "display", type = "type", id = { "id", "ids" }, from = "from", raw = "raw", title = "title", description = "description", strokeColor = { "stroke-color", "stroke-colour" }, strokeWidth = "stroke-width", strokeOpacity = "stroke-opacity", fill = "fill", fillOpacity = "fill-opacity", coord = { "coordinates", "coord" }, marker = "marker", markerColor = { "marker-color", "marker-colour" }, markerSize = "marker-size", radius = { "radius", "radius_m" }, radiusKm = "radius_km", radiusFt = "radius_ft", radiusMi = "radius_mi", edges = "edges", text = "text", icon = "icon", zoom = "zoom", frame = "frame", plain = "plain", frameWidth = "frame-width", frameHeight = "frame-height", frameCoordinates= { "frame-coordinates", "frame-coord" }, frameLatitude = { "frame-lat", "frame-latitude" }, frameLongitude = { "frame-long", "frame-longitude" }, frameAlign = "frame-align", switch = "switch", overlay = "overlay", overlayBorder = "overlay-border", overlayHorizontalAlignment = "overlay-horizontal-alignment", overlayVerticalAlignment = "overlay-vertical-alignment", overlayHorizontalOffset = "overlay-horizontal-offset", overlayVerticalOffset = "overlay-vertical-offset" } -- Names of other templates this module can extract coordinates from L10n.template = { templates = { -- The coord template, as well as templates with output that contains {{coord}} "Coord", "Coord/sandbox", "NRHP row", "NRHP row/sandbox", "WikidataCoord", "WikidataCoord/sandbox", "Wikidatacoord", "Wikidata coord" }, modules = { -- The coordinates module, as well as modules with output that contains {{coord}} "Coordinates", "Coordinates/sandbox", "WikidataCoord", "WikidataCoord/sandbox" } } -- Error messages L10n.error = { badDisplayPara = "Invalid display parameter", noCoords = "Coordinates must be specified on Wikidata or in |" .. ( type(L10n.para.coord)== 'table' and L10n.para.coord[1] or L10n.para.coord ) .. "=", wikidataCoords = "Coordinates not found on Wikidata", noCircleCoords = "Circle centre coordinates must be specified, or available via Wikidata", negativeRadius = "Circle radius must be a positive number", noRadius = "Circle radius must be specified", negativeEdges = "Circle edges must be a positive number", noSwitchPara = "Found only one switch value in |" .. ( type(L10n.para.switch)== 'table' and L10n.para.switch[1] or L10n.para.switch ) .. "=", oneSwitchLabel = "Found only one label in |" .. ( type(L10n.para.switch)== 'table' and L10n.para.switch[1] or L10n.para.switch ) .. "=", noSwitchLists = "At least one parameter must have a SWITCH: list", switchMismatches = "All SWITCH: lists must have the same number of values", -- "%s" and "%d" tokens will be replaced with strings and numbers when used oneSwitchValue = "Found only one switch value in |%s=", fewerSwitchLabels = "Found %d switch values but only %d labels in |" .. ( type(L10n.para.switch)== 'table' and L10n.para.switch[1] or L10n.para.switch ) .. "=", noNamedCoords = "No named coordinates found in %s" } -- Other strings L10n.str = { -- valid values for display parameter, e.g. (|display=inline) or (|display=title) or (|display=inline,title) or (|display=title,inline) inline = "inline", title = "title", dsep = ",", -- separator between inline and title (comma in the example above) -- valid values for type parameter line = "line", -- geoline feature (e.g. a road) shape = "shape", -- geoshape feature (e.g. a state or province) shapeInverse = "shape-inverse", -- geomask feature (the inverse of a geoshape) data = "data", -- geoJSON data page on Commons point = "point", -- single point feature (coordinates) circle = "circle", -- circular area around a point named = "named", -- all named coordinates in an article or section -- Keyword to indicate a switch list. Must NOT use the special characters ^$()%.[]*+-? switch = "SWITCH", -- valid values for icon, frame, and plain parameters affirmedWords = ' '..table.concat({ "add", "added", "affirm", "affirmed", "include", "included", "on", "true", "yes", "y" }, ' ')..' ', declinedWords = ' '..table.concat({ "decline", "declined", "exclude", "excluded", "false", "none", "not", "no", "n", "off", "omit", "omitted", "remove", "removed" }, ' ')..' ' } -- Default values for parameters L10n.defaults = { display = L10n.str.inline, text = "Map", frameWidth = "300", frameHeight = "200", frameAlign = "right", markerColor = "5E74F3", markerSize = nil, strokeColor = "#ff0000", strokeWidth = 6, edges = 32, -- number of edges used to approximate a circle overlayBorder = "1px solid white", overlayHorizontalAlignment = "right", overlayHorizontalOffset = "0", overlayVerticalAlignment = "bottom", overlayVerticalOffset = "0" } -- #### End of L10n settings #### --[[---------------------------------------------------------------------------- Utility methods ----------------------------------------------------------------------------]]-- local util = {} --[[ Looks up a parameter value based on the id (a key from the L10n.para table) and optionally a suffix, for parameters that can be suffixed (e.g. type2 is type with suffix 2). @param {table} args key-value pairs of parameter names and their values @param {string} param_id id for parameter name (key from the L10n.para table) @param {string} [suffix] suffix for parameter name @returns {string|nil} parameter value if found, or nil if not found ]]-- function util.getParameterValue(args, param_id, suffix) suffix = suffix or '' if type( L10n.para[param_id] ) ~= 'table' then return args[L10n.para[param_id]..suffix] end for _i, paramAlias in ipairs(L10n.para[param_id]) do if args[paramAlias..suffix] then return args[paramAlias..suffix] end end return nil end --[[ Trim whitespace from args, and remove empty args. Also fix control characters. @param {table} argsTable @returns {table} trimmed args table ]]-- function util.trimArgs(argsTable) local cleanArgs = {} for key, val in pairs(argsTable) do if type(key) == 'string' and type(val) == 'string' then val = val:match('^%s*(.-)%s*$') if val ~= '' then -- control characters inside json need to be escaped, but stripping them is simpler -- See also T214984 -- However, *don't* strip control characters from wikitext (text or description parameters) or you'll break strip markers -- Alternatively it might be better to only strip control char from raw parameter content if util.matchesParam('text', key) or util.matchesParam('description', key, key:gsub('^%D+(%d+)$', '%1') ) then cleanArgs[key] = val else cleanArgs[key] = val:gsub('%c',' ') end end else cleanArgs[key] = val end end return cleanArgs end --[[ Check if a parameter name matches an unlocalized parameter key @param {string} key - the unlocalized parameter name to search through @param {string} name - the localized parameter name to check @param {string|nil} - an optional suffix to apply to the value(s) from the localization key @returns {boolean} true if the name matches the parameter, false otherwise ]]-- function util.matchesParam(key, name, suffix) local param = L10n.para[key] suffix = suffix or '' if type(param) == 'table' then for _, v in pairs(param) do if (v .. suffix) == name then return true end end return false end return ((param .. suffix) == name) end --[[ Check if a value is affirmed (one of the values in L10n.str.affirmedWords) @param {string} val Value to be checked @returns {boolean} true if affirmed, false otherwise ]]-- function util.isAffirmed(val) if not(val) then return false end return string.find(L10n.str.affirmedWords, ' '..val..' ', 1, true ) and true or false end --[[ Check if a value is declined (one of the values in L10n.str.declinedWords) @param {string} val Value to be checked @returns {boolean} true if declined, false otherwise ]]-- function util.isDeclined(val) if not(val) then return false end return string.find(L10n.str.declinedWords , ' '..val..' ', 1, true ) and true or false end --[[ Check if the name of a template matches the known coord templates or wrappers (in L10n.template.templates and L10n.template.modules). The name is normalised when checked, so e.g. the names "Coord", "coord", and " Coord" all return true. @param {string} name @returns {boolean} true if it is a coord template or wrapper, false otherwise ]]-- function util.isCoordTemplateOrWrapper(name) name = mw.text.trim(name) local modName = mw.ustring.gsub(name, '#invoke:', '') local inputTitle = mw.title.new(modName, (name ~= modName) and 'Module' or 'Template') if not inputTitle then return false end -- Create (or reuse) mw.title objects for each known coord template/wrapper. -- Stored in L10n.template.title so that they don't need to be recreated -- each time this function is called if not L10n.template.titles then L10n.template.titles = {} for _, v in pairs(L10n.template.templates) do table.insert(L10n.template.titles, mw.title.new(v, 'Template')) end for _, v in pairs(L10n.template.modules) do table.insert(L10n.template.titles, mw.title.new(v, 'Module')) end end for _, templateTitle in pairs(L10n.template.titles) do if mw.title.equals(inputTitle, templateTitle) then return true end end return false end --[[ Recursively extract coord templates which have a name parameter. @param {string} wikitext @returns {table} table sequence of coord templates ]]-- function util.extractCoordTemplates(wikitext) local output = {} local templates = mw.ustring.gmatch(wikitext, '{%b{}}') for template in templates do local templateName = mw.ustring.match(template, '{{([^}|]+)') local nameParam = mw.ustring.match(template, "|%s*name%s*=%s*[^}|]+") if util.isCoordTemplateOrWrapper(templateName) then if nameParam then table.insert(output, template) end elseif mw.ustring.find(mw.ustring.sub(template, 2), "{{") then local subOutput = util.extractCoordTemplates(mw.ustring.sub(template, 2)) for _, t in pairs(subOutput) do table.insert(output, t) end end end -- ensure coords are not using title display for k, v in pairs(output) do output[k] = mw.ustring.gsub(v, "|%s*display%s*=[^|}]+", "|display=inline") end return output end --[[ Gets all named coordinates from a page or a section of a page. @param {string|nil} page Page name, or name#section, to get named coordinates from. If the name is omitted, i.e. #section or nil or empty string, then the current page will be used. @returns {table} sequence of {coord, name, description} tables where coord is the coordinates in a format suitable for #util.parseCoords, name is a string, and description is a string (coordinates in a format suitable for displaying to the reader). If for some reason the name can't be found, the description is nil and the name contains display-format coordinates. @throws {L10n.error.noNamedCoords} if no named coordinates are found. ]]-- function util.getNamedCoords(page) local parts = mw.text.split(page or "", "#", true) local name = parts[1] == "" and mw.title.getCurrentTitle().prefixedText or parts[1] local section = parts[2] local title = mw.title.new(name) if title.isRedirect then title = title.redirectTarget end local pageWikitext = title:getContent() if section then if parser == nil then -- load [[Module:WikitextParser]] lazily so it is only transcluded on pages that use it parser = require("Module:WikitextParser") end pageWikitext = parser.getSection(pageWikitext, section) or '' end local coordTemplates = util.extractCoordTemplates(pageWikitext) if #coordTemplates == 0 then error(string.format(L10n.error.noNamedCoords, page or name), 0) end local frame = mw.getCurrentFrame() local sep = "________" local expandedContent = frame:preprocess(table.concat(coordTemplates, sep)) local expandedTemplates = mw.text.split(expandedContent, sep) local namedCoords = {} for _, expandedTemplate in pairs(expandedTemplates) do local coord = mw.ustring.match(expandedTemplate, "<span class=\"geo%-dec\".->(.-)</span>") if coord then local coordname = ( -- name specified by a wrapper template, e.g [[Article|Name]] mw.ustring.match(expandedTemplate, "<span class=\"mapframe%-coord%-name\">(.-)</span>") or -- name passed into coord template mw.ustring.match(expandedTemplate, "<span class=\"fn org\">(.-)</span>") or -- default to the coordinates if the name can't be retrieved coord ) local description = coordname ~= coord and coord table.insert(namedCoords, { coord=mw.ustring.gsub(coord, "[° ]", "_"), name=coordname, description=description }) end end if #namedCoords == 0 then error(string.format(L10n.error.noNamedCoords, page or name), 0) end return namedCoords end --[[ Parse coordinate values from the params passed in a GeoHack url (such as //tools.wmflabs.org/geohack/geohack.php?pagename=Example&params=1_2_N_3_4_W_ or //tools.wmflabs.org/geohack/geohack.php?pagename=Example&params=1.23_S_4.56_E_ ) or non-url string in the same format (such as `1_2_N_3_4_W_` or `1.23_S_4.56_E_`) @param {string} coords string containing coordinates @returns {number, number} latitude, longitude ]]-- function util.parseCoords(coords) local coordsPatt if mw.ustring.find(coords, "params=", 1, true) then -- prevent false matches from page name, e.g. ?pagename=Lorem_S._Ipsum coordsPatt = 'params=([_%.%d]+[NS][_%.%d]+[EW])' else -- not actually a geohack url, just the same format coordsPatt = '[_%.%d]+[NS][_%.%d]+[EW]' end local parts = mw.text.split((mw.ustring.match(coords, coordsPatt) or ''), '_') local lat_d = tonumber(parts[1]) assert(lat_d, "Unable to get latitude from input '"..coords.."'.") local lat_m = tonumber(parts[2]) -- nil if coords are in decimal format local lat_s = lat_m and tonumber(parts[3]) -- nil if coords are either in decimal format or degrees and minutes only local lat = lat_d + (lat_m or 0)/60 + (lat_s or 0)/3600 if parts[#parts/2] == 'S' then lat = lat * -1 end local long_d = tonumber(parts[1+#parts/2]) assert(long_d, "Unable to get longitude from input '"..coords.."'.") local long_m = tonumber(parts[2+#parts/2]) -- nil if coords are in decimal format local long_s = long_m and tonumber(parts[3+#parts/2]) -- nil if coords are either in decimal format or degrees and minutes only local long = long_d + (long_m or 0)/60 + (long_s or 0)/3600 if parts[#parts] == 'W' then long = long * -1 end return lat, long end --[[ Get coordinates from a Wikidata item @param {string} item_id Wikidata item id (Q number) @returns {number, number} latitude, longitude @throws {L10n.error.noCoords} if item_id is invalid or the item does not exist @throws {L10n.error.wikidataCoords} if the the item does not have a P625 statement (coordinates), or it is set to "no value" ]]-- function util.wikidataCoords(item_id) if not (item_id and wb.isValidEntityId(item_id) and wb.entityExists(item_id)) then error(L10n.error.noCoords, 0) end local coordStatements = wb.getBestStatements(item_id, 'P625') if not coordStatements or #coordStatements == 0 then error(L10n.error.wikidataCoords, 0) end local hasNoValue = ( coordStatements[1].mainsnak and (coordStatements[1].mainsnak.snaktype == 'novalue' or coordStatements[1].mainsnak.snaktype == 'somevalue') ) if hasNoValue then error(L10n.error.wikidataCoords, 0) end local wdCoords = coordStatements[1]['mainsnak']['datavalue']['value'] return tonumber(wdCoords['latitude']), tonumber(wdCoords['longitude']) end --[[ Creates a polygon that approximates a circle @param {number} lat Latitude @param {number} long Longitude @param {number} radius Radius in metres @param {number} n Number of edges for the polygon @returns {table} sequence of {latitude, longitude} table sequences, where latitude and longitude are both numbers ]]-- function util.circleToPolygon(lat, long, radius, n) -- n is number of edges -- Based on https://github.com/gabzim/circle-to-polygon, ISC licence local function offset(cLat, cLon, distance, bearing) local lat1 = math.rad(cLat) local lon1 = math.rad(cLon) local dByR = distance / 6378137 -- distance divided by 6378137 (radius of the earth) wgs84 local offet_lat = math.asin( math.sin(lat1) * math.cos(dByR) + math.cos(lat1) * math.sin(dByR) * math.cos(bearing) ) local offet_lon = lon1 + math.atan2( math.sin(bearing) * math.sin(dByR) * math.cos(lat1), math.cos(dByR) - math.sin(lat1) * math.sin(offet_lat) ) return {math.deg(offet_lon), math.deg(offet_lat)} end local coordinates = {}; local i = 0; while i < n do table.insert(coordinates, offset(lat, long, radius, (2*math.pi*i*-1)/n) ) i = i + 1 end table.insert(coordinates, offset(lat, long, radius, 0)) return coordinates end --[[ Get the number of key-value pairs in a table, which might not be a sequence. @param {table} t @returns {number} count of key-value pairs ]]-- function util.tableCount(t) local count = 0 for k, v in pairs(t) do count = count + 1 end return count end --[[ For a table where the values are all tables, returns either the util.tableCount of the subtables if they are all the same, or nil if they are not all the same. @param {table} t @returns {number|nil} count of key-value pairs of subtable, or nil if subtables have different counts ]]-- function util.subTablesCount(t) local count = nil for k, v in pairs(t) do if count == nil then count = util.tableCount(v) elseif count ~= util.tableCount(v) then return nil end end return count end --[[ Splits a list into a table sequence. The items in the list may be separated by commas, or by semicolons (if items may contain commas), or by "###" (if items may contain semicolons). @param {string} listString @returns {table} sequence of list items ]]-- function util.tableFromList(listString) if type(listString) ~= "string" or listString == "" then return nil end local separator = (mw.ustring.find(listString, "###", 0, true ) and "###") or (mw.ustring.find(listString, ";", 0, true ) and ";") or "," local pattern = "%s*"..separator.."%s*" return mw.text.split(listString, pattern) end -- Boolean in outer scope indicating if Kartographer should be able to -- automatically calculate coordinates (see phab:T227402) local coordsDerivedFromFeatures = false; --[[---------------------------------------------------------------------------- Make methods: These take in a table of arguments, and return either a string or a table to be used in the eventual output. ----------------------------------------------------------------------------]]-- local make = {} --[[ Makes content to go inside the maplink or mapframe tag. @param {table} args @returns {string} tag content ]]-- function make.content(args) if util.getParameterValue(args, 'raw') then coordsDerivedFromFeatures = true -- Kartographer should be able to automatically calculate coords from raw geoJSON return util.getParameterValue(args, 'raw') end local content = {} local argsExpanded = {} for k, v in pairs(args) do local index = string.match( k, '^[^0-9]+([0-9]*)$' ) if index ~= nil then local indexNumber if index ~= '' then indexNumber = tonumber(index) else indexNumber = 1 end if argsExpanded[indexNumber] == nil then argsExpanded[indexNumber] = {} end argsExpanded[indexNumber][ string.gsub(k, index, '') ] = v end end for contentIndex, contentArgs in pairs(argsExpanded) do local argType = util.getParameterValue(contentArgs, "type") -- Kartographer automatically calculates coords if geolines/shapes are used (T227402) if not coordsDerivedFromFeatures then coordsDerivedFromFeatures = ( argType == L10n.str.line or argType == L10n.str.shape ) and true or false end if argType == L10n.str.named then local namedCoords = util.getNamedCoords(util.getParameterValue(contentArgs, "from")) local typeKey = type(L10n.para.type) == "table" and L10n.para.type[1] or L10n.para.type local coordKey = type(L10n.para.coord) == "table" and L10n.para.coord[1] or L10n.para.coord local titleKey = type(L10n.para.title) == "table" and L10n.para.title[1] or L10n.para.title local descKey = type(L10n.para.description) == "table" and L10n.para.description[1] or L10n.para.description for _, namedCoord in pairs(namedCoords) do contentArgs[typeKey] = "point" contentArgs[coordKey] = namedCoord.coord contentArgs[titleKey] = namedCoord.name contentArgs[descKey] = namedCoord.description content[#content+1] = make.contentJson(contentArgs) end else content[#content + 1] = make.contentJson(contentArgs) end end --Single item, no array needed if #content==1 then return content[1] end --Multiple items get placed in a FeatureCollection local contentArray = '[\n' .. table.concat( content, ',\n') .. '\n]' return contentArray end --[[ Make coordinates from the coord arg, or the id arg, or the current page's Wikidata item. @param {table} args @param {boolean} [plainOutput] @returns {Mixed} Either: {number, number} latitude, longitude if plainOutput is true; or {table} table sequence of longitude, then latitude (gives the required format for GeoJSON when encoded) ]]-- function make.coords(args, plainOutput) local coords, lat, long local frame = mw.getCurrentFrame() if util.getParameterValue(args, 'coord') then coords = frame:preprocess( util.getParameterValue(args, 'coord') ) lat, long = util.parseCoords(coords) else lat, long = util.wikidataCoords(util.getParameterValue(args, 'id') or wb.getEntityIdForCurrentPage()) end if plainOutput then return lat, long end return {[0] = long, [1] = lat} end --[[ Makes a table of coordinates that approximate a circle. @param {table} args @returns {table} sequence of {latitude, longitude} table sequences, where latitude and longitude are both numbers @throws {L10n.error.noCircleCoords} if centre coordinates are not specified @throws {L10n.error.noRadius} if radius is not specified @throws {L10n.error.negativeRadius} if radius is negative or zero @throws {L10n.error.negativeEdges} if edges is negative or zero ]]-- function make.circleCoords(args) local lat, long = make.coords(args, true) local radius = util.getParameterValue(args, 'radius') if not radius then radius = util.getParameterValue(args, 'radiusKm') and tonumber(util.getParameterValue(args, 'radiusKm'))*1000 if not radius then radius = util.getParameterValue(args, 'radiusMi') and tonumber(util.getParameterValue(args, 'radiusMi'))*1609.344 if not radius then radius = util.getParameterValue(args, 'radiusFt') and tonumber(util.getParameterValue(args, 'radiusFt'))*0.3048 end end end local edges = util.getParameterValue(args, 'edges') or L10n.defaults.edges if not lat or not long then error(L10n.error.noCircleCoords, 0) elseif not radius then error(L10n.error.noRadius, 0) elseif tonumber(radius) <= 0 then error(L10n.error.negativeRadius, 0) elseif tonumber(edges) <= 0 then error(L10n.error.negativeEdges, 0) end return util.circleToPolygon(lat, long, radius, tonumber(edges)) end --[[ Makes JSON data for a feature @param contentArgs args for this feature. Keys must be the non-suffixed version of the parameter names, i.e. use type, stroke, fill,... rather than type3, stroke3, fill3,... @returns {string} JSON encoded data ]]-- function make.contentJson(contentArgs) local data = {} if util.getParameterValue(contentArgs, 'type') == L10n.str.point or util.getParameterValue(contentArgs, 'type') == L10n.str.circle then local isCircle = util.getParameterValue(contentArgs, 'type') == L10n.str.circle data.type = "Feature" data.geometry = { type = isCircle and "LineString" or "Point", coordinates = isCircle and make.circleCoords(contentArgs) or make.coords(contentArgs) } data.properties = { title = util.getParameterValue(contentArgs, 'title') or mw.getCurrentFrame():getParent():getTitle() } if isCircle then -- TODO: This is very similar to below, should be extracted into a function data.properties.stroke = util.getParameterValue(contentArgs, 'strokeColor') or L10n.defaults.strokeColor data.properties["stroke-width"] = tonumber(util.getParameterValue(contentArgs, 'strokeWidth')) or L10n.defaults.strokeWidth local strokeOpacity = util.getParameterValue(contentArgs, 'strokeOpacity') if strokeOpacity then data.properties['stroke-opacity'] = tonumber(strokeOpacity) end local fill = util.getParameterValue(contentArgs, 'fill') if fill then data.properties.fill = fill local fillOpacity = util.getParameterValue(contentArgs, 'fillOpacity') data.properties['fill-opacity'] = fillOpacity and tonumber(fillOpacity) or 0.6 end else -- is a point local markerSymbol = util.getParameterValue(contentArgs, 'marker') or L10n.defaults.marker -- allow blank to be explicitly specified, for overriding infoboxes or other templates with a default value if markerSymbol ~= "blank" then data.properties["marker-symbol"] = markerSymbol end data.properties["marker-color"] = util.getParameterValue(contentArgs, 'markerColor') or L10n.defaults.markerColor data.properties["marker-size"] = util.getParameterValue(contentArgs, 'markerSize') or L10n.defaults.markerSize end else data.type = "ExternalData" if util.getParameterValue(contentArgs, 'type') == L10n.str.data or util.getParameterValue(contentArgs, 'from') then data.service = "page" elseif util.getParameterValue(contentArgs, 'type') == L10n.str.line then data.service = "geoline" elseif util.getParameterValue(contentArgs, 'type') == L10n.str.shape then data.service = "geoshape" elseif util.getParameterValue(contentArgs, 'type') == L10n.str.shapeInverse then data.service = "geomask" end if util.getParameterValue(contentArgs, 'id') or (not (util.getParameterValue(contentArgs, 'from')) and wb.getEntityIdForCurrentPage()) then data.ids = util.getParameterValue(contentArgs, 'id') or wb.getEntityIdForCurrentPage() else data.title = util.getParameterValue(contentArgs, 'from') end data.properties = { stroke = util.getParameterValue(contentArgs, 'strokeColor') or L10n.defaults.strokeColor, ["stroke-width"] = tonumber(util.getParameterValue(contentArgs, 'strokeWidth')) or L10n.defaults.strokeWidth } local strokeOpacity = util.getParameterValue(contentArgs, 'strokeOpacity') if strokeOpacity then data.properties['stroke-opacity'] = tonumber(strokeOpacity) end local fill = util.getParameterValue(contentArgs, 'fill') if fill and (data.service == "geoshape" or data.service == "geomask") then data.properties.fill = fill local fillOpacity = util.getParameterValue(contentArgs, 'fillOpacity') if fillOpacity then data.properties['fill-opacity'] = tonumber(fillOpacity) end end end data.properties.title = util.getParameterValue(contentArgs, 'title') or mw.title.getCurrentTitle().text if util.getParameterValue(contentArgs, 'description') then data.properties.description = util.getParameterValue(contentArgs, 'description') end return mw.text.jsonEncode(data) end --[[ Makes attributes for the maplink or mapframe tag. @param {table} args @param {boolean} [isTitle] Tag is to be displayed in the title of page rather than inline @returns {table<string,string>} key-value pairs of attribute names and values ]]-- function make.tagAttribs(args, isTitle) local attribs = {} if util.getParameterValue(args, 'zoom') then attribs.zoom = util.getParameterValue(args, 'zoom') end if util.isDeclined(util.getParameterValue(args, 'icon')) then attribs.class = "no-icon" end if util.getParameterValue(args, 'type') == L10n.str.point and not coordsDerivedFromFeatures then local lat, long = make.coords(args, 'plainOutput') attribs.latitude = tostring(lat) attribs.longitude = tostring(long) end if util.isAffirmed(util.getParameterValue(args, 'frame')) and not(isTitle) then attribs.width = util.getParameterValue(args, 'frameWidth') or L10n.defaults.frameWidth attribs.height = util.getParameterValue(args, 'frameHeight') or L10n.defaults.frameHeight if util.getParameterValue(args, 'frameCoordinates') then local frameLat, frameLong = util.parseCoords(util.getParameterValue(args, 'frameCoordinates')) attribs.latitude = frameLat attribs.longitude = frameLong else if util.getParameterValue(args, 'frameLatitude') then attribs.latitude = util.getParameterValue(args, 'frameLatitude') end if util.getParameterValue(args, 'frameLongitude') then attribs.longitude = util.getParameterValue(args, 'frameLongitude') end end if not attribs.latitude and not attribs.longitude and not coordsDerivedFromFeatures then local success, lat, long = pcall(util.wikidataCoords, util.getParameterValue(args, 'id') or wb.getEntityIdForCurrentPage()) if success then attribs.latitude = tostring(lat) attribs.longitude = tostring(long) end end if util.getParameterValue(args, 'frameAlign') then attribs.align = util.getParameterValue(args, 'frameAlign') end if util.isAffirmed(util.getParameterValue(args, 'plain')) then attribs.frameless = "1" else attribs.text = util.getParameterValue(args, 'text') or L10n.defaults.text end else attribs.text = util.getParameterValue(args, 'text') or L10n.defaults.text end return attribs end --[[ Makes maplink wikitext that will be located in the top-right of the title of the page (the same place where coords with |display=title are positioned). @param {table} args @param {string} tagContent Content for the maplink tag @returns {string} ]]-- function make.titleOutput(args, tagContent) local titleTag = mw.text.tag('maplink', make.tagAttribs(args, true), tagContent) local spanAttribs = { style = "font-size: small;", id = "mapframe-coordinates" } local indicatorContent = mw.text.tag('span', spanAttribs, titleTag) return mw.getCurrentFrame():extensionTag { name = "indicator", content = indicatorContent, args = { name = "zzz-mapframe" --zzz: show as last indicator } } end --[[ Makes maplink or mapframe wikitext that will be located inline. @param {table} args @param {string} tagContent Content for the maplink tag @returns {string} ]]-- function make.inlineOutput(args, tagContent) local tagName = 'maplink' if util.getParameterValue(args, 'frame') then tagName = 'mapframe' end return mw.text.tag(tagName, make.tagAttribs(args), tagContent) end --[[ Makes the HTML required for the swicther to work, including the templatestyles tag. @param {table} params table sequence of {map, label} tables @param {string} params{}.map Wikitext for mapframe map @param {string} params{}.label Label text for swicther option @param {table} options @param {string} options.alignment "left" or "center" or "right" @param {boolean} options.isThumbnail Display in a thumbnail @param {string} options.width Width of frame, e.g. "200" @param {string} [options.caption] Caption wikitext for thumnail @retruns {string} swicther HTML ]]-- function make.switcherHtml(params, options) options = options or {} local frame = mw.getCurrentFrame() local styles = frame:extensionTag{ name = "templatestyles", args = {src = "Template:Maplink/styles-multi.css"} } local container = mw.html.create("div") :addClass("switcher-container") :addClass("mapframe-multi-container") if options.alignment == "left" or options.alignment == "right" then container:addClass("float"..options.alignment) else -- alignment is "center" container:addClass("center") end for i = 1, #params do container :tag("div") :wikitext(params[i].map) :tag("span") :addClass("switcher-label") :css("display", "none") :wikitext(mw.text.trim(params[i].label)) end if not options.isThumbnail then return styles .. tostring(container) end local classlist = container:getAttr("class") classlist = mw.ustring.gsub(classlist, "%a*"..options.alignment, "") container:attr("class", classlist) local outerCountainer = mw.html.create("div") :addClass("mapframe-multi-outer-container") :addClass("mw-kartographer-container") :addClass("thumb") if options.alignment == "left" or options.alignment == "right" then outerCountainer:addClass("float"..options.alignment) else -- alignment is "center" outerCountainer :addClass("tnone") :addClass("center") end outerCountainer :tag("div") :addClass("thumbinner") :css("width", options.width.."px") :node(container) :node(options.caption and mw.html.create("div") :addClass("thumbcaption") :wikitext(options.caption) ) return styles .. tostring(outerCountainer) end --[[ Makes the HTML required for an overlay map to work tag. @param {string} overlayMap wikitext for the overlay map @param {string} baseMap wikitext for the base map @param {table} options various styling/display options @param {string} options.align "left" or "center" or "right" @param {string|number} options.width Width of the base map, e.g. "300" @param {string|number} options.width Height of the base map, e.g. "200" @param {string} options.border Border style for the overlayed map, e.g. "1px solid white" @param {string} options.horizontalAlignment Horizontal alignment for overlay map, "left" or "right" @param {string|number} options.horizontalOffset Horizontal offset in pixels from the alignment edge, e.g "10" @param {string} options.verticalAlignment Vertical alignment for overlay map, "top" or "bottom" @param {string|number} options.verticalOffset Vertical offset in pixels from the alignment edge, e.g. is "10" @param {boolean} options.isThumbnail Display in a thumbnail @param {string} [options.caption] Caption wikitext for thumnail @retruns {string} HTML for basemap with overlay ]]-- function make.overlayHtml(overlayMap, baseMap, options) options = options or {} local containerFloatClass = "float"..(options.align or "none") if options.align == "center" then containerFloatClass = "center" end local containerStyle = { position = "relative", width = options.width .. "px", height = options.height .. "px", overflow = "hidden" -- mobile/minerva tends to add scrollbars for a couple of pixels } if options.align == "center" then containerStyle["margin-left"] = "auto" containerStyle["margin-right"] = "auto" end local container = mw.html.create("div") :addClass("mapframe-withOverlay-container") :addClass(containerFloatClass) :addClass("noresize") :css(containerStyle) local overlayStyle = { position = "absolute", ["z-index"] = "1", border = options.border or "1px solid white" } if options.horizontalAlignment == "right" then overlayStyle.right = options.horizontalOffset .. "px" else overlayStyle.left = options.horizontalOffset .. "px" end if options.verticalAlignment == "bottom" then overlayStyle.bottom = options.verticalOffset .. "px" else overlayStyle.top = options.verticalOffset .. "px" end local overlayDiv = mw.html.create("div") :css(overlayStyle) :wikitext(overlayMap) container :node(overlayDiv) :wikitext(baseMap) if not options.isThumbnail then return tostring(container) end local classlist = container:getAttr("class") classlist = mw.ustring.gsub(classlist, "%a*"..options.align, "") container:attr("class", classlist) local outerCountainer = mw.html.create("div") :addClass("mapframe-withOverlay-outerContainer") :addClass("mw-kartographer-container") :addClass("thumb") if options.align == "left" or options.align == "right" then outerCountainer:addClass("t"..options.align) else -- alignment is "center" outerCountainer :addClass("tnone") :addClass("center") end outerCountainer :tag("div") :addClass("thumbinner") :css("width", options.width.."px") :node(container) :node(options.caption and mw.html.create("div") :addClass("thumbcaption") :wikitext(options.caption) ) return tostring(outerCountainer) end --[[---------------------------------------------------------------------------- Package to be exported, i.e. methods which will available to templates and other modules. ----------------------------------------------------------------------------]]-- local p = {} -- Entry point for templates function p.main(frame) local parent = frame.getParent(frame) -- Check for overlay option local overlay = util.getParameterValue(parent.args, 'overlay') local hasOverlay = overlay and mw.text.trim(overlay) ~= "" -- Check for switch option local switch = util.getParameterValue(parent.args, 'switch') local isMulti = switch and mw.text.trim(switch) ~= "" -- Create output by choosing method to suit options local output if hasOverlay then output = p.withOverlay(parent.args) elseif isMulti then output = p.multi(parent.args) else output = p._main(parent.args) end -- Preprocess output before returning it return frame:preprocess(output) end -- Entry points for modules function p._main(_args) local args = util.trimArgs(_args) local tagContent = make.content(args) local display = mw.text.split(util.getParameterValue(args, 'display') or L10n.defaults.display, '%s*' .. L10n.str.dsep .. '%s*') local displayInTitle = display[1] == L10n.str.title or display[2] == L10n.str.title local displayInline = display[1] == L10n.str.inline or display[2] == L10n.str.inline local output if displayInTitle and displayInline then output = make.titleOutput(args, tagContent) .. make.inlineOutput(args, tagContent) elseif displayInTitle then output = make.titleOutput(args, tagContent) elseif displayInline then output = make.inlineOutput(args, tagContent) else error(L10n.error.badDisplayPara) end return output end function p.multi(_args) local args = util.trimArgs(_args) if not args[L10n.para.switch] then error(L10n.error.noSwitchPara, 0) end local switchParamValue = util.getParameterValue(args, 'switch') local switchLabels = util.tableFromList(switchParamValue) if #switchLabels == 1 then error(L10n.error.oneSwitchLabel, 0) end local mapframeArgs = {} local switchParams = {} for name, val in pairs(args) do -- Copy to mapframeArgs, if not the switch labels or a switch parameter if val ~= switchParamValue and not string.match(val, "^"..L10n.str.switch..":") then mapframeArgs[name] = val end -- Check if this is a param to switch. If so, store the name and switch -- values in switchParams table. local switchList = string.match(val, "^"..L10n.str.switch..":(.+)") if switchList ~= nil then local values = util.tableFromList(switchList) if #values == 1 then error(string.format(L10n.error.oneSwitchValue, name), 0) end switchParams[name] = values end end if util.tableCount(switchParams) == 0 then error(L10n.error.noSwitchLists, 0) end local switchCount = util.subTablesCount(switchParams) if not switchCount then error(L10n.error.switchMismatches, 0) elseif switchCount > #switchLabels then error(string.format(L10n.error.fewerSwitchLabels, switchCount, #switchLabels), 0) end -- Ensure a plain frame will be used (thumbnail will be built by the -- make.switcherHtml function if required, so that switcher options are -- inside the thumnail) mapframeArgs.plain = "yes" local switcher = {} for i = 1, switchCount do local label = switchLabels[i] for name, values in pairs(switchParams) do mapframeArgs[name] = values[i] end table.insert(switcher, { map = p._main(mapframeArgs), label = "Show "..label }) end return make.switcherHtml(switcher, { alignment = args["frame-align"] or "right", isThumbnail = (args.frame and not args.plain) and true or false, width = args["frame-width"] or L10n.defaults.frameWidth, caption = args.text }) end function p.withOverlay(_args) -- Get and trim wikitext for overlay map local overlayMap = _args.overlay if type(overlayMap) == 'string' then overlayMap = overlayMap:match('^%s*(.-)%s*$') end local isThumbnail = (util.getParameterValue(_args, "frame") and not util.getParameterValue(_args, "plain")) and true or false -- Get base map using the _main function, as a plain map local args = util.trimArgs(_args) args.plain = "yes" local basemap = p._main(args) -- Extract overlay options from args local overlayOptions = { width = util.getParameterValue(args, "frameWidth") or L10n.defaults.frameWidth, height = util.getParameterValue(args, "frameHeight") or L10n.defaults.frameHeight, align = util.getParameterValue(args, "frameAlign") or L10n.defaults.frameAlign, border = util.getParameterValue(args, "overlayBorder") or L10n.defaults.overlayBorder, horizontalAlignment = util.getParameterValue(args, "overlayHorizontalAlignment") or L10n.defaults.overlayHorizontalAlignment, horizontalOffset = util.getParameterValue(args, "overlayHorizontalOffset") or L10n.defaults.overlayHorizontalOffset, verticalAlignment = util.getParameterValue(args, "overlayVerticalAlignment") or L10n.defaults.overlayVerticalAlignment, verticalOffset = util.getParameterValue(args, "overlayVerticalOffset") or L10n.defaults.overlayVerticalOffset, isThumbnail = isThumbnail, caption = util.getParameterValue(args, "text") or L10n.defaults.text } -- Make the HTML for the overlaying maps return make.overlayHtml(overlayMap, basemap, overlayOptions) end -- Entry point for testcase tests p.test = util return p cbg20zhedgvi7tds8motk323r37gona 373856 373855 2026-10-28T05:55:26Z ChiK 1136 1 revision imported from [[:en:Module:Mapframe]] 373855 Scribunto text/plain -- Note: Originally written on English Wikipedia at https://en.wikipedia.org/wiki/Module:Mapframe --[[---------------------------------------------------------------------------- ##### Localisation (L10n) settings ##### Replace values in quotes ("") with localised values ----------------------------------------------------------------------------]]-- local L10n = {} local wb = mw.wikibase -- Modue dependencies local parser -- local copy of https://www.mediawiki.org/wiki/Module:WikitextParser loaded lazily -- "strict" should not be used, at least until all other modules which require this module are not using globals. -- Template parameter names (unnumbered versions only) -- Specify each as either a single string, or a table of strings (aliases) -- Aliases are checked left-to-right, i.e. `{ "one", "two" }` is equivalent to using `{{{one| {{{two|}}} }}}` in a template L10n.para = { display = "display", type = "type", id = { "id", "ids" }, from = "from", raw = "raw", title = "title", description = "description", strokeColor = { "stroke-color", "stroke-colour" }, strokeWidth = "stroke-width", strokeOpacity = "stroke-opacity", fill = "fill", fillOpacity = "fill-opacity", coord = { "coordinates", "coord" }, marker = "marker", markerColor = { "marker-color", "marker-colour" }, markerSize = "marker-size", radius = { "radius", "radius_m" }, radiusKm = "radius_km", radiusFt = "radius_ft", radiusMi = "radius_mi", edges = "edges", text = "text", icon = "icon", zoom = "zoom", frame = "frame", plain = "plain", frameWidth = "frame-width", frameHeight = "frame-height", frameCoordinates= { "frame-coordinates", "frame-coord" }, frameLatitude = { "frame-lat", "frame-latitude" }, frameLongitude = { "frame-long", "frame-longitude" }, frameAlign = "frame-align", switch = "switch", overlay = "overlay", overlayBorder = "overlay-border", overlayHorizontalAlignment = "overlay-horizontal-alignment", overlayVerticalAlignment = "overlay-vertical-alignment", overlayHorizontalOffset = "overlay-horizontal-offset", overlayVerticalOffset = "overlay-vertical-offset" } -- Names of other templates this module can extract coordinates from L10n.template = { templates = { -- The coord template, as well as templates with output that contains {{coord}} "Coord", "Coord/sandbox", "NRHP row", "NRHP row/sandbox", "WikidataCoord", "WikidataCoord/sandbox", "Wikidatacoord", "Wikidata coord" }, modules = { -- The coordinates module, as well as modules with output that contains {{coord}} "Coordinates", "Coordinates/sandbox", "WikidataCoord", "WikidataCoord/sandbox" } } -- Error messages L10n.error = { badDisplayPara = "Invalid display parameter", noCoords = "Coordinates must be specified on Wikidata or in |" .. ( type(L10n.para.coord)== 'table' and L10n.para.coord[1] or L10n.para.coord ) .. "=", wikidataCoords = "Coordinates not found on Wikidata", noCircleCoords = "Circle centre coordinates must be specified, or available via Wikidata", negativeRadius = "Circle radius must be a positive number", noRadius = "Circle radius must be specified", negativeEdges = "Circle edges must be a positive number", noSwitchPara = "Found only one switch value in |" .. ( type(L10n.para.switch)== 'table' and L10n.para.switch[1] or L10n.para.switch ) .. "=", oneSwitchLabel = "Found only one label in |" .. ( type(L10n.para.switch)== 'table' and L10n.para.switch[1] or L10n.para.switch ) .. "=", noSwitchLists = "At least one parameter must have a SWITCH: list", switchMismatches = "All SWITCH: lists must have the same number of values", -- "%s" and "%d" tokens will be replaced with strings and numbers when used oneSwitchValue = "Found only one switch value in |%s=", fewerSwitchLabels = "Found %d switch values but only %d labels in |" .. ( type(L10n.para.switch)== 'table' and L10n.para.switch[1] or L10n.para.switch ) .. "=", noNamedCoords = "No named coordinates found in %s" } -- Other strings L10n.str = { -- valid values for display parameter, e.g. (|display=inline) or (|display=title) or (|display=inline,title) or (|display=title,inline) inline = "inline", title = "title", dsep = ",", -- separator between inline and title (comma in the example above) -- valid values for type parameter line = "line", -- geoline feature (e.g. a road) shape = "shape", -- geoshape feature (e.g. a state or province) shapeInverse = "shape-inverse", -- geomask feature (the inverse of a geoshape) data = "data", -- geoJSON data page on Commons point = "point", -- single point feature (coordinates) circle = "circle", -- circular area around a point named = "named", -- all named coordinates in an article or section -- Keyword to indicate a switch list. Must NOT use the special characters ^$()%.[]*+-? switch = "SWITCH", -- valid values for icon, frame, and plain parameters affirmedWords = ' '..table.concat({ "add", "added", "affirm", "affirmed", "include", "included", "on", "true", "yes", "y" }, ' ')..' ', declinedWords = ' '..table.concat({ "decline", "declined", "exclude", "excluded", "false", "none", "not", "no", "n", "off", "omit", "omitted", "remove", "removed" }, ' ')..' ' } -- Default values for parameters L10n.defaults = { display = L10n.str.inline, text = "Map", frameWidth = "300", frameHeight = "200", frameAlign = "right", markerColor = "5E74F3", markerSize = nil, strokeColor = "#ff0000", strokeWidth = 6, edges = 32, -- number of edges used to approximate a circle overlayBorder = "1px solid white", overlayHorizontalAlignment = "right", overlayHorizontalOffset = "0", overlayVerticalAlignment = "bottom", overlayVerticalOffset = "0" } -- #### End of L10n settings #### --[[---------------------------------------------------------------------------- Utility methods ----------------------------------------------------------------------------]]-- local util = {} --[[ Looks up a parameter value based on the id (a key from the L10n.para table) and optionally a suffix, for parameters that can be suffixed (e.g. type2 is type with suffix 2). @param {table} args key-value pairs of parameter names and their values @param {string} param_id id for parameter name (key from the L10n.para table) @param {string} [suffix] suffix for parameter name @returns {string|nil} parameter value if found, or nil if not found ]]-- function util.getParameterValue(args, param_id, suffix) suffix = suffix or '' if type( L10n.para[param_id] ) ~= 'table' then return args[L10n.para[param_id]..suffix] end for _i, paramAlias in ipairs(L10n.para[param_id]) do if args[paramAlias..suffix] then return args[paramAlias..suffix] end end return nil end --[[ Trim whitespace from args, and remove empty args. Also fix control characters. @param {table} argsTable @returns {table} trimmed args table ]]-- function util.trimArgs(argsTable) local cleanArgs = {} for key, val in pairs(argsTable) do if type(key) == 'string' and type(val) == 'string' then val = val:match('^%s*(.-)%s*$') if val ~= '' then -- control characters inside json need to be escaped, but stripping them is simpler -- See also T214984 -- However, *don't* strip control characters from wikitext (text or description parameters) or you'll break strip markers -- Alternatively it might be better to only strip control char from raw parameter content if util.matchesParam('text', key) or util.matchesParam('description', key, key:gsub('^%D+(%d+)$', '%1') ) then cleanArgs[key] = val else cleanArgs[key] = val:gsub('%c',' ') end end else cleanArgs[key] = val end end return cleanArgs end --[[ Check if a parameter name matches an unlocalized parameter key @param {string} key - the unlocalized parameter name to search through @param {string} name - the localized parameter name to check @param {string|nil} - an optional suffix to apply to the value(s) from the localization key @returns {boolean} true if the name matches the parameter, false otherwise ]]-- function util.matchesParam(key, name, suffix) local param = L10n.para[key] suffix = suffix or '' if type(param) == 'table' then for _, v in pairs(param) do if (v .. suffix) == name then return true end end return false end return ((param .. suffix) == name) end --[[ Check if a value is affirmed (one of the values in L10n.str.affirmedWords) @param {string} val Value to be checked @returns {boolean} true if affirmed, false otherwise ]]-- function util.isAffirmed(val) if not(val) then return false end return string.find(L10n.str.affirmedWords, ' '..val..' ', 1, true ) and true or false end --[[ Check if a value is declined (one of the values in L10n.str.declinedWords) @param {string} val Value to be checked @returns {boolean} true if declined, false otherwise ]]-- function util.isDeclined(val) if not(val) then return false end return string.find(L10n.str.declinedWords , ' '..val..' ', 1, true ) and true or false end --[[ Check if the name of a template matches the known coord templates or wrappers (in L10n.template.templates and L10n.template.modules). The name is normalised when checked, so e.g. the names "Coord", "coord", and " Coord" all return true. @param {string} name @returns {boolean} true if it is a coord template or wrapper, false otherwise ]]-- function util.isCoordTemplateOrWrapper(name) name = mw.text.trim(name) local modName = mw.ustring.gsub(name, '#invoke:', '') local inputTitle = mw.title.new(modName, (name ~= modName) and 'Module' or 'Template') if not inputTitle then return false end -- Create (or reuse) mw.title objects for each known coord template/wrapper. -- Stored in L10n.template.title so that they don't need to be recreated -- each time this function is called if not L10n.template.titles then L10n.template.titles = {} for _, v in pairs(L10n.template.templates) do table.insert(L10n.template.titles, mw.title.new(v, 'Template')) end for _, v in pairs(L10n.template.modules) do table.insert(L10n.template.titles, mw.title.new(v, 'Module')) end end for _, templateTitle in pairs(L10n.template.titles) do if mw.title.equals(inputTitle, templateTitle) then return true end end return false end --[[ Recursively extract coord templates which have a name parameter. @param {string} wikitext @returns {table} table sequence of coord templates ]]-- function util.extractCoordTemplates(wikitext) local output = {} local templates = mw.ustring.gmatch(wikitext, '{%b{}}') for template in templates do local templateName = mw.ustring.match(template, '{{([^}|]+)') local nameParam = mw.ustring.match(template, "|%s*name%s*=%s*[^}|]+") if util.isCoordTemplateOrWrapper(templateName) then if nameParam then table.insert(output, template) end elseif mw.ustring.find(mw.ustring.sub(template, 2), "{{") then local subOutput = util.extractCoordTemplates(mw.ustring.sub(template, 2)) for _, t in pairs(subOutput) do table.insert(output, t) end end end -- ensure coords are not using title display for k, v in pairs(output) do output[k] = mw.ustring.gsub(v, "|%s*display%s*=[^|}]+", "|display=inline") end return output end --[[ Gets all named coordinates from a page or a section of a page. @param {string|nil} page Page name, or name#section, to get named coordinates from. If the name is omitted, i.e. #section or nil or empty string, then the current page will be used. @returns {table} sequence of {coord, name, description} tables where coord is the coordinates in a format suitable for #util.parseCoords, name is a string, and description is a string (coordinates in a format suitable for displaying to the reader). If for some reason the name can't be found, the description is nil and the name contains display-format coordinates. @throws {L10n.error.noNamedCoords} if no named coordinates are found. ]]-- function util.getNamedCoords(page) local parts = mw.text.split(page or "", "#", true) local name = parts[1] == "" and mw.title.getCurrentTitle().prefixedText or parts[1] local section = parts[2] local title = mw.title.new(name) if title.isRedirect then title = title.redirectTarget end local pageWikitext = title:getContent() if section then if parser == nil then -- load [[Module:WikitextParser]] lazily so it is only transcluded on pages that use it parser = require("Module:WikitextParser") end pageWikitext = parser.getSection(pageWikitext, section) or '' end local coordTemplates = util.extractCoordTemplates(pageWikitext) if #coordTemplates == 0 then error(string.format(L10n.error.noNamedCoords, page or name), 0) end local frame = mw.getCurrentFrame() local sep = "________" local expandedContent = frame:preprocess(table.concat(coordTemplates, sep)) local expandedTemplates = mw.text.split(expandedContent, sep) local namedCoords = {} for _, expandedTemplate in pairs(expandedTemplates) do local coord = mw.ustring.match(expandedTemplate, "<span class=\"geo%-dec\".->(.-)</span>") if coord then local coordname = ( -- name specified by a wrapper template, e.g [[Article|Name]] mw.ustring.match(expandedTemplate, "<span class=\"mapframe%-coord%-name\">(.-)</span>") or -- name passed into coord template mw.ustring.match(expandedTemplate, "<span class=\"fn org\">(.-)</span>") or -- default to the coordinates if the name can't be retrieved coord ) local description = coordname ~= coord and coord table.insert(namedCoords, { coord=mw.ustring.gsub(coord, "[° ]", "_"), name=coordname, description=description }) end end if #namedCoords == 0 then error(string.format(L10n.error.noNamedCoords, page or name), 0) end return namedCoords end --[[ Parse coordinate values from the params passed in a GeoHack url (such as //tools.wmflabs.org/geohack/geohack.php?pagename=Example&params=1_2_N_3_4_W_ or //tools.wmflabs.org/geohack/geohack.php?pagename=Example&params=1.23_S_4.56_E_ ) or non-url string in the same format (such as `1_2_N_3_4_W_` or `1.23_S_4.56_E_`) @param {string} coords string containing coordinates @returns {number, number} latitude, longitude ]]-- function util.parseCoords(coords) local coordsPatt if mw.ustring.find(coords, "params=", 1, true) then -- prevent false matches from page name, e.g. ?pagename=Lorem_S._Ipsum coordsPatt = 'params=([_%.%d]+[NS][_%.%d]+[EW])' else -- not actually a geohack url, just the same format coordsPatt = '[_%.%d]+[NS][_%.%d]+[EW]' end local parts = mw.text.split((mw.ustring.match(coords, coordsPatt) or ''), '_') local lat_d = tonumber(parts[1]) assert(lat_d, "Unable to get latitude from input '"..coords.."'.") local lat_m = tonumber(parts[2]) -- nil if coords are in decimal format local lat_s = lat_m and tonumber(parts[3]) -- nil if coords are either in decimal format or degrees and minutes only local lat = lat_d + (lat_m or 0)/60 + (lat_s or 0)/3600 if parts[#parts/2] == 'S' then lat = lat * -1 end local long_d = tonumber(parts[1+#parts/2]) assert(long_d, "Unable to get longitude from input '"..coords.."'.") local long_m = tonumber(parts[2+#parts/2]) -- nil if coords are in decimal format local long_s = long_m and tonumber(parts[3+#parts/2]) -- nil if coords are either in decimal format or degrees and minutes only local long = long_d + (long_m or 0)/60 + (long_s or 0)/3600 if parts[#parts] == 'W' then long = long * -1 end return lat, long end --[[ Get coordinates from a Wikidata item @param {string} item_id Wikidata item id (Q number) @returns {number, number} latitude, longitude @throws {L10n.error.noCoords} if item_id is invalid or the item does not exist @throws {L10n.error.wikidataCoords} if the the item does not have a P625 statement (coordinates), or it is set to "no value" ]]-- function util.wikidataCoords(item_id) if not (item_id and wb.isValidEntityId(item_id) and wb.entityExists(item_id)) then error(L10n.error.noCoords, 0) end local coordStatements = wb.getBestStatements(item_id, 'P625') if not coordStatements or #coordStatements == 0 then error(L10n.error.wikidataCoords, 0) end local hasNoValue = ( coordStatements[1].mainsnak and (coordStatements[1].mainsnak.snaktype == 'novalue' or coordStatements[1].mainsnak.snaktype == 'somevalue') ) if hasNoValue then error(L10n.error.wikidataCoords, 0) end local wdCoords = coordStatements[1]['mainsnak']['datavalue']['value'] return tonumber(wdCoords['latitude']), tonumber(wdCoords['longitude']) end --[[ Creates a polygon that approximates a circle @param {number} lat Latitude @param {number} long Longitude @param {number} radius Radius in metres @param {number} n Number of edges for the polygon @returns {table} sequence of {latitude, longitude} table sequences, where latitude and longitude are both numbers ]]-- function util.circleToPolygon(lat, long, radius, n) -- n is number of edges -- Based on https://github.com/gabzim/circle-to-polygon, ISC licence local function offset(cLat, cLon, distance, bearing) local lat1 = math.rad(cLat) local lon1 = math.rad(cLon) local dByR = distance / 6378137 -- distance divided by 6378137 (radius of the earth) wgs84 local offet_lat = math.asin( math.sin(lat1) * math.cos(dByR) + math.cos(lat1) * math.sin(dByR) * math.cos(bearing) ) local offet_lon = lon1 + math.atan2( math.sin(bearing) * math.sin(dByR) * math.cos(lat1), math.cos(dByR) - math.sin(lat1) * math.sin(offet_lat) ) return {math.deg(offet_lon), math.deg(offet_lat)} end local coordinates = {}; local i = 0; while i < n do table.insert(coordinates, offset(lat, long, radius, (2*math.pi*i*-1)/n) ) i = i + 1 end table.insert(coordinates, offset(lat, long, radius, 0)) return coordinates end --[[ Get the number of key-value pairs in a table, which might not be a sequence. @param {table} t @returns {number} count of key-value pairs ]]-- function util.tableCount(t) local count = 0 for k, v in pairs(t) do count = count + 1 end return count end --[[ For a table where the values are all tables, returns either the util.tableCount of the subtables if they are all the same, or nil if they are not all the same. @param {table} t @returns {number|nil} count of key-value pairs of subtable, or nil if subtables have different counts ]]-- function util.subTablesCount(t) local count = nil for k, v in pairs(t) do if count == nil then count = util.tableCount(v) elseif count ~= util.tableCount(v) then return nil end end return count end --[[ Splits a list into a table sequence. The items in the list may be separated by commas, or by semicolons (if items may contain commas), or by "###" (if items may contain semicolons). @param {string} listString @returns {table} sequence of list items ]]-- function util.tableFromList(listString) if type(listString) ~= "string" or listString == "" then return nil end local separator = (mw.ustring.find(listString, "###", 0, true ) and "###") or (mw.ustring.find(listString, ";", 0, true ) and ";") or "," local pattern = "%s*"..separator.."%s*" return mw.text.split(listString, pattern) end -- Boolean in outer scope indicating if Kartographer should be able to -- automatically calculate coordinates (see phab:T227402) local coordsDerivedFromFeatures = false; --[[---------------------------------------------------------------------------- Make methods: These take in a table of arguments, and return either a string or a table to be used in the eventual output. ----------------------------------------------------------------------------]]-- local make = {} --[[ Makes content to go inside the maplink or mapframe tag. @param {table} args @returns {string} tag content ]]-- function make.content(args) if util.getParameterValue(args, 'raw') then coordsDerivedFromFeatures = true -- Kartographer should be able to automatically calculate coords from raw geoJSON return util.getParameterValue(args, 'raw') end local content = {} local argsExpanded = {} for k, v in pairs(args) do local index = string.match( k, '^[^0-9]+([0-9]*)$' ) if index ~= nil then local indexNumber if index ~= '' then indexNumber = tonumber(index) else indexNumber = 1 end if argsExpanded[indexNumber] == nil then argsExpanded[indexNumber] = {} end argsExpanded[indexNumber][ string.gsub(k, index, '') ] = v end end for contentIndex, contentArgs in pairs(argsExpanded) do local argType = util.getParameterValue(contentArgs, "type") -- Kartographer automatically calculates coords if geolines/shapes are used (T227402) if not coordsDerivedFromFeatures then coordsDerivedFromFeatures = ( argType == L10n.str.line or argType == L10n.str.shape ) and true or false end if argType == L10n.str.named then local namedCoords = util.getNamedCoords(util.getParameterValue(contentArgs, "from")) local typeKey = type(L10n.para.type) == "table" and L10n.para.type[1] or L10n.para.type local coordKey = type(L10n.para.coord) == "table" and L10n.para.coord[1] or L10n.para.coord local titleKey = type(L10n.para.title) == "table" and L10n.para.title[1] or L10n.para.title local descKey = type(L10n.para.description) == "table" and L10n.para.description[1] or L10n.para.description for _, namedCoord in pairs(namedCoords) do contentArgs[typeKey] = "point" contentArgs[coordKey] = namedCoord.coord contentArgs[titleKey] = namedCoord.name contentArgs[descKey] = namedCoord.description content[#content+1] = make.contentJson(contentArgs) end else content[#content + 1] = make.contentJson(contentArgs) end end --Single item, no array needed if #content==1 then return content[1] end --Multiple items get placed in a FeatureCollection local contentArray = '[\n' .. table.concat( content, ',\n') .. '\n]' return contentArray end --[[ Make coordinates from the coord arg, or the id arg, or the current page's Wikidata item. @param {table} args @param {boolean} [plainOutput] @returns {Mixed} Either: {number, number} latitude, longitude if plainOutput is true; or {table} table sequence of longitude, then latitude (gives the required format for GeoJSON when encoded) ]]-- function make.coords(args, plainOutput) local coords, lat, long local frame = mw.getCurrentFrame() if util.getParameterValue(args, 'coord') then coords = frame:preprocess( util.getParameterValue(args, 'coord') ) lat, long = util.parseCoords(coords) else lat, long = util.wikidataCoords(util.getParameterValue(args, 'id') or wb.getEntityIdForCurrentPage()) end if plainOutput then return lat, long end return {[0] = long, [1] = lat} end --[[ Makes a table of coordinates that approximate a circle. @param {table} args @returns {table} sequence of {latitude, longitude} table sequences, where latitude and longitude are both numbers @throws {L10n.error.noCircleCoords} if centre coordinates are not specified @throws {L10n.error.noRadius} if radius is not specified @throws {L10n.error.negativeRadius} if radius is negative or zero @throws {L10n.error.negativeEdges} if edges is negative or zero ]]-- function make.circleCoords(args) local lat, long = make.coords(args, true) local radius = util.getParameterValue(args, 'radius') if not radius then radius = util.getParameterValue(args, 'radiusKm') and tonumber(util.getParameterValue(args, 'radiusKm'))*1000 if not radius then radius = util.getParameterValue(args, 'radiusMi') and tonumber(util.getParameterValue(args, 'radiusMi'))*1609.344 if not radius then radius = util.getParameterValue(args, 'radiusFt') and tonumber(util.getParameterValue(args, 'radiusFt'))*0.3048 end end end local edges = util.getParameterValue(args, 'edges') or L10n.defaults.edges if not lat or not long then error(L10n.error.noCircleCoords, 0) elseif not radius then error(L10n.error.noRadius, 0) elseif tonumber(radius) <= 0 then error(L10n.error.negativeRadius, 0) elseif tonumber(edges) <= 0 then error(L10n.error.negativeEdges, 0) end return util.circleToPolygon(lat, long, radius, tonumber(edges)) end --[[ Makes JSON data for a feature @param contentArgs args for this feature. Keys must be the non-suffixed version of the parameter names, i.e. use type, stroke, fill,... rather than type3, stroke3, fill3,... @returns {string} JSON encoded data ]]-- function make.contentJson(contentArgs) local data = {} if util.getParameterValue(contentArgs, 'type') == L10n.str.point or util.getParameterValue(contentArgs, 'type') == L10n.str.circle then local isCircle = util.getParameterValue(contentArgs, 'type') == L10n.str.circle data.type = "Feature" data.geometry = { type = isCircle and "LineString" or "Point", coordinates = isCircle and make.circleCoords(contentArgs) or make.coords(contentArgs) } data.properties = { title = util.getParameterValue(contentArgs, 'title') or mw.getCurrentFrame():getParent():getTitle() } if isCircle then -- TODO: This is very similar to below, should be extracted into a function data.properties.stroke = util.getParameterValue(contentArgs, 'strokeColor') or L10n.defaults.strokeColor data.properties["stroke-width"] = tonumber(util.getParameterValue(contentArgs, 'strokeWidth')) or L10n.defaults.strokeWidth local strokeOpacity = util.getParameterValue(contentArgs, 'strokeOpacity') if strokeOpacity then data.properties['stroke-opacity'] = tonumber(strokeOpacity) end local fill = util.getParameterValue(contentArgs, 'fill') if fill then data.properties.fill = fill local fillOpacity = util.getParameterValue(contentArgs, 'fillOpacity') data.properties['fill-opacity'] = fillOpacity and tonumber(fillOpacity) or 0.6 end else -- is a point local markerSymbol = util.getParameterValue(contentArgs, 'marker') or L10n.defaults.marker -- allow blank to be explicitly specified, for overriding infoboxes or other templates with a default value if markerSymbol ~= "blank" then data.properties["marker-symbol"] = markerSymbol end data.properties["marker-color"] = util.getParameterValue(contentArgs, 'markerColor') or L10n.defaults.markerColor data.properties["marker-size"] = util.getParameterValue(contentArgs, 'markerSize') or L10n.defaults.markerSize end else data.type = "ExternalData" if util.getParameterValue(contentArgs, 'type') == L10n.str.data or util.getParameterValue(contentArgs, 'from') then data.service = "page" elseif util.getParameterValue(contentArgs, 'type') == L10n.str.line then data.service = "geoline" elseif util.getParameterValue(contentArgs, 'type') == L10n.str.shape then data.service = "geoshape" elseif util.getParameterValue(contentArgs, 'type') == L10n.str.shapeInverse then data.service = "geomask" end if util.getParameterValue(contentArgs, 'id') or (not (util.getParameterValue(contentArgs, 'from')) and wb.getEntityIdForCurrentPage()) then data.ids = util.getParameterValue(contentArgs, 'id') or wb.getEntityIdForCurrentPage() else data.title = util.getParameterValue(contentArgs, 'from') end data.properties = { stroke = util.getParameterValue(contentArgs, 'strokeColor') or L10n.defaults.strokeColor, ["stroke-width"] = tonumber(util.getParameterValue(contentArgs, 'strokeWidth')) or L10n.defaults.strokeWidth } local strokeOpacity = util.getParameterValue(contentArgs, 'strokeOpacity') if strokeOpacity then data.properties['stroke-opacity'] = tonumber(strokeOpacity) end local fill = util.getParameterValue(contentArgs, 'fill') if fill and (data.service == "geoshape" or data.service == "geomask") then data.properties.fill = fill local fillOpacity = util.getParameterValue(contentArgs, 'fillOpacity') if fillOpacity then data.properties['fill-opacity'] = tonumber(fillOpacity) end end end data.properties.title = util.getParameterValue(contentArgs, 'title') or mw.title.getCurrentTitle().text if util.getParameterValue(contentArgs, 'description') then data.properties.description = util.getParameterValue(contentArgs, 'description') end return mw.text.jsonEncode(data) end --[[ Makes attributes for the maplink or mapframe tag. @param {table} args @param {boolean} [isTitle] Tag is to be displayed in the title of page rather than inline @returns {table<string,string>} key-value pairs of attribute names and values ]]-- function make.tagAttribs(args, isTitle) local attribs = {} if util.getParameterValue(args, 'zoom') then attribs.zoom = util.getParameterValue(args, 'zoom') end if util.isDeclined(util.getParameterValue(args, 'icon')) then attribs.class = "no-icon" end if util.getParameterValue(args, 'type') == L10n.str.point and not coordsDerivedFromFeatures then local lat, long = make.coords(args, 'plainOutput') attribs.latitude = tostring(lat) attribs.longitude = tostring(long) end if util.isAffirmed(util.getParameterValue(args, 'frame')) and not(isTitle) then attribs.width = util.getParameterValue(args, 'frameWidth') or L10n.defaults.frameWidth attribs.height = util.getParameterValue(args, 'frameHeight') or L10n.defaults.frameHeight if util.getParameterValue(args, 'frameCoordinates') then local frameLat, frameLong = util.parseCoords(util.getParameterValue(args, 'frameCoordinates')) attribs.latitude = frameLat attribs.longitude = frameLong else if util.getParameterValue(args, 'frameLatitude') then attribs.latitude = util.getParameterValue(args, 'frameLatitude') end if util.getParameterValue(args, 'frameLongitude') then attribs.longitude = util.getParameterValue(args, 'frameLongitude') end end if not attribs.latitude and not attribs.longitude and not coordsDerivedFromFeatures then local success, lat, long = pcall(util.wikidataCoords, util.getParameterValue(args, 'id') or wb.getEntityIdForCurrentPage()) if success then attribs.latitude = tostring(lat) attribs.longitude = tostring(long) end end if util.getParameterValue(args, 'frameAlign') then attribs.align = util.getParameterValue(args, 'frameAlign') end if util.isAffirmed(util.getParameterValue(args, 'plain')) then attribs.frameless = "1" else attribs.text = util.getParameterValue(args, 'text') or L10n.defaults.text end else attribs.text = util.getParameterValue(args, 'text') or L10n.defaults.text end return attribs end --[[ Makes maplink wikitext that will be located in the top-right of the title of the page (the same place where coords with |display=title are positioned). @param {table} args @param {string} tagContent Content for the maplink tag @returns {string} ]]-- function make.titleOutput(args, tagContent) local titleTag = mw.text.tag('maplink', make.tagAttribs(args, true), tagContent) local spanAttribs = { style = "font-size: small;", id = "mapframe-coordinates" } local indicatorContent = mw.text.tag('span', spanAttribs, titleTag) return mw.getCurrentFrame():extensionTag { name = "indicator", content = indicatorContent, args = { name = "zzz-mapframe" --zzz: show as last indicator } } end --[[ Makes maplink or mapframe wikitext that will be located inline. @param {table} args @param {string} tagContent Content for the maplink tag @returns {string} ]]-- function make.inlineOutput(args, tagContent) local tagName = 'maplink' if util.getParameterValue(args, 'frame') then tagName = 'mapframe' end return mw.text.tag(tagName, make.tagAttribs(args), tagContent) end --[[ Makes the HTML required for the swicther to work, including the templatestyles tag. @param {table} params table sequence of {map, label} tables @param {string} params{}.map Wikitext for mapframe map @param {string} params{}.label Label text for swicther option @param {table} options @param {string} options.alignment "left" or "center" or "right" @param {boolean} options.isThumbnail Display in a thumbnail @param {string} options.width Width of frame, e.g. "200" @param {string} [options.caption] Caption wikitext for thumnail @retruns {string} swicther HTML ]]-- function make.switcherHtml(params, options) options = options or {} local frame = mw.getCurrentFrame() local styles = frame:extensionTag{ name = "templatestyles", args = {src = "Template:Maplink/styles-multi.css"} } local container = mw.html.create("div") :addClass("switcher-container") :addClass("mapframe-multi-container") if options.alignment == "left" or options.alignment == "right" then container:addClass("float"..options.alignment) else -- alignment is "center" container:addClass("center") end for i = 1, #params do container :tag("div") :wikitext(params[i].map) :tag("span") :addClass("switcher-label") :css("display", "none") :wikitext(mw.text.trim(params[i].label)) end if not options.isThumbnail then return styles .. tostring(container) end local classlist = container:getAttr("class") classlist = mw.ustring.gsub(classlist, "%a*"..options.alignment, "") container:attr("class", classlist) local outerCountainer = mw.html.create("div") :addClass("mapframe-multi-outer-container") :addClass("mw-kartographer-container") :addClass("thumb") if options.alignment == "left" or options.alignment == "right" then outerCountainer:addClass("float"..options.alignment) else -- alignment is "center" outerCountainer :addClass("tnone") :addClass("center") end outerCountainer :tag("div") :addClass("thumbinner") :css("width", options.width.."px") :node(container) :node(options.caption and mw.html.create("div") :addClass("thumbcaption") :wikitext(options.caption) ) return styles .. tostring(outerCountainer) end --[[ Makes the HTML required for an overlay map to work tag. @param {string} overlayMap wikitext for the overlay map @param {string} baseMap wikitext for the base map @param {table} options various styling/display options @param {string} options.align "left" or "center" or "right" @param {string|number} options.width Width of the base map, e.g. "300" @param {string|number} options.width Height of the base map, e.g. "200" @param {string} options.border Border style for the overlayed map, e.g. "1px solid white" @param {string} options.horizontalAlignment Horizontal alignment for overlay map, "left" or "right" @param {string|number} options.horizontalOffset Horizontal offset in pixels from the alignment edge, e.g "10" @param {string} options.verticalAlignment Vertical alignment for overlay map, "top" or "bottom" @param {string|number} options.verticalOffset Vertical offset in pixels from the alignment edge, e.g. is "10" @param {boolean} options.isThumbnail Display in a thumbnail @param {string} [options.caption] Caption wikitext for thumnail @retruns {string} HTML for basemap with overlay ]]-- function make.overlayHtml(overlayMap, baseMap, options) options = options or {} local containerFloatClass = "float"..(options.align or "none") if options.align == "center" then containerFloatClass = "center" end local containerStyle = { position = "relative", width = options.width .. "px", height = options.height .. "px", overflow = "hidden" -- mobile/minerva tends to add scrollbars for a couple of pixels } if options.align == "center" then containerStyle["margin-left"] = "auto" containerStyle["margin-right"] = "auto" end local container = mw.html.create("div") :addClass("mapframe-withOverlay-container") :addClass(containerFloatClass) :addClass("noresize") :css(containerStyle) local overlayStyle = { position = "absolute", ["z-index"] = "1", border = options.border or "1px solid white" } if options.horizontalAlignment == "right" then overlayStyle.right = options.horizontalOffset .. "px" else overlayStyle.left = options.horizontalOffset .. "px" end if options.verticalAlignment == "bottom" then overlayStyle.bottom = options.verticalOffset .. "px" else overlayStyle.top = options.verticalOffset .. "px" end local overlayDiv = mw.html.create("div") :css(overlayStyle) :wikitext(overlayMap) container :node(overlayDiv) :wikitext(baseMap) if not options.isThumbnail then return tostring(container) end local classlist = container:getAttr("class") classlist = mw.ustring.gsub(classlist, "%a*"..options.align, "") container:attr("class", classlist) local outerCountainer = mw.html.create("div") :addClass("mapframe-withOverlay-outerContainer") :addClass("mw-kartographer-container") :addClass("thumb") if options.align == "left" or options.align == "right" then outerCountainer:addClass("t"..options.align) else -- alignment is "center" outerCountainer :addClass("tnone") :addClass("center") end outerCountainer :tag("div") :addClass("thumbinner") :css("width", options.width.."px") :node(container) :node(options.caption and mw.html.create("div") :addClass("thumbcaption") :wikitext(options.caption) ) return tostring(outerCountainer) end --[[---------------------------------------------------------------------------- Package to be exported, i.e. methods which will available to templates and other modules. ----------------------------------------------------------------------------]]-- local p = {} -- Entry point for templates function p.main(frame) local parent = frame.getParent(frame) -- Check for overlay option local overlay = util.getParameterValue(parent.args, 'overlay') local hasOverlay = overlay and mw.text.trim(overlay) ~= "" -- Check for switch option local switch = util.getParameterValue(parent.args, 'switch') local isMulti = switch and mw.text.trim(switch) ~= "" -- Create output by choosing method to suit options local output if hasOverlay then output = p.withOverlay(parent.args) elseif isMulti then output = p.multi(parent.args) else output = p._main(parent.args) end -- Preprocess output before returning it return frame:preprocess(output) end -- Entry points for modules function p._main(_args) local args = util.trimArgs(_args) local tagContent = make.content(args) local display = mw.text.split(util.getParameterValue(args, 'display') or L10n.defaults.display, '%s*' .. L10n.str.dsep .. '%s*') local displayInTitle = display[1] == L10n.str.title or display[2] == L10n.str.title local displayInline = display[1] == L10n.str.inline or display[2] == L10n.str.inline local output if displayInTitle and displayInline then output = make.titleOutput(args, tagContent) .. make.inlineOutput(args, tagContent) elseif displayInTitle then output = make.titleOutput(args, tagContent) elseif displayInline then output = make.inlineOutput(args, tagContent) else error(L10n.error.badDisplayPara) end return output end function p.multi(_args) local args = util.trimArgs(_args) if not args[L10n.para.switch] then error(L10n.error.noSwitchPara, 0) end local switchParamValue = util.getParameterValue(args, 'switch') local switchLabels = util.tableFromList(switchParamValue) if #switchLabels == 1 then error(L10n.error.oneSwitchLabel, 0) end local mapframeArgs = {} local switchParams = {} for name, val in pairs(args) do -- Copy to mapframeArgs, if not the switch labels or a switch parameter if val ~= switchParamValue and not string.match(val, "^"..L10n.str.switch..":") then mapframeArgs[name] = val end -- Check if this is a param to switch. If so, store the name and switch -- values in switchParams table. local switchList = string.match(val, "^"..L10n.str.switch..":(.+)") if switchList ~= nil then local values = util.tableFromList(switchList) if #values == 1 then error(string.format(L10n.error.oneSwitchValue, name), 0) end switchParams[name] = values end end if util.tableCount(switchParams) == 0 then error(L10n.error.noSwitchLists, 0) end local switchCount = util.subTablesCount(switchParams) if not switchCount then error(L10n.error.switchMismatches, 0) elseif switchCount > #switchLabels then error(string.format(L10n.error.fewerSwitchLabels, switchCount, #switchLabels), 0) end -- Ensure a plain frame will be used (thumbnail will be built by the -- make.switcherHtml function if required, so that switcher options are -- inside the thumnail) mapframeArgs.plain = "yes" local switcher = {} for i = 1, switchCount do local label = switchLabels[i] for name, values in pairs(switchParams) do mapframeArgs[name] = values[i] end table.insert(switcher, { map = p._main(mapframeArgs), label = "Show "..label }) end return make.switcherHtml(switcher, { alignment = args["frame-align"] or "right", isThumbnail = (args.frame and not args.plain) and true or false, width = args["frame-width"] or L10n.defaults.frameWidth, caption = args.text }) end function p.withOverlay(_args) -- Get and trim wikitext for overlay map local overlayMap = _args.overlay if type(overlayMap) == 'string' then overlayMap = overlayMap:match('^%s*(.-)%s*$') end local isThumbnail = (util.getParameterValue(_args, "frame") and not util.getParameterValue(_args, "plain")) and true or false -- Get base map using the _main function, as a plain map local args = util.trimArgs(_args) args.plain = "yes" local basemap = p._main(args) -- Extract overlay options from args local overlayOptions = { width = util.getParameterValue(args, "frameWidth") or L10n.defaults.frameWidth, height = util.getParameterValue(args, "frameHeight") or L10n.defaults.frameHeight, align = util.getParameterValue(args, "frameAlign") or L10n.defaults.frameAlign, border = util.getParameterValue(args, "overlayBorder") or L10n.defaults.overlayBorder, horizontalAlignment = util.getParameterValue(args, "overlayHorizontalAlignment") or L10n.defaults.overlayHorizontalAlignment, horizontalOffset = util.getParameterValue(args, "overlayHorizontalOffset") or L10n.defaults.overlayHorizontalOffset, verticalAlignment = util.getParameterValue(args, "overlayVerticalAlignment") or L10n.defaults.overlayVerticalAlignment, verticalOffset = util.getParameterValue(args, "overlayVerticalOffset") or L10n.defaults.overlayVerticalOffset, isThumbnail = isThumbnail, caption = util.getParameterValue(args, "text") or L10n.defaults.text } -- Make the HTML for the overlaying maps return make.overlayHtml(overlayMap, basemap, overlayOptions) end -- Entry point for testcase tests p.test = util return p cbg20zhedgvi7tds8motk323r37gona ಮೋಡ್ಯೂಲ್:Transclusion count/data/I 828 9814 373881 372957 2026-10-18T05:09:56Z en>Ahechtbot 0 [[Wikipedia:BOT|Bot]]: Updated page. 373881 Scribunto text/plain return { ["IAST"] = 6300, ["IA_SCOTUS_URL"] = 3300, ["IBDB_name"] = 9800, ["ICD10"] = 5000, ["ICD9"] = 4400, ["ICS"] = 3500, ["ICS_flag"] = 3500, ["IDN"] = 3800, ["IMDb_episode"] = 11000, ["IMDb_episodes"] = 4300, ["IMDb_name"] = 173000, ["IMDb_title"] = 212000, ["IMO_Number"] = 4500, ["IMSLP"] = 9200, ["INA"] = 2400, ["IND"] = 8800, ["INR"] = 6600, ["INRConvert"] = 6800, ["INRConvert/CurrentRate"] = 6700, ["INRConvert/USD"] = 6700, ["INRConvert/out"] = 6700, ["IOBDB_name"] = 2100, ["IP"] = 2800, ["IPA"] = 183000, ["IPA_audio_link"] = 5300, ["IPA_link"] = 5100, ["IPAblink"] = 2600, ["IPAc-cmn"] = 2800, ["IPAc-en"] = 56000, ["IPAc-pl"] = 51000, ["IPSummary"] = 82000, ["IP_summary"] = 83000, ["IPtalk"] = 18000, ["IPuser"] = 7600, ["IPvandal"] = 2800, ["IRC"] = 7200, ["IRI"] = 2600, ["IRL"] = 6100, ["IRN"] = 4000, ["ISBN"] = 475000, ["ISBN?"] = 2400, ["ISBNT"] = 46000, ["ISBN_missing"] = 3200, ["ISFDB_name"] = 4300, ["ISFDB_title"] = 5100, ["ISL"] = 2300, ["ISO_15924/script-example-character"] = 3100, ["ISO_15924/wp-article"] = 3100, ["ISO_15924/wp-article/format"] = 3100, ["ISO_15924/wp-article/label"] = 3000, ["ISO_3166_code"] = 277000, ["ISO_3166_name"] = 16000, ["ISO_639_name"] = 28000, ["ISP"] = 3700, ["ISR"] = 6100, ["ISSN"] = 12000, ["ISSN_link"] = 33000, ["ISTAT"] = 8100, ["ISU_figure_skater"] = 2300, ["ITA"] = 20000, ["ITF"] = 6800, ["ITF_profile"] = 2600, ["ITIS"] = 5900, ["ITN_talk"] = 13000, ["ITN_talk/date"] = 13000, ["IUCN_banner"] = 15000, ["I_sup"] = 4900, ["Ice_hockey_box"] = 2000, ["Ice_hockey_stats"] = 20000, ["Icehockeystats"] = 11000, ["Icelandic_name"] = 2200, ["Icon"] = 679000, ["If"] = 438000, ["If_all"] = 8000, ["If_autoconfirmed"] = 2200, ["If_between"] = 4800, ["If_both"] = 210000, ["If_dark"] = 4100, ["If_dark/styles.css"] = 4100, ["If_either"] = 22000, ["If_empty"] = 6800000, ["If_first_display_both"] = 122000, ["If_in_category"] = 164000, ["If_in_page"] = 23000, ["If_last_display_both"] = 38000, ["If_mobile"] = 2100, ["If_mobile/styles.css"] = 4400, ["If_preview"] = 66000, ["If_then_show"] = 89000, ["Ifempty"] = 949000, ["Ifeq"] = 84000, ["Iferror_then_show"] = 4000, ["Ifexist_not_redirect"] = 1990000, ["Ifnotempty"] = 19000, ["Ifnoteq_then_show"] = 2300, ["Ifnumber"] = 78000, ["Ifsubst"] = 1030000, ["Ih"] = 8100, ["Ill"] = 262000, ["Illm"] = 5800, ["Image_frame"] = 6200, ["Image_label"] = 4700, ["Image_label_begin"] = 4100, ["Image_label_end"] = 4100, ["Image_label_small"] = 2600, ["Image_needed"] = 4400, ["Image_other"] = 191000, ["Image_requested"] = 134000, ["Image_requested/Category_helper"] = 124000, ["Imbox"] = 1000000, ["Imdb_name"] = 5300, ["Imdb_title"] = 2900, ["Importance"] = 15000, ["Importance/colour"] = 30000, ["Importance_mask"] = 632000, ["Improve_categories"] = 7000, ["Improve_documentation"] = 4300, ["Improve_plot"] = 4200, ["In_class"] = 5600, ["In_lang"] = 390000, ["In_progress"] = 3800, ["In_string"] = 310000, ["In_title"] = 31000, ["Inactive_userpage_blanked"] = 3600, ["Inaturalist_taxon"] = 3800, ["Include-USGov"] = 24000, ["Incomplete_list"] = 24000, ["Inconclusive"] = 2400, ["Increase"] = 62000, ["Incumbent_pope"] = 4400, ["Indent"] = 2400, ["Indented_plain_list"] = 2800, ["Indented_plainlist"] = 2500, ["Independent_sources"] = 10000, ["IndexFungorum"] = 2100, ["Indian_English"] = 5000, ["Indian_railway_code"] = 3600, ["Indian_rupee"] = 12000, ["Inflation"] = 28000, ["Inflation-fn"] = 5900, ["Inflation-year"] = 4300, ["Inflation/IN/startyear"] = 6700, ["Inflation/UK"] = 5600, ["Inflation/UK/dataset"] = 5600, ["Inflation/UK/startyear"] = 5600, ["Inflation/US"] = 16000, ["Inflation/US-GDP"] = 3100, ["Inflation/US-GDP/dataset"] = 3100, ["Inflation/US-GDP/startyear"] = 3100, ["Inflation/US/dataset"] = 16000, ["Inflation/US/startyear"] = 16000, ["Inflation/fn"] = 7600, ["Inflation/year"] = 34000, ["Info"] = 5600, ["Infobox"] = 3440000, ["Infobox/Columns"] = 3300, ["Infobox/mobileviewfix.css"] = 177000, ["Infobox/styles-images.css"] = 21000, ["Infobox3cols"] = 28000, ["Infobox_AFL_biography"] = 15000, ["Infobox_Athletics_Championships"] = 3400, ["Infobox_Australian_place"] = 15000, ["Infobox_Australian_place/styles.css"] = 15000, ["Infobox_Australian_place/table"] = 11000, ["Infobox_COA_wide"] = 3700, ["Infobox_Canada_electoral_district"] = 2700, ["Infobox_Chinese"] = 24000, ["Infobox_Chinese/Chinese"] = 3200, ["Infobox_Chinese/Footer"] = 7200, ["Infobox_Chinese/Header"] = 7200, ["Infobox_Christian_leader"] = 23000, ["Infobox_French_commune"] = 38000, ["Infobox_French_subdivision"] = 2200, ["Infobox_Gaelic_games_biography"] = 5500, ["Infobox_Gaelic_games_player"] = 3000, ["Infobox_German_place"] = 14000, ["Infobox_Grand_Prix_race_report"] = 2200, ["Infobox_Greece_place"] = 3600, ["Infobox_Greek_Dimos"] = 2900, ["Infobox_Hindu_temple"] = 2900, ["Infobox_Indian_constituency"] = 5800, ["Infobox_Indian_constituency/defaultdata"] = 5800, ["Infobox_Italian_comune"] = 8100, ["Infobox_Korean"] = 2100, ["Infobox_Korean/auto"] = 15000, ["Infobox_Korean/auto/categories"] = 15000, ["Infobox_Korean/base"] = 2100, ["Infobox_Korean/base/auto"] = 18000, ["Infobox_Korean/categories"] = 2100, ["Infobox_Korean_name"] = 2100, ["Infobox_Korean_name/auto"] = 14000, ["Infobox_Korean_television_name"] = 3500, ["Infobox_NASCAR_driver"] = 2400, ["Infobox_NASCAR_race_report"] = 2800, ["Infobox_NCAA_basketball_conference_tournament"] = 2100, ["Infobox_NCAA_team_season"] = 11000, ["Infobox_NFL_biography"] = 27000, ["Infobox_NFL_team_season"] = 2300, ["Infobox_NRHP"] = 74000, ["Infobox_NRHP/conv"] = 19000, ["Infobox_NRHP/pushpinmap2region"] = 68000, ["Infobox_Olympic_event"] = 8100, ["Infobox_Olympic_event/event_link"] = 8100, ["Infobox_Olympic_event/games_text"] = 8100, ["Infobox_Pan_American_Games_event"] = 2900, ["Infobox_Paralympic_event"] = 2900, ["Infobox_Paralympic_event/games_text"] = 2900, ["Infobox_Romanian_subdivision"] = 3200, ["Infobox_Russian_district"] = 2100, ["Infobox_Russian_inhabited_locality"] = 4700, ["Infobox_Russian_inhabited_locality/PosMapFS"] = 4200, ["Infobox_Russian_inhabited_locality/federal_subject"] = 4700, ["Infobox_SCOTUS_case"] = 4600, ["Infobox_SSSI"] = 2000, ["Infobox_Site_of_Special_Scientific_Interest"] = 2100, ["Infobox_Slovak_place"] = 3000, ["Infobox_Swiss_town"] = 3000, ["Infobox_Switzerland_municipality"] = 3000, ["Infobox_Turkey_place"] = 20000, ["Infobox_U.S._county"] = 3000, ["Infobox_U.S._county/district"] = 3000, ["Infobox_U.S._legislation"] = 2300, ["Infobox_UK_constituency"] = 2200, ["Infobox_UK_constituency/year"] = 2200, ["Infobox_UK_legislation"] = 6500, ["Infobox_UK_place"] = 27000, ["Infobox_UK_place/NoDialCode"] = 8300, ["Infobox_UK_place/NoPostCode"] = 3700, ["Infobox_UK_place/area"] = 2800, ["Infobox_UK_place/dens"] = 2300, ["Infobox_UK_place/dist"] = 2800, ["Infobox_UK_place/local"] = 27000, ["Infobox_UK_place/styles.css"] = 27000, ["Infobox_UNESCO_World_Heritage_Site"] = 2100, ["Infobox_UN_resolution"] = 2300, ["Infobox_US_Supreme_Court_case"] = 4800, ["Infobox_US_Supreme_Court_case/courts"] = 4800, ["Infobox_United_States_legislative_district"] = 2800, ["Infobox_United_States_legislative_district/representative"] = 2800, ["Infobox_Wikipedia_user"] = 12000, ["Infobox_academic"] = 27000, ["Infobox_aircraft"] = 13000, ["Infobox_aircraft/styles.css"] = 14000, ["Infobox_aircraft_occurrence"] = 2900, ["Infobox_airline"] = 4800, ["Infobox_airline/styles.css"] = 4800, ["Infobox_airport"] = 14000, ["Infobox_airport/datatable"] = 13000, ["Infobox_airport/styles.css"] = 14000, ["Infobox_album"] = 169000, ["Infobox_album/color"] = 209000, ["Infobox_album/link"] = 169000, ["Infobox_anatomy"] = 4500, ["Infobox_animanga/Footer"] = 7800, ["Infobox_animanga/Header"] = 7800, ["Infobox_animanga/Print"] = 6700, ["Infobox_animanga/Video"] = 5100, ["Infobox_architect"] = 4500, ["Infobox_artist"] = 35000, ["Infobox_artist_discography"] = 6500, ["Infobox_artwork"] = 16000, ["Infobox_automobile"] = 9300, ["Infobox_award"] = 16000, ["Infobox_badminton_player"] = 3300, ["Infobox_baseball_biography"] = 30000, ["Infobox_baseball_biography/style"] = 30000, ["Infobox_baseball_biography/styles.css"] = 30000, ["Infobox_baseball_team_season"] = 3400, ["Infobox_baseball_team_season/leagueseason"] = 3400, ["Infobox_baseball_team_season/season"] = 3400, ["Infobox_baseball_team_season/styles.css"] = 3400, ["Infobox_basketball_biography"] = 24000, ["Infobox_basketball_biography/style"] = 24000, ["Infobox_basketball_club"] = 3300, ["Infobox_basketball_club/styles.css"] = 3300, ["Infobox_beauty_pageant"] = 2200, ["Infobox_bilateral_relations"] = 5100, ["Infobox_bishop_styles"] = 2500, ["Infobox_body_of_water"] = 19000, ["Infobox_book"] = 64000, ["Infobox_book/styles.css"] = 64000, ["Infobox_boxer"] = 6600, ["Infobox_brand"] = 2200, ["Infobox_brand/styles.css"] = 2200, ["Infobox_bridge"] = 6800, ["Infobox_building"] = 35000, ["Infobox_bus_company"] = 2100, ["Infobox_cemetery"] = 2200, ["Infobox_character"] = 8500, ["Infobox_character/styles.css"] = 8500, ["Infobox_chess_biography"] = 4800, ["Infobox_chess_player"] = 3800, ["Infobox_church"] = 17000, ["Infobox_church/denomination"] = 17000, ["Infobox_church/font_color"] = 17000, ["Infobox_civil_conflict"] = 3300, ["Infobox_civilian_attack"] = 7800, ["Infobox_college_coach"] = 13000, ["Infobox_college_football_game"] = 2300, ["Infobox_college_football_player"] = 2700, ["Infobox_college_sports_team_season"] = 46000, ["Infobox_college_sports_team_season/link"] = 46000, ["Infobox_college_sports_team_season/name"] = 46000, ["Infobox_college_sports_team_season/succession"] = 46000, ["Infobox_college_sports_team_season/team"] = 46000, ["Infobox_comedian"] = 2200, ["Infobox_comic_book_title"] = 3200, ["Infobox_comics_character"] = 3400, ["Infobox_comics_creator"] = 3600, ["Infobox_comics_creator/styles.css"] = 3600, ["Infobox_company"] = 93000, ["Infobox_company/styles.css"] = 93000, ["Infobox_computing_device"] = 2600, ["Infobox_concert"] = 4000, ["Infobox_constituency"] = 8100, ["Infobox_country"] = 7200, ["Infobox_country/formernext"] = 6800, ["Infobox_country/imagetable"] = 5600, ["Infobox_country/multirow"] = 9400, ["Infobox_country/status_text"] = 3100, ["Infobox_country/styles.css"] = 7200, ["Infobox_country_at_games"] = 17000, ["Infobox_country_at_games/core"] = 17000, ["Infobox_country_at_games/see_also"] = 14000, ["Infobox_court_case"] = 5400, ["Infobox_court_case/images"] = 2900, ["Infobox_court_case/styles.css"] = 5400, ["Infobox_cricket_tournament"] = 2800, ["Infobox_cricketer"] = 32000, ["Infobox_cricketer/career"] = 32000, ["Infobox_cricketer/national_side"] = 7700, ["Infobox_criminal"] = 7800, ["Infobox_curler"] = 2800, ["Infobox_cycling_race_report"] = 5000, ["Infobox_cyclist"] = 17000, ["Infobox_dam"] = 5900, ["Infobox_deity"] = 2300, ["Infobox_deity/color"] = 2300, ["Infobox_designation_list"] = 33000, ["Infobox_designation_list/entry"] = 23000, ["Infobox_dim"] = 6400, ["Infobox_diocese"] = 4100, ["Infobox_drug"] = 12000, ["Infobox_drug/chemical_formula"] = 12000, ["Infobox_drug/data_page_link"] = 12000, ["Infobox_drug/formatATC"] = 12000, ["Infobox_drug/formatCASnumber"] = 12000, ["Infobox_drug/formatChEBI"] = 12000, ["Infobox_drug/formatChEMBL"] = 12000, ["Infobox_drug/formatChemDBNIAID"] = 12000, ["Infobox_drug/formatChemSpider"] = 12000, ["Infobox_drug/formatCompTox"] = 12000, ["Infobox_drug/formatDrugBank"] = 12000, ["Infobox_drug/formatIUPHARBPS"] = 12000, ["Infobox_drug/formatJmol"] = 12000, ["Infobox_drug/formatKEGG"] = 12000, ["Infobox_drug/formatPDBligand"] = 11000, ["Infobox_drug/formatPubChemCID"] = 12000, ["Infobox_drug/formatPubChemSID"] = 12000, ["Infobox_drug/formatUNII"] = 12000, ["Infobox_drug/legal_status"] = 12000, ["Infobox_drug/licence"] = 12000, ["Infobox_drug/maintenance_categories"] = 12000, ["Infobox_drug/non-ref-space"] = 4000, ["Infobox_drug/pregnancy_category"] = 12000, ["Infobox_drug/styles.css"] = 12000, ["Infobox_drug/title"] = 12000, ["Infobox_economist"] = 2100, ["Infobox_election"] = 41000, ["Infobox_election/shortname"] = 2600, ["Infobox_election/styles.css"] = 41000, ["Infobox_enzyme"] = 5100, ["Infobox_ethnic_group"] = 8100, ["Infobox_event"] = 8100, ["Infobox_family"] = 2800, ["Infobox_field_hockey_player"] = 2600, ["Infobox_figure_skater"] = 4000, ["Infobox_film"] = 171000, ["Infobox_film/short_description"] = 167000, ["Infobox_film_awards"] = 3200, ["Infobox_film_awards/link"] = 3200, ["Infobox_film_awards/style"] = 3200, ["Infobox_film_or_theatre_festival"] = 2100, ["Infobox_food"] = 7800, ["Infobox_football_biography"] = 220000, ["Infobox_football_club"] = 30000, ["Infobox_football_club_season"] = 25000, ["Infobox_football_league"] = 2800, ["Infobox_football_league_season"] = 22000, ["Infobox_football_match"] = 6800, ["Infobox_football_tournament"] = 2200, ["Infobox_football_tournament_season"] = 9400, ["Infobox_former_subdivision"] = 3800, ["Infobox_former_subdivision/styles.css"] = 3800, ["Infobox_galaxy"] = 3400, ["Infobox_game"] = 3200, ["Infobox_game_score"] = 3800, ["Infobox_games"] = 2100, ["Infobox_gene"] = 13000, ["Infobox_given_name"] = 4100, ["Infobox_golfer"] = 4900, ["Infobox_golfer/highest_ranking"] = 4900, ["Infobox_government_agency"] = 13000, ["Infobox_government_cabinet"] = 3600, ["Infobox_gridiron_football_biography"] = 41000, ["Infobox_gridiron_football_biography/position"] = 40000, ["Infobox_gridiron_football_team_season"] = 4100, ["Infobox_gymnast"] = 6000, ["Infobox_handball_biography"] = 5600, ["Infobox_historic_site"] = 22000, ["Infobox_holiday"] = 2200, ["Infobox_holiday/date"] = 2200, ["Infobox_horseraces"] = 2700, ["Infobox_hospital"] = 7000, ["Infobox_hospital/care_system"] = 7000, ["Infobox_hospital/lists"] = 7000, ["Infobox_hurling_championship"] = 2700, ["Infobox_ice_hockey_biography"] = 21000, ["Infobox_ice_hockey_player"] = 18000, ["Infobox_ice_hockey_team"] = 3300, ["Infobox_ice_hockey_team_season"] = 2200, ["Infobox_international_football_competition"] = 6800, ["Infobox_islands"] = 9700, ["Infobox_islands/area"] = 10000, ["Infobox_islands/density"] = 10000, ["Infobox_islands/length"] = 9700, ["Infobox_islands/styles.css"] = 9700, ["Infobox_journal"] = 10000, ["Infobox_journal/Abbreviation_search"] = 10000, ["Infobox_journal/Bluebook_check"] = 10000, ["Infobox_journal/Former_check"] = 10000, ["Infobox_journal/ISO_4_check"] = 10000, ["Infobox_journal/ISSN-eISSN"] = 9900, ["Infobox_journal/Indexing_search"] = 10000, ["Infobox_journal/MathSciNet_check"] = 10000, ["Infobox_journal/NLM_check"] = 10000, ["Infobox_journal/frequency"] = 9100, ["Infobox_journal/openaccess"] = 2700, ["Infobox_judoka"] = 2800, ["Infobox_lake"] = 3800, ["Infobox_language"] = 10000, ["Infobox_language/family-color"] = 12000, ["Infobox_language/genetic"] = 7000, ["Infobox_language/lingualist"] = 12000, ["Infobox_language/linguistlist"] = 10000, ["Infobox_language/ref"] = 7400, ["Infobox_law_enforcement_agency"] = 2200, ["Infobox_legislation"] = 2800, ["Infobox_legislative_district"] = 2400, ["Infobox_legislative_election"] = 2700, ["Infobox_legislative_election/row"] = 2600, ["Infobox_legislative_election/styles.css"] = 2700, ["Infobox_legislative_term"] = 2300, ["Infobox_legislature"] = 4400, ["Infobox_library"] = 2500, ["Infobox_lighthouse"] = 2700, ["Infobox_lighthouse/light"] = 2700, ["Infobox_locomotive"] = 5000, ["Infobox_magazine"] = 8300, ["Infobox_manner_of_address"] = 4200, ["Infobox_martial_artist"] = 6300, ["Infobox_martial_artist/record"] = 6300, ["Infobox_medal_templates"] = 481000, ["Infobox_medical_condition"] = 9900, ["Infobox_medical_condition_(new)"] = 6200, ["Infobox_medical_person"] = 2600, ["Infobox_militant_organization"] = 2200, ["Infobox_military_conflict"] = 28000, ["Infobox_military_installation"] = 11000, ["Infobox_military_person"] = 54000, ["Infobox_military_unit"] = 29000, ["Infobox_mine"] = 2300, ["Infobox_mineral"] = 2000, ["Infobox_mobile_phone"] = 2600, ["Infobox_mobile_phone/size"] = 2200, ["Infobox_mobile_phone/weight"] = 2300, ["Infobox_model"] = 2300, ["Infobox_monument"] = 2900, ["Infobox_motorsport_season"] = 2900, ["Infobox_mountain"] = 30000, ["Infobox_multi-sport_competition_event"] = 2900, ["Infobox_museum"] = 12000, ["Infobox_musical_artist"] = 131000, ["Infobox_musical_artist/hCard_class"] = 122000, ["Infobox_musical_composition"] = 3700, ["Infobox_name"] = 8900, ["Infobox_name_module"] = 9700, ["Infobox_newspaper"] = 11000, ["Infobox_newspaper/styles.css"] = 11000, ["Infobox_noble"] = 7900, ["Infobox_officeholder"] = 284000, ["Infobox_officeholder/office"] = 291000, ["Infobox_official_post"] = 9900, ["Infobox_organization"] = 43000, ["Infobox_pageant_titleholder"] = 3100, ["Infobox_park"] = 10000, ["Infobox_person"] = 676000, ["Infobox_person/Wikidata"] = 5000, ["Infobox_person/height"] = 116000, ["Infobox_person/length"] = 7700, ["Infobox_person/weight"] = 74000, ["Infobox_philosopher"] = 3800, ["Infobox_planet"] = 4800, ["Infobox_play"] = 4600, ["Infobox_political_party"] = 16000, ["Infobox_power_station"] = 3400, ["Infobox_prepared_food"] = 2500, ["Infobox_professional_wrestler"] = 4800, ["Infobox_professional_wrestling_event"] = 3400, ["Infobox_protected_area"] = 15000, ["Infobox_protein_family"] = 2200, ["Infobox_publisher"] = 2600, ["Infobox_racehorse"] = 6000, ["Infobox_racing_driver"] = 6000, ["Infobox_racing_driver_series_section"] = 3000, ["Infobox_radio_station"] = 22000, ["Infobox_radio_station/styles.css"] = 22000, ["Infobox_rail"] = 3200, ["Infobox_rail_line"] = 8100, ["Infobox_rail_service"] = 3300, ["Infobox_reality_competition_season"] = 4400, ["Infobox_record_label"] = 4200, ["Infobox_recurring_event"] = 8200, ["Infobox_religious_biography"] = 7300, ["Infobox_religious_building"] = 15000, ["Infobox_religious_building/color"] = 22000, ["Infobox_restaurant"] = 4700, ["Infobox_river"] = 32000, ["Infobox_river/calcunit"] = 32000, ["Infobox_river/discharge"] = 32000, ["Infobox_river/row-style"] = 32000, ["Infobox_river/source"] = 32000, ["Infobox_road"] = 25000, ["Infobox_road/meta/mask/category"] = 24000, ["Infobox_road/meta/mask/country"] = 25000, ["Infobox_road/styles.css"] = 26000, ["Infobox_road_small"] = 2500, ["Infobox_rockunit"] = 6500, ["Infobox_royalty"] = 26000, ["Infobox_royalty/short_description"] = 8800, ["Infobox_rugby_biography"] = 19000, ["Infobox_rugby_biography/correct_date"] = 19000, ["Infobox_rugby_biography/depcheck"] = 19000, ["Infobox_rugby_league_biography"] = 11000, ["Infobox_rugby_league_biography/PLAYER"] = 11000, ["Infobox_rugby_team"] = 2700, ["Infobox_sailboat_specifications"] = 2300, ["Infobox_saint"] = 5500, ["Infobox_school"] = 39000, ["Infobox_school/short_description"] = 39000, ["Infobox_school/styles.css"] = 39000, ["Infobox_school_district"] = 6500, ["Infobox_school_district/styles.css"] = 6500, ["Infobox_scientist"] = 57000, ["Infobox_settlement"] = 599000, ["Infobox_settlement/areadisp"] = 261000, ["Infobox_settlement/columns"] = 108000, ["Infobox_settlement/columns/styles.css"] = 108000, ["Infobox_settlement/densdisp"] = 459000, ["Infobox_settlement/lengthdisp"] = 182000, ["Infobox_settlement/link"] = 108000, ["Infobox_settlement/styles.css"] = 599000, ["Infobox_ship"] = 43000, ["Infobox_ship/career"] = 39000, ["Infobox_ship/characteristics"] = 43000, ["Infobox_ship/class_overview"] = 4400, ["Infobox_ship/image"] = 42000, ["Infobox_ship/service_record"] = 2500, ["Infobox_shopping_mall"] = 3800, ["Infobox_short_story"] = 2800, ["Infobox_skier"] = 2700, ["Infobox_soap_character"] = 3100, ["Infobox_social_media_personality"] = 4400, ["Infobox_software"] = 14000, ["Infobox_software/simple"] = 15000, ["Infobox_song"] = 84000, ["Infobox_song/color"] = 84000, ["Infobox_song/link"] = 84000, ["Infobox_song_contest_national_year"] = 2000, ["Infobox_song_contest_national_year/Year"] = 2100, ["Infobox_spaceflight"] = 4100, ["Infobox_spaceflight/styles.css"] = 4100, ["Infobox_speed_skater"] = 2100, ["Infobox_sport_event"] = 2800, ["Infobox_sports_competition_event"] = 25000, ["Infobox_sports_competition_event/medalrow"] = 16000, ["Infobox_sports_league"] = 5700, ["Infobox_sports_season"] = 7000, ["Infobox_sports_team"] = 2300, ["Infobox_sportsperson"] = 179000, ["Infobox_stadium"] = 2600, ["Infobox_station"] = 58000, ["Infobox_station/services"] = 58000, ["Infobox_station/styles.css"] = 58000, ["Infobox_street"] = 4500, ["Infobox_swimmer"] = 11000, ["Infobox_television"] = 64000, ["Infobox_television/Short_description"] = 62000, ["Infobox_television/styles.css"] = 64000, ["Infobox_television_channel"] = 6800, ["Infobox_television_channel/styles.css"] = 6800, ["Infobox_television_episode"] = 13000, ["Infobox_television_episode/styles.css"] = 14000, ["Infobox_television_season"] = 11000, ["Infobox_television_station"] = 3200, ["Infobox_television_station/styles.css"] = 3300, ["Infobox_tennis_biography"] = 11000, ["Infobox_tennis_event"] = 3400, ["Infobox_tennis_tournament"] = 2100, ["Infobox_tennis_tournament/heading"] = 2100, ["Infobox_tennis_tournament/style"] = 2100, ["Infobox_tennis_tournament_event"] = 23000, ["Infobox_tennis_tournament_year"] = 11000, ["Infobox_tennis_tournament_year/color"] = 33000, ["Infobox_tennis_tournament_year/footer"] = 33000, ["Infobox_tournament_season"] = 13000, ["Infobox_train"] = 2600, ["Infobox_university"] = 25000, ["Infobox_user"] = 3000, ["Infobox_venue"] = 20000, ["Infobox_video_game"] = 30000, ["Infobox_video_game/styles.css"] = 30000, ["Infobox_volleyball_biography"] = 5900, ["Infobox_weapon"] = 8100, ["Infobox_weather_event"] = 3600, ["Infobox_weather_event/Effects"] = 3400, ["Infobox_weather_event/Footer"] = 3500, ["Infobox_weather_event/History"] = 3400, ["Infobox_weather_event/SSHWS"] = 2000, ["Infobox_weather_event/meteorology"] = 3300, ["Infobox_weather_event/scale"] = 2100, ["Infobox_weather_event/styles.css"] = 3600, ["Infobox_website"] = 8300, ["Infobox_writer"] = 46000, ["Information"] = 98000, ["Information/styles.css"] = 98000, ["Inlang"] = 2400, ["Inline"] = 3800, ["Inline_block"] = 5400, ["Inprogress"] = 2700, ["Input_link"] = 32000, ["Instagram"] = 21000, ["InterSportStats"] = 6900, ["Interlanguage_link"] = 310000, ["Interlanguage_link_multi"] = 9000, ["International_Paralympic_Committee"] = 4300, ["International_football_primary_link"] = 3600, ["International_football_primary_style"] = 3600, ["International_football_secondary_style"] = 3500, ["Internet_Archive"] = 2300, ["Internet_Archive_SCOTUS_URL"] = 3300, ["Internet_Archive_author"] = 19000, ["Internet_Archive_film"] = 2600, ["Intitle"] = 22000, ["Ip"] = 2100, ["Iptalk"] = 18000, ["IranCensus2006"] = 29000, ["IranNCSGN"] = 3100, ["Iran_Census_2006"] = 29000, ["Irish_place_name"] = 3000, ["IsIPAddress"] = 47000, ["IsValidPageName"] = 3400, ["Is_MLB_league"] = 3300, ["Is_NPB_league"] = 3400, ["Is_continent"] = 13000, ["Is_country_in_Central_America"] = 17000, ["Is_country_in_the_Caribbean"] = 17000, ["Is_interwiki_link"] = 6100, ["Is_italic_taxon"] = 657000, ["Is_redirect"] = 387000, ["Is_time"] = 6700, ["Is_valid_page_name"] = 3400, ["Isbn"] = 10000, ["Isnum"] = 3000, ["Isnumeric"] = 122000, ["Iso2continent"] = 110000, ["Iso2country"] = 26000, ["Iso2country/article"] = 25000, ["Iso2country/data"] = 26000, ["Issubst"] = 64000, ["Italic_dab2"] = 5900, ["Italic_disambiguation"] = 2400, ["Italic_title"] = 259000, ["Italic_title_prefixed"] = 8800, ["Italictitle"] = 3000, ["Ivmbox"] = 143000, ["Ivory_messagebox"] = 192000, ["Ivory_messagebox/styles.css"] = 192000, ["Module:I18n/complex_date"] = 49000, ["Module:IP"] = 223000, ["Module:IPA"] = 186000, ["Module:IPA/data"] = 168000, ["Module:IPA/styles.css"] = 153000, ["Module:IPA_symbol"] = 6900, ["Module:IPA_symbol/data"] = 6900, ["Module:IPAc-en"] = 56000, ["Module:IPAc-en/data"] = 56000, ["Module:IPAc-en/phonemes"] = 56000, ["Module:IPAc-en/pronunciation"] = 56000, ["Module:IPAddress"] = 292000, ["Module:ISO_3166"] = 949000, ["Module:ISO_3166/data/AT"] = 2500, ["Module:ISO_3166/data/BA"] = 3400, ["Module:ISO_3166/data/CA"] = 2600, ["Module:ISO_3166/data/CH"] = 4300, ["Module:ISO_3166/data/CN"] = 2800, ["Module:ISO_3166/data/CZ"] = 6600, ["Module:ISO_3166/data/DE"] = 15000, ["Module:ISO_3166/data/ES"] = 3700, ["Module:ISO_3166/data/FR"] = 38000, ["Module:ISO_3166/data/GB"] = 7100, ["Module:ISO_3166/data/GR"] = 3500, ["Module:ISO_3166/data/IN"] = 29000, ["Module:ISO_3166/data/IR"] = 24000, ["Module:ISO_3166/data/IT"] = 2500, ["Module:ISO_3166/data/National"] = 949000, ["Module:ISO_3166/data/PL"] = 7600, ["Module:ISO_3166/data/RS"] = 3200, ["Module:ISO_3166/data/RU"] = 27000, ["Module:ISO_3166/data/UA"] = 2200, ["Module:ISO_3166/data/US"] = 91000, ["Module:ISO_639_name"] = 34000, ["Module:ISO_639_name/ISO_639-1"] = 29000, ["Module:ISO_639_name/ISO_639-2"] = 21000, ["Module:ISO_639_name/ISO_639-2B"] = 20000, ["Module:ISO_639_name/ISO_639-3"] = 20000, ["Module:ISO_639_name/ISO_639-3_(dep)"] = 34000, ["Module:ISO_639_name/ISO_639-5"] = 19000, ["Module:ISO_639_name/ISO_639_deprecated"] = 34000, ["Module:ISO_639_name/ISO_639_name_to_code"] = 4600, ["Module:ISO_639_name/ISO_639_override"] = 34000, ["Module:ISOdate"] = 49000, ["Module:Ice_hockey_box"] = 2000, ["Module:Icon"] = 692000, ["Module:Icon/data"] = 692000, ["Module:Icon_box"] = 267000, ["Module:Icon_box/data"] = 267000, ["Module:If_any_equal"] = 255000, ["Module:If_empty"] = 6840000, ["Module:If_in_category"] = 164000, ["Module:If_in_page"] = 23000, ["Module:If_not_given_or_empty"] = 125000, ["Module:If_preview"] = 1440000, ["Module:If_preview/configuration"] = 1440000, ["Module:If_preview/styles.css"] = 1440000, ["Module:In_lang"] = 391000, ["Module:Indent"] = 2400, ["Module:Infobox"] = 4720000, ["Module:Infobox/dates"] = 78000, ["Module:Infobox/styles.css"] = 4990000, ["Module:Infobox/utilities"] = 2700, ["Module:Infobox3cols"] = 322000, ["Module:InfoboxBuilder"] = 3100, ["Module:InfoboxImage"] = 5650000, ["Module:InfoboxImage/data"] = 3390000, ["Module:Infobox_body_of_water_tracking"] = 19000, ["Module:Infobox_cyclist_tracking"] = 17000, ["Module:Infobox_dim"] = 383000, ["Module:Infobox_dim/data"] = 234000, ["Module:Infobox_election"] = 43000, ["Module:Infobox_gene"] = 14000, ["Module:Infobox_gene/orthologs"] = 14000, ["Module:Infobox_mapframe"] = 1690000, ["Module:Infobox_military_conflict"] = 28000, ["Module:Infobox_military_conflict/styles.css"] = 28000, ["Module:Infobox_multi-lingual_name"] = 24000, ["Module:Infobox_multi-lingual_name/data"] = 24000, ["Module:Infobox_power_station"] = 3400, ["Module:Infobox_road"] = 26000, ["Module:Infobox_road/browselinks"] = 26000, ["Module:Infobox_road/errors"] = 25000, ["Module:Infobox_road/length"] = 26000, ["Module:Infobox_road/locations"] = 25000, ["Module:Infobox_road/map"] = 25000, ["Module:Infobox_road/route"] = 26000, ["Module:Infobox_road/sections"] = 25000, ["Module:Infobox_ship"] = 43000, ["Module:Infobox_ship/data"] = 43000, ["Module:Infobox_ship/styles.css"] = 43000, ["Module:Infobox_television"] = 64000, ["Module:Infobox_television_disambiguation_check"] = 72000, ["Module:Infobox_television_episode"] = 13000, ["Module:Infobox_television_season_disambiguation_check"] = 10000, ["Module:Infobox_television_season_name"] = 11000, ["Module:Internet_Archive"] = 22000, ["Module:Is_article"] = 2300, ["Module:Is_infobox_in_lead"] = 462000, ["Module:Is_instance"] = 361000, ["Module:Iso2nationality"] = 96000, ["Module:Italic_title"] = 1260000, ["Module:Italic_title2"] = 5900, } mvg1awblmjpp8maxf9jwreh620cpua9 373882 373881 2026-10-28T05:55:29Z ChiK 1136 1 revision imported from [[:en:Module:Transclusion_count/data/I]] 373881 Scribunto text/plain return { ["IAST"] = 6300, ["IA_SCOTUS_URL"] = 3300, ["IBDB_name"] = 9800, ["ICD10"] = 5000, ["ICD9"] = 4400, ["ICS"] = 3500, ["ICS_flag"] = 3500, ["IDN"] = 3800, ["IMDb_episode"] = 11000, ["IMDb_episodes"] = 4300, ["IMDb_name"] = 173000, ["IMDb_title"] = 212000, ["IMO_Number"] = 4500, ["IMSLP"] = 9200, ["INA"] = 2400, ["IND"] = 8800, ["INR"] = 6600, ["INRConvert"] = 6800, ["INRConvert/CurrentRate"] = 6700, ["INRConvert/USD"] = 6700, ["INRConvert/out"] = 6700, ["IOBDB_name"] = 2100, ["IP"] = 2800, ["IPA"] = 183000, ["IPA_audio_link"] = 5300, ["IPA_link"] = 5100, ["IPAblink"] = 2600, ["IPAc-cmn"] = 2800, ["IPAc-en"] = 56000, ["IPAc-pl"] = 51000, ["IPSummary"] = 82000, ["IP_summary"] = 83000, ["IPtalk"] = 18000, ["IPuser"] = 7600, ["IPvandal"] = 2800, ["IRC"] = 7200, ["IRI"] = 2600, ["IRL"] = 6100, ["IRN"] = 4000, ["ISBN"] = 475000, ["ISBN?"] = 2400, ["ISBNT"] = 46000, ["ISBN_missing"] = 3200, ["ISFDB_name"] = 4300, ["ISFDB_title"] = 5100, ["ISL"] = 2300, ["ISO_15924/script-example-character"] = 3100, ["ISO_15924/wp-article"] = 3100, ["ISO_15924/wp-article/format"] = 3100, ["ISO_15924/wp-article/label"] = 3000, ["ISO_3166_code"] = 277000, ["ISO_3166_name"] = 16000, ["ISO_639_name"] = 28000, ["ISP"] = 3700, ["ISR"] = 6100, ["ISSN"] = 12000, ["ISSN_link"] = 33000, ["ISTAT"] = 8100, ["ISU_figure_skater"] = 2300, ["ITA"] = 20000, ["ITF"] = 6800, ["ITF_profile"] = 2600, ["ITIS"] = 5900, ["ITN_talk"] = 13000, ["ITN_talk/date"] = 13000, ["IUCN_banner"] = 15000, ["I_sup"] = 4900, ["Ice_hockey_box"] = 2000, ["Ice_hockey_stats"] = 20000, ["Icehockeystats"] = 11000, ["Icelandic_name"] = 2200, ["Icon"] = 679000, ["If"] = 438000, ["If_all"] = 8000, ["If_autoconfirmed"] = 2200, ["If_between"] = 4800, ["If_both"] = 210000, ["If_dark"] = 4100, ["If_dark/styles.css"] = 4100, ["If_either"] = 22000, ["If_empty"] = 6800000, ["If_first_display_both"] = 122000, ["If_in_category"] = 164000, ["If_in_page"] = 23000, ["If_last_display_both"] = 38000, ["If_mobile"] = 2100, ["If_mobile/styles.css"] = 4400, ["If_preview"] = 66000, ["If_then_show"] = 89000, ["Ifempty"] = 949000, ["Ifeq"] = 84000, ["Iferror_then_show"] = 4000, ["Ifexist_not_redirect"] = 1990000, ["Ifnotempty"] = 19000, ["Ifnoteq_then_show"] = 2300, ["Ifnumber"] = 78000, ["Ifsubst"] = 1030000, ["Ih"] = 8100, ["Ill"] = 262000, ["Illm"] = 5800, ["Image_frame"] = 6200, ["Image_label"] = 4700, ["Image_label_begin"] = 4100, ["Image_label_end"] = 4100, ["Image_label_small"] = 2600, ["Image_needed"] = 4400, ["Image_other"] = 191000, ["Image_requested"] = 134000, ["Image_requested/Category_helper"] = 124000, ["Imbox"] = 1000000, ["Imdb_name"] = 5300, ["Imdb_title"] = 2900, ["Importance"] = 15000, ["Importance/colour"] = 30000, ["Importance_mask"] = 632000, ["Improve_categories"] = 7000, ["Improve_documentation"] = 4300, ["Improve_plot"] = 4200, ["In_class"] = 5600, ["In_lang"] = 390000, ["In_progress"] = 3800, ["In_string"] = 310000, ["In_title"] = 31000, ["Inactive_userpage_blanked"] = 3600, ["Inaturalist_taxon"] = 3800, ["Include-USGov"] = 24000, ["Incomplete_list"] = 24000, ["Inconclusive"] = 2400, ["Increase"] = 62000, ["Incumbent_pope"] = 4400, ["Indent"] = 2400, ["Indented_plain_list"] = 2800, ["Indented_plainlist"] = 2500, ["Independent_sources"] = 10000, ["IndexFungorum"] = 2100, ["Indian_English"] = 5000, ["Indian_railway_code"] = 3600, ["Indian_rupee"] = 12000, ["Inflation"] = 28000, ["Inflation-fn"] = 5900, ["Inflation-year"] = 4300, ["Inflation/IN/startyear"] = 6700, ["Inflation/UK"] = 5600, ["Inflation/UK/dataset"] = 5600, ["Inflation/UK/startyear"] = 5600, ["Inflation/US"] = 16000, ["Inflation/US-GDP"] = 3100, ["Inflation/US-GDP/dataset"] = 3100, ["Inflation/US-GDP/startyear"] = 3100, ["Inflation/US/dataset"] = 16000, ["Inflation/US/startyear"] = 16000, ["Inflation/fn"] = 7600, ["Inflation/year"] = 34000, ["Info"] = 5600, ["Infobox"] = 3440000, ["Infobox/Columns"] = 3300, ["Infobox/mobileviewfix.css"] = 177000, ["Infobox/styles-images.css"] = 21000, ["Infobox3cols"] = 28000, ["Infobox_AFL_biography"] = 15000, ["Infobox_Athletics_Championships"] = 3400, ["Infobox_Australian_place"] = 15000, ["Infobox_Australian_place/styles.css"] = 15000, ["Infobox_Australian_place/table"] = 11000, ["Infobox_COA_wide"] = 3700, ["Infobox_Canada_electoral_district"] = 2700, ["Infobox_Chinese"] = 24000, ["Infobox_Chinese/Chinese"] = 3200, ["Infobox_Chinese/Footer"] = 7200, ["Infobox_Chinese/Header"] = 7200, ["Infobox_Christian_leader"] = 23000, ["Infobox_French_commune"] = 38000, ["Infobox_French_subdivision"] = 2200, ["Infobox_Gaelic_games_biography"] = 5500, ["Infobox_Gaelic_games_player"] = 3000, ["Infobox_German_place"] = 14000, ["Infobox_Grand_Prix_race_report"] = 2200, ["Infobox_Greece_place"] = 3600, ["Infobox_Greek_Dimos"] = 2900, ["Infobox_Hindu_temple"] = 2900, ["Infobox_Indian_constituency"] = 5800, ["Infobox_Indian_constituency/defaultdata"] = 5800, ["Infobox_Italian_comune"] = 8100, ["Infobox_Korean"] = 2100, ["Infobox_Korean/auto"] = 15000, ["Infobox_Korean/auto/categories"] = 15000, ["Infobox_Korean/base"] = 2100, ["Infobox_Korean/base/auto"] = 18000, ["Infobox_Korean/categories"] = 2100, ["Infobox_Korean_name"] = 2100, ["Infobox_Korean_name/auto"] = 14000, ["Infobox_Korean_television_name"] = 3500, ["Infobox_NASCAR_driver"] = 2400, ["Infobox_NASCAR_race_report"] = 2800, ["Infobox_NCAA_basketball_conference_tournament"] = 2100, ["Infobox_NCAA_team_season"] = 11000, ["Infobox_NFL_biography"] = 27000, ["Infobox_NFL_team_season"] = 2300, ["Infobox_NRHP"] = 74000, ["Infobox_NRHP/conv"] = 19000, ["Infobox_NRHP/pushpinmap2region"] = 68000, ["Infobox_Olympic_event"] = 8100, ["Infobox_Olympic_event/event_link"] = 8100, ["Infobox_Olympic_event/games_text"] = 8100, ["Infobox_Pan_American_Games_event"] = 2900, ["Infobox_Paralympic_event"] = 2900, ["Infobox_Paralympic_event/games_text"] = 2900, ["Infobox_Romanian_subdivision"] = 3200, ["Infobox_Russian_district"] = 2100, ["Infobox_Russian_inhabited_locality"] = 4700, ["Infobox_Russian_inhabited_locality/PosMapFS"] = 4200, ["Infobox_Russian_inhabited_locality/federal_subject"] = 4700, ["Infobox_SCOTUS_case"] = 4600, ["Infobox_SSSI"] = 2000, ["Infobox_Site_of_Special_Scientific_Interest"] = 2100, ["Infobox_Slovak_place"] = 3000, ["Infobox_Swiss_town"] = 3000, ["Infobox_Switzerland_municipality"] = 3000, ["Infobox_Turkey_place"] = 20000, ["Infobox_U.S._county"] = 3000, ["Infobox_U.S._county/district"] = 3000, ["Infobox_U.S._legislation"] = 2300, ["Infobox_UK_constituency"] = 2200, ["Infobox_UK_constituency/year"] = 2200, ["Infobox_UK_legislation"] = 6500, ["Infobox_UK_place"] = 27000, ["Infobox_UK_place/NoDialCode"] = 8300, ["Infobox_UK_place/NoPostCode"] = 3700, ["Infobox_UK_place/area"] = 2800, ["Infobox_UK_place/dens"] = 2300, ["Infobox_UK_place/dist"] = 2800, ["Infobox_UK_place/local"] = 27000, ["Infobox_UK_place/styles.css"] = 27000, ["Infobox_UNESCO_World_Heritage_Site"] = 2100, ["Infobox_UN_resolution"] = 2300, ["Infobox_US_Supreme_Court_case"] = 4800, ["Infobox_US_Supreme_Court_case/courts"] = 4800, ["Infobox_United_States_legislative_district"] = 2800, ["Infobox_United_States_legislative_district/representative"] = 2800, ["Infobox_Wikipedia_user"] = 12000, ["Infobox_academic"] = 27000, ["Infobox_aircraft"] = 13000, ["Infobox_aircraft/styles.css"] = 14000, ["Infobox_aircraft_occurrence"] = 2900, ["Infobox_airline"] = 4800, ["Infobox_airline/styles.css"] = 4800, ["Infobox_airport"] = 14000, ["Infobox_airport/datatable"] = 13000, ["Infobox_airport/styles.css"] = 14000, ["Infobox_album"] = 169000, ["Infobox_album/color"] = 209000, ["Infobox_album/link"] = 169000, ["Infobox_anatomy"] = 4500, ["Infobox_animanga/Footer"] = 7800, ["Infobox_animanga/Header"] = 7800, ["Infobox_animanga/Print"] = 6700, ["Infobox_animanga/Video"] = 5100, ["Infobox_architect"] = 4500, ["Infobox_artist"] = 35000, ["Infobox_artist_discography"] = 6500, ["Infobox_artwork"] = 16000, ["Infobox_automobile"] = 9300, ["Infobox_award"] = 16000, ["Infobox_badminton_player"] = 3300, ["Infobox_baseball_biography"] = 30000, ["Infobox_baseball_biography/style"] = 30000, ["Infobox_baseball_biography/styles.css"] = 30000, ["Infobox_baseball_team_season"] = 3400, ["Infobox_baseball_team_season/leagueseason"] = 3400, ["Infobox_baseball_team_season/season"] = 3400, ["Infobox_baseball_team_season/styles.css"] = 3400, ["Infobox_basketball_biography"] = 24000, ["Infobox_basketball_biography/style"] = 24000, ["Infobox_basketball_club"] = 3300, ["Infobox_basketball_club/styles.css"] = 3300, ["Infobox_beauty_pageant"] = 2200, ["Infobox_bilateral_relations"] = 5100, ["Infobox_bishop_styles"] = 2500, ["Infobox_body_of_water"] = 19000, ["Infobox_book"] = 64000, ["Infobox_book/styles.css"] = 64000, ["Infobox_boxer"] = 6600, ["Infobox_brand"] = 2200, ["Infobox_brand/styles.css"] = 2200, ["Infobox_bridge"] = 6800, ["Infobox_building"] = 35000, ["Infobox_bus_company"] = 2100, ["Infobox_cemetery"] = 2200, ["Infobox_character"] = 8500, ["Infobox_character/styles.css"] = 8500, ["Infobox_chess_biography"] = 4800, ["Infobox_chess_player"] = 3800, ["Infobox_church"] = 17000, ["Infobox_church/denomination"] = 17000, ["Infobox_church/font_color"] = 17000, ["Infobox_civil_conflict"] = 3300, ["Infobox_civilian_attack"] = 7800, ["Infobox_college_coach"] = 13000, ["Infobox_college_football_game"] = 2300, ["Infobox_college_football_player"] = 2700, ["Infobox_college_sports_team_season"] = 46000, ["Infobox_college_sports_team_season/link"] = 46000, ["Infobox_college_sports_team_season/name"] = 46000, ["Infobox_college_sports_team_season/succession"] = 46000, ["Infobox_college_sports_team_season/team"] = 46000, ["Infobox_comedian"] = 2200, ["Infobox_comic_book_title"] = 3200, ["Infobox_comics_character"] = 3400, ["Infobox_comics_creator"] = 3600, ["Infobox_comics_creator/styles.css"] = 3600, ["Infobox_company"] = 93000, ["Infobox_company/styles.css"] = 93000, ["Infobox_computing_device"] = 2600, ["Infobox_concert"] = 4000, ["Infobox_constituency"] = 8100, ["Infobox_country"] = 7200, ["Infobox_country/formernext"] = 6800, ["Infobox_country/imagetable"] = 5600, ["Infobox_country/multirow"] = 9400, ["Infobox_country/status_text"] = 3100, ["Infobox_country/styles.css"] = 7200, ["Infobox_country_at_games"] = 17000, ["Infobox_country_at_games/core"] = 17000, ["Infobox_country_at_games/see_also"] = 14000, ["Infobox_court_case"] = 5400, ["Infobox_court_case/images"] = 2900, ["Infobox_court_case/styles.css"] = 5400, ["Infobox_cricket_tournament"] = 2800, ["Infobox_cricketer"] = 32000, ["Infobox_cricketer/career"] = 32000, ["Infobox_cricketer/national_side"] = 7700, ["Infobox_criminal"] = 7800, ["Infobox_curler"] = 2800, ["Infobox_cycling_race_report"] = 5000, ["Infobox_cyclist"] = 17000, ["Infobox_dam"] = 5900, ["Infobox_deity"] = 2300, ["Infobox_deity/color"] = 2300, ["Infobox_designation_list"] = 33000, ["Infobox_designation_list/entry"] = 23000, ["Infobox_dim"] = 6400, ["Infobox_diocese"] = 4100, ["Infobox_drug"] = 12000, ["Infobox_drug/chemical_formula"] = 12000, ["Infobox_drug/data_page_link"] = 12000, ["Infobox_drug/formatATC"] = 12000, ["Infobox_drug/formatCASnumber"] = 12000, ["Infobox_drug/formatChEBI"] = 12000, ["Infobox_drug/formatChEMBL"] = 12000, ["Infobox_drug/formatChemDBNIAID"] = 12000, ["Infobox_drug/formatChemSpider"] = 12000, ["Infobox_drug/formatCompTox"] = 12000, ["Infobox_drug/formatDrugBank"] = 12000, ["Infobox_drug/formatIUPHARBPS"] = 12000, ["Infobox_drug/formatJmol"] = 12000, ["Infobox_drug/formatKEGG"] = 12000, ["Infobox_drug/formatPDBligand"] = 11000, ["Infobox_drug/formatPubChemCID"] = 12000, ["Infobox_drug/formatPubChemSID"] = 12000, ["Infobox_drug/formatUNII"] = 12000, ["Infobox_drug/legal_status"] = 12000, ["Infobox_drug/licence"] = 12000, ["Infobox_drug/maintenance_categories"] = 12000, ["Infobox_drug/non-ref-space"] = 4000, ["Infobox_drug/pregnancy_category"] = 12000, ["Infobox_drug/styles.css"] = 12000, ["Infobox_drug/title"] = 12000, ["Infobox_economist"] = 2100, ["Infobox_election"] = 41000, ["Infobox_election/shortname"] = 2600, ["Infobox_election/styles.css"] = 41000, ["Infobox_enzyme"] = 5100, ["Infobox_ethnic_group"] = 8100, ["Infobox_event"] = 8100, ["Infobox_family"] = 2800, ["Infobox_field_hockey_player"] = 2600, ["Infobox_figure_skater"] = 4000, ["Infobox_film"] = 171000, ["Infobox_film/short_description"] = 167000, ["Infobox_film_awards"] = 3200, ["Infobox_film_awards/link"] = 3200, ["Infobox_film_awards/style"] = 3200, ["Infobox_film_or_theatre_festival"] = 2100, ["Infobox_food"] = 7800, ["Infobox_football_biography"] = 220000, ["Infobox_football_club"] = 30000, ["Infobox_football_club_season"] = 25000, ["Infobox_football_league"] = 2800, ["Infobox_football_league_season"] = 22000, ["Infobox_football_match"] = 6800, ["Infobox_football_tournament"] = 2200, ["Infobox_football_tournament_season"] = 9400, ["Infobox_former_subdivision"] = 3800, ["Infobox_former_subdivision/styles.css"] = 3800, ["Infobox_galaxy"] = 3400, ["Infobox_game"] = 3200, ["Infobox_game_score"] = 3800, ["Infobox_games"] = 2100, ["Infobox_gene"] = 13000, ["Infobox_given_name"] = 4100, ["Infobox_golfer"] = 4900, ["Infobox_golfer/highest_ranking"] = 4900, ["Infobox_government_agency"] = 13000, ["Infobox_government_cabinet"] = 3600, ["Infobox_gridiron_football_biography"] = 41000, ["Infobox_gridiron_football_biography/position"] = 40000, ["Infobox_gridiron_football_team_season"] = 4100, ["Infobox_gymnast"] = 6000, ["Infobox_handball_biography"] = 5600, ["Infobox_historic_site"] = 22000, ["Infobox_holiday"] = 2200, ["Infobox_holiday/date"] = 2200, ["Infobox_horseraces"] = 2700, ["Infobox_hospital"] = 7000, ["Infobox_hospital/care_system"] = 7000, ["Infobox_hospital/lists"] = 7000, ["Infobox_hurling_championship"] = 2700, ["Infobox_ice_hockey_biography"] = 21000, ["Infobox_ice_hockey_player"] = 18000, ["Infobox_ice_hockey_team"] = 3300, ["Infobox_ice_hockey_team_season"] = 2200, ["Infobox_international_football_competition"] = 6800, ["Infobox_islands"] = 9700, ["Infobox_islands/area"] = 10000, ["Infobox_islands/density"] = 10000, ["Infobox_islands/length"] = 9700, ["Infobox_islands/styles.css"] = 9700, ["Infobox_journal"] = 10000, ["Infobox_journal/Abbreviation_search"] = 10000, ["Infobox_journal/Bluebook_check"] = 10000, ["Infobox_journal/Former_check"] = 10000, ["Infobox_journal/ISO_4_check"] = 10000, ["Infobox_journal/ISSN-eISSN"] = 9900, ["Infobox_journal/Indexing_search"] = 10000, ["Infobox_journal/MathSciNet_check"] = 10000, ["Infobox_journal/NLM_check"] = 10000, ["Infobox_journal/frequency"] = 9100, ["Infobox_journal/openaccess"] = 2700, ["Infobox_judoka"] = 2800, ["Infobox_lake"] = 3800, ["Infobox_language"] = 10000, ["Infobox_language/family-color"] = 12000, ["Infobox_language/genetic"] = 7000, ["Infobox_language/lingualist"] = 12000, ["Infobox_language/linguistlist"] = 10000, ["Infobox_language/ref"] = 7400, ["Infobox_law_enforcement_agency"] = 2200, ["Infobox_legislation"] = 2800, ["Infobox_legislative_district"] = 2400, ["Infobox_legislative_election"] = 2700, ["Infobox_legislative_election/row"] = 2600, ["Infobox_legislative_election/styles.css"] = 2700, ["Infobox_legislative_term"] = 2300, ["Infobox_legislature"] = 4400, ["Infobox_library"] = 2500, ["Infobox_lighthouse"] = 2700, ["Infobox_lighthouse/light"] = 2700, ["Infobox_locomotive"] = 5000, ["Infobox_magazine"] = 8300, ["Infobox_manner_of_address"] = 4200, ["Infobox_martial_artist"] = 6300, ["Infobox_martial_artist/record"] = 6300, ["Infobox_medal_templates"] = 481000, ["Infobox_medical_condition"] = 9900, ["Infobox_medical_condition_(new)"] = 6200, ["Infobox_medical_person"] = 2600, ["Infobox_militant_organization"] = 2200, ["Infobox_military_conflict"] = 28000, ["Infobox_military_installation"] = 11000, ["Infobox_military_person"] = 54000, ["Infobox_military_unit"] = 29000, ["Infobox_mine"] = 2300, ["Infobox_mineral"] = 2000, ["Infobox_mobile_phone"] = 2600, ["Infobox_mobile_phone/size"] = 2200, ["Infobox_mobile_phone/weight"] = 2300, ["Infobox_model"] = 2300, ["Infobox_monument"] = 2900, ["Infobox_motorsport_season"] = 2900, ["Infobox_mountain"] = 30000, ["Infobox_multi-sport_competition_event"] = 2900, ["Infobox_museum"] = 12000, ["Infobox_musical_artist"] = 131000, ["Infobox_musical_artist/hCard_class"] = 122000, ["Infobox_musical_composition"] = 3700, ["Infobox_name"] = 8900, ["Infobox_name_module"] = 9700, ["Infobox_newspaper"] = 11000, ["Infobox_newspaper/styles.css"] = 11000, ["Infobox_noble"] = 7900, ["Infobox_officeholder"] = 284000, ["Infobox_officeholder/office"] = 291000, ["Infobox_official_post"] = 9900, ["Infobox_organization"] = 43000, ["Infobox_pageant_titleholder"] = 3100, ["Infobox_park"] = 10000, ["Infobox_person"] = 676000, ["Infobox_person/Wikidata"] = 5000, ["Infobox_person/height"] = 116000, ["Infobox_person/length"] = 7700, ["Infobox_person/weight"] = 74000, ["Infobox_philosopher"] = 3800, ["Infobox_planet"] = 4800, ["Infobox_play"] = 4600, ["Infobox_political_party"] = 16000, ["Infobox_power_station"] = 3400, ["Infobox_prepared_food"] = 2500, ["Infobox_professional_wrestler"] = 4800, ["Infobox_professional_wrestling_event"] = 3400, ["Infobox_protected_area"] = 15000, ["Infobox_protein_family"] = 2200, ["Infobox_publisher"] = 2600, ["Infobox_racehorse"] = 6000, ["Infobox_racing_driver"] = 6000, ["Infobox_racing_driver_series_section"] = 3000, ["Infobox_radio_station"] = 22000, ["Infobox_radio_station/styles.css"] = 22000, ["Infobox_rail"] = 3200, ["Infobox_rail_line"] = 8100, ["Infobox_rail_service"] = 3300, ["Infobox_reality_competition_season"] = 4400, ["Infobox_record_label"] = 4200, ["Infobox_recurring_event"] = 8200, ["Infobox_religious_biography"] = 7300, ["Infobox_religious_building"] = 15000, ["Infobox_religious_building/color"] = 22000, ["Infobox_restaurant"] = 4700, ["Infobox_river"] = 32000, ["Infobox_river/calcunit"] = 32000, ["Infobox_river/discharge"] = 32000, ["Infobox_river/row-style"] = 32000, ["Infobox_river/source"] = 32000, ["Infobox_road"] = 25000, ["Infobox_road/meta/mask/category"] = 24000, ["Infobox_road/meta/mask/country"] = 25000, ["Infobox_road/styles.css"] = 26000, ["Infobox_road_small"] = 2500, ["Infobox_rockunit"] = 6500, ["Infobox_royalty"] = 26000, ["Infobox_royalty/short_description"] = 8800, ["Infobox_rugby_biography"] = 19000, ["Infobox_rugby_biography/correct_date"] = 19000, ["Infobox_rugby_biography/depcheck"] = 19000, ["Infobox_rugby_league_biography"] = 11000, ["Infobox_rugby_league_biography/PLAYER"] = 11000, ["Infobox_rugby_team"] = 2700, ["Infobox_sailboat_specifications"] = 2300, ["Infobox_saint"] = 5500, ["Infobox_school"] = 39000, ["Infobox_school/short_description"] = 39000, ["Infobox_school/styles.css"] = 39000, ["Infobox_school_district"] = 6500, ["Infobox_school_district/styles.css"] = 6500, ["Infobox_scientist"] = 57000, ["Infobox_settlement"] = 599000, ["Infobox_settlement/areadisp"] = 261000, ["Infobox_settlement/columns"] = 108000, ["Infobox_settlement/columns/styles.css"] = 108000, ["Infobox_settlement/densdisp"] = 459000, ["Infobox_settlement/lengthdisp"] = 182000, ["Infobox_settlement/link"] = 108000, ["Infobox_settlement/styles.css"] = 599000, ["Infobox_ship"] = 43000, ["Infobox_ship/career"] = 39000, ["Infobox_ship/characteristics"] = 43000, ["Infobox_ship/class_overview"] = 4400, ["Infobox_ship/image"] = 42000, ["Infobox_ship/service_record"] = 2500, ["Infobox_shopping_mall"] = 3800, ["Infobox_short_story"] = 2800, ["Infobox_skier"] = 2700, ["Infobox_soap_character"] = 3100, ["Infobox_social_media_personality"] = 4400, ["Infobox_software"] = 14000, ["Infobox_software/simple"] = 15000, ["Infobox_song"] = 84000, ["Infobox_song/color"] = 84000, ["Infobox_song/link"] = 84000, ["Infobox_song_contest_national_year"] = 2000, ["Infobox_song_contest_national_year/Year"] = 2100, ["Infobox_spaceflight"] = 4100, ["Infobox_spaceflight/styles.css"] = 4100, ["Infobox_speed_skater"] = 2100, ["Infobox_sport_event"] = 2800, ["Infobox_sports_competition_event"] = 25000, ["Infobox_sports_competition_event/medalrow"] = 16000, ["Infobox_sports_league"] = 5700, ["Infobox_sports_season"] = 7000, ["Infobox_sports_team"] = 2300, ["Infobox_sportsperson"] = 179000, ["Infobox_stadium"] = 2600, ["Infobox_station"] = 58000, ["Infobox_station/services"] = 58000, ["Infobox_station/styles.css"] = 58000, ["Infobox_street"] = 4500, ["Infobox_swimmer"] = 11000, ["Infobox_television"] = 64000, ["Infobox_television/Short_description"] = 62000, ["Infobox_television/styles.css"] = 64000, ["Infobox_television_channel"] = 6800, ["Infobox_television_channel/styles.css"] = 6800, ["Infobox_television_episode"] = 13000, ["Infobox_television_episode/styles.css"] = 14000, ["Infobox_television_season"] = 11000, ["Infobox_television_station"] = 3200, ["Infobox_television_station/styles.css"] = 3300, ["Infobox_tennis_biography"] = 11000, ["Infobox_tennis_event"] = 3400, ["Infobox_tennis_tournament"] = 2100, ["Infobox_tennis_tournament/heading"] = 2100, ["Infobox_tennis_tournament/style"] = 2100, ["Infobox_tennis_tournament_event"] = 23000, ["Infobox_tennis_tournament_year"] = 11000, ["Infobox_tennis_tournament_year/color"] = 33000, ["Infobox_tennis_tournament_year/footer"] = 33000, ["Infobox_tournament_season"] = 13000, ["Infobox_train"] = 2600, ["Infobox_university"] = 25000, ["Infobox_user"] = 3000, ["Infobox_venue"] = 20000, ["Infobox_video_game"] = 30000, ["Infobox_video_game/styles.css"] = 30000, ["Infobox_volleyball_biography"] = 5900, ["Infobox_weapon"] = 8100, ["Infobox_weather_event"] = 3600, ["Infobox_weather_event/Effects"] = 3400, ["Infobox_weather_event/Footer"] = 3500, ["Infobox_weather_event/History"] = 3400, ["Infobox_weather_event/SSHWS"] = 2000, ["Infobox_weather_event/meteorology"] = 3300, ["Infobox_weather_event/scale"] = 2100, ["Infobox_weather_event/styles.css"] = 3600, ["Infobox_website"] = 8300, ["Infobox_writer"] = 46000, ["Information"] = 98000, ["Information/styles.css"] = 98000, ["Inlang"] = 2400, ["Inline"] = 3800, ["Inline_block"] = 5400, ["Inprogress"] = 2700, ["Input_link"] = 32000, ["Instagram"] = 21000, ["InterSportStats"] = 6900, ["Interlanguage_link"] = 310000, ["Interlanguage_link_multi"] = 9000, ["International_Paralympic_Committee"] = 4300, ["International_football_primary_link"] = 3600, ["International_football_primary_style"] = 3600, ["International_football_secondary_style"] = 3500, ["Internet_Archive"] = 2300, ["Internet_Archive_SCOTUS_URL"] = 3300, ["Internet_Archive_author"] = 19000, ["Internet_Archive_film"] = 2600, ["Intitle"] = 22000, ["Ip"] = 2100, ["Iptalk"] = 18000, ["IranCensus2006"] = 29000, ["IranNCSGN"] = 3100, ["Iran_Census_2006"] = 29000, ["Irish_place_name"] = 3000, ["IsIPAddress"] = 47000, ["IsValidPageName"] = 3400, ["Is_MLB_league"] = 3300, ["Is_NPB_league"] = 3400, ["Is_continent"] = 13000, ["Is_country_in_Central_America"] = 17000, ["Is_country_in_the_Caribbean"] = 17000, ["Is_interwiki_link"] = 6100, ["Is_italic_taxon"] = 657000, ["Is_redirect"] = 387000, ["Is_time"] = 6700, ["Is_valid_page_name"] = 3400, ["Isbn"] = 10000, ["Isnum"] = 3000, ["Isnumeric"] = 122000, ["Iso2continent"] = 110000, ["Iso2country"] = 26000, ["Iso2country/article"] = 25000, ["Iso2country/data"] = 26000, ["Issubst"] = 64000, ["Italic_dab2"] = 5900, ["Italic_disambiguation"] = 2400, ["Italic_title"] = 259000, ["Italic_title_prefixed"] = 8800, ["Italictitle"] = 3000, ["Ivmbox"] = 143000, ["Ivory_messagebox"] = 192000, ["Ivory_messagebox/styles.css"] = 192000, ["Module:I18n/complex_date"] = 49000, ["Module:IP"] = 223000, ["Module:IPA"] = 186000, ["Module:IPA/data"] = 168000, ["Module:IPA/styles.css"] = 153000, ["Module:IPA_symbol"] = 6900, ["Module:IPA_symbol/data"] = 6900, ["Module:IPAc-en"] = 56000, ["Module:IPAc-en/data"] = 56000, ["Module:IPAc-en/phonemes"] = 56000, ["Module:IPAc-en/pronunciation"] = 56000, ["Module:IPAddress"] = 292000, ["Module:ISO_3166"] = 949000, ["Module:ISO_3166/data/AT"] = 2500, ["Module:ISO_3166/data/BA"] = 3400, ["Module:ISO_3166/data/CA"] = 2600, ["Module:ISO_3166/data/CH"] = 4300, ["Module:ISO_3166/data/CN"] = 2800, ["Module:ISO_3166/data/CZ"] = 6600, ["Module:ISO_3166/data/DE"] = 15000, ["Module:ISO_3166/data/ES"] = 3700, ["Module:ISO_3166/data/FR"] = 38000, ["Module:ISO_3166/data/GB"] = 7100, ["Module:ISO_3166/data/GR"] = 3500, ["Module:ISO_3166/data/IN"] = 29000, ["Module:ISO_3166/data/IR"] = 24000, ["Module:ISO_3166/data/IT"] = 2500, ["Module:ISO_3166/data/National"] = 949000, ["Module:ISO_3166/data/PL"] = 7600, ["Module:ISO_3166/data/RS"] = 3200, ["Module:ISO_3166/data/RU"] = 27000, ["Module:ISO_3166/data/UA"] = 2200, ["Module:ISO_3166/data/US"] = 91000, ["Module:ISO_639_name"] = 34000, ["Module:ISO_639_name/ISO_639-1"] = 29000, ["Module:ISO_639_name/ISO_639-2"] = 21000, ["Module:ISO_639_name/ISO_639-2B"] = 20000, ["Module:ISO_639_name/ISO_639-3"] = 20000, ["Module:ISO_639_name/ISO_639-3_(dep)"] = 34000, ["Module:ISO_639_name/ISO_639-5"] = 19000, ["Module:ISO_639_name/ISO_639_deprecated"] = 34000, ["Module:ISO_639_name/ISO_639_name_to_code"] = 4600, ["Module:ISO_639_name/ISO_639_override"] = 34000, ["Module:ISOdate"] = 49000, ["Module:Ice_hockey_box"] = 2000, ["Module:Icon"] = 692000, ["Module:Icon/data"] = 692000, ["Module:Icon_box"] = 267000, ["Module:Icon_box/data"] = 267000, ["Module:If_any_equal"] = 255000, ["Module:If_empty"] = 6840000, ["Module:If_in_category"] = 164000, ["Module:If_in_page"] = 23000, ["Module:If_not_given_or_empty"] = 125000, ["Module:If_preview"] = 1440000, ["Module:If_preview/configuration"] = 1440000, ["Module:If_preview/styles.css"] = 1440000, ["Module:In_lang"] = 391000, ["Module:Indent"] = 2400, ["Module:Infobox"] = 4720000, ["Module:Infobox/dates"] = 78000, ["Module:Infobox/styles.css"] = 4990000, ["Module:Infobox/utilities"] = 2700, ["Module:Infobox3cols"] = 322000, ["Module:InfoboxBuilder"] = 3100, ["Module:InfoboxImage"] = 5650000, ["Module:InfoboxImage/data"] = 3390000, ["Module:Infobox_body_of_water_tracking"] = 19000, ["Module:Infobox_cyclist_tracking"] = 17000, ["Module:Infobox_dim"] = 383000, ["Module:Infobox_dim/data"] = 234000, ["Module:Infobox_election"] = 43000, ["Module:Infobox_gene"] = 14000, ["Module:Infobox_gene/orthologs"] = 14000, ["Module:Infobox_mapframe"] = 1690000, ["Module:Infobox_military_conflict"] = 28000, ["Module:Infobox_military_conflict/styles.css"] = 28000, ["Module:Infobox_multi-lingual_name"] = 24000, ["Module:Infobox_multi-lingual_name/data"] = 24000, ["Module:Infobox_power_station"] = 3400, ["Module:Infobox_road"] = 26000, ["Module:Infobox_road/browselinks"] = 26000, ["Module:Infobox_road/errors"] = 25000, ["Module:Infobox_road/length"] = 26000, ["Module:Infobox_road/locations"] = 25000, ["Module:Infobox_road/map"] = 25000, ["Module:Infobox_road/route"] = 26000, ["Module:Infobox_road/sections"] = 25000, ["Module:Infobox_ship"] = 43000, ["Module:Infobox_ship/data"] = 43000, ["Module:Infobox_ship/styles.css"] = 43000, ["Module:Infobox_television"] = 64000, ["Module:Infobox_television_disambiguation_check"] = 72000, ["Module:Infobox_television_episode"] = 13000, ["Module:Infobox_television_season_disambiguation_check"] = 10000, ["Module:Infobox_television_season_name"] = 11000, ["Module:Internet_Archive"] = 22000, ["Module:Is_article"] = 2300, ["Module:Is_infobox_in_lead"] = 462000, ["Module:Is_instance"] = 361000, ["Module:Iso2nationality"] = 96000, ["Module:Italic_title"] = 1260000, ["Module:Italic_title2"] = 5900, } mvg1awblmjpp8maxf9jwreh620cpua9 ಮೋಡ್ಯೂಲ್:Location map/data/India 828 10042 373869 2018-03-11T23:43:06Z en>Plastikspork 0 Changed protection level for "[[Module:Location map/data/India]]" ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite)) 373869 Scribunto text/plain return { name = 'India', top = 37.5, bottom = 5.0, left = 67.0, right = 99.0, image = 'India location map.svg', image1 = 'India relief location map.jpg' } gw0g2fn9r50gvo5ujlnzgldgkh2r3bs 373870 128412 2026-10-28T05:55:28Z ChiK 1136 1 revision imported from [[:en:Module:Location_map/data/India]] 128412 Scribunto text/plain return { name = 'India', top = 37.5, bottom = 5.0, left = 67.0, right = 99.0, image = 'India location map.svg', image1 = 'India relief location map.jpg' } gw0g2fn9r50gvo5ujlnzgldgkh2r3bs ಟೆಂಪ್ಲೇಟ್:Inflation/year 10 14281 373857 357816 2026-09-29T21:07:21Z en>Pppery 0 IN = 2026 373857 wikitext text/x-wiki <includeonly>{{#switch:{{{index|{{{1|ERR}}}}}} <!-- *** When changing this, also update the reference in [[Template:Inflation/fn]] and the datasets for [[Template:Inflation]]! *** --> | AR = 2020 | AT = 2018 | AU = 2022 | AU-road = 2018 | BD = 2024 | BE = 2025 | BR = 2020 | CA = 2025 | CH = 2021 | CL = 2024 | CN = 2024 | DE = 2021 | DK = 2022 | EG = 2024 | ES = 2022 | EU = 2023 | FI = 2023 | FR = 2025 | GR = 2025 | HK = 2020 | ID = 2025 | IL = 2021 | IN = 2026 | IR = 1398 | IS = 2025 | IT = 2020 | JP = 2024 | KRW = 2025 | MX = 2025 | NL = 2024 | NO = 2018 | NZ = 2026 | PE = 2017 | PH = 2021 | PK = 2021 | PL = 2021 | PT = 2007 | RU = 2023 | SE = 2023 | SG = 2022 | TEST = 2012 | TH = 2020 | TR = 2024 | TW = 2021 | UK|GBP = 2025 | UKGDP | UK-GDP | UK-CAP = 2024 | US|USD = 2025 | USGDP | US-GDP | US-CAP = 2024 | VN = 2022 | ZAR = 2018 | ERR = <span class="error">Error: no index specified when using {{tl|Inflation/year}}.{{main other|[[Category:Pages with errors in inflation template]]}}</span> |#default = <span class="error">Error: undefined index "{{{index|{{{1}}}}}}" when using {{tl|Inflation/year}}.{{main other|[[Category:Pages with errors in inflation template]]}}</span> }}</includeonly><noinclude> {{Documentation}} </noinclude> l5cd2bczkvnyulumtlc8ugjhvpbob9r 373858 373857 2026-10-28T05:55:27Z ChiK 1136 1 revision imported from [[:en:Template:Inflation/year]] 373857 wikitext text/x-wiki <includeonly>{{#switch:{{{index|{{{1|ERR}}}}}} <!-- *** When changing this, also update the reference in [[Template:Inflation/fn]] and the datasets for [[Template:Inflation]]! *** --> | AR = 2020 | AT = 2018 | AU = 2022 | AU-road = 2018 | BD = 2024 | BE = 2025 | BR = 2020 | CA = 2025 | CH = 2021 | CL = 2024 | CN = 2024 | DE = 2021 | DK = 2022 | EG = 2024 | ES = 2022 | EU = 2023 | FI = 2023 | FR = 2025 | GR = 2025 | HK = 2020 | ID = 2025 | IL = 2021 | IN = 2026 | IR = 1398 | IS = 2025 | IT = 2020 | JP = 2024 | KRW = 2025 | MX = 2025 | NL = 2024 | NO = 2018 | NZ = 2026 | PE = 2017 | PH = 2021 | PK = 2021 | PL = 2021 | PT = 2007 | RU = 2023 | SE = 2023 | SG = 2022 | TEST = 2012 | TH = 2020 | TR = 2024 | TW = 2021 | UK|GBP = 2025 | UKGDP | UK-GDP | UK-CAP = 2024 | US|USD = 2025 | USGDP | US-GDP | US-CAP = 2024 | VN = 2022 | ZAR = 2018 | ERR = <span class="error">Error: no index specified when using {{tl|Inflation/year}}.{{main other|[[Category:Pages with errors in inflation template]]}}</span> |#default = <span class="error">Error: undefined index "{{{index|{{{1}}}}}}" when using {{tl|Inflation/year}}.{{main other|[[Category:Pages with errors in inflation template]]}}</span> }}</includeonly><noinclude> {{Documentation}} </noinclude> l5cd2bczkvnyulumtlc8ugjhvpbob9r ಮೋಡ್ಯೂಲ್:Params 828 18080 373835 372732 2026-10-27T22:28:15Z Grufo 6930 Update from [[d:Special:GoToLinkedPage/mediawikiwiki/Q122696746|master]] using [[mw:Synchronizer| #Synchronizer]] 373835 Scribunto text/plain require[[strict]] --- --- --- PRIVATE ENVIRONMENT --- --- ________________________________ --- --- --- --[[ Abstract utilities ]]-- ---------------------------- -- Helper function for `string.gsub()` (for managing zero-padded numbers) local function zero_padded (str) return ('%03d%s'):format(#str, str) end -- Helper function for `table.sort()` (for natural sorting) local function natural_sort (var1, var2) return var1:gsub('%d+', zero_padded) < var2:gsub('%d+', zero_padded) end -- Return a copy or a reference to a table local function copy_or_ref_table (src, refonly) if refonly then return src end local newtab = {} for key, val in pairs(src) do newtab[key] = val end return newtab end -- Copy at most N items (of all kinds) from `src` to `dest` and return `dest` local function copy_table_maxn (dest, src, len) local idx = 1 for key, val in pairs(src) do dest[key], idx = val, idx + 1 if idx > len then break end end return dest end -- Remove some numeric elements from a table, shifting everything to the left local function remove_numeric_keys (tbl, idx, len) local cache, tmp = {}, idx + len - 1 for key, val in pairs(tbl) do if type(key) == 'number' and key >= idx then if key > tmp then cache[key - len] = val end tbl[key] = nil end end for key, val in pairs(cache) do tbl[key] = val end end -- Make a reduced copy of a table (shifting in both directions if necessary) local function copy_table_reduced (tbl, idx, len) local ret, tmp = {}, idx + len - 1 if idx > 0 then for key, val in pairs(tbl) do if type(key) ~= 'number' or key < idx then ret[key] = val elseif key > tmp then ret[key - len] = val end end elseif tmp > 0 then local nshift = 1 - idx for key, val in pairs(tbl) do if type(key) ~= 'number' then ret[key] = val elseif key > tmp then ret[key - tmp] = val elseif key < idx then ret[key + nshift] = val end end else for key, val in pairs(tbl) do if type(key) ~= 'number' or key > tmp then ret[key] = val elseif key < idx then ret[key + len] = val end end end return ret end -- Make an expanded copy of a table (shifting in both directions if necessary) local function copy_table_expanded (tbl, idx, len) local ret, tmp = {}, idx + len - 1 if idx > 0 then for key, val in pairs(tbl) do if type(key) ~= 'number' or key < idx then ret[key] = val else ret[key + len] = val end end elseif tmp > 0 then local nshift = idx - 1 for key, val in pairs(tbl) do if type(key) ~= 'number' then ret[key] = val elseif key > 0 then ret[key + tmp] = val elseif key < 1 then ret[key + nshift] = val end end else for key, val in pairs(tbl) do if type(key) ~= 'number' or key > tmp then ret[key] = val else ret[key - len] = val end end end return ret end -- Given a table, create two new tables containing the sorted list of keys local function get_sorted_key_list (tbl, sort_fn) local nums, words, nn, nw = {}, {}, 1, 1 for key, val in pairs(tbl) do if type(key) == 'number' then nums[nn], nn = key, nn + 1 else words[nw], nw = key, nw + 1 end end table.sort(nums) table.sort(words, sort_fn) return nums, words, nn - 1, nw - 1 end -- Parse a parameter name string and return it as a string or a number local function get_param_name (par_str) local ret = par_str:match'^%s*(.-)%s*$' if ret ~= '0' and ret:find'^%-?[1-9]%d*$' == nil then return ret end return tonumber(ret) end -- Move a key from a table to another, but only if under a different name and -- always parsing numeric strings as numbers local function steal_if_renamed (val, src, skey, dest, dkey) local realkey = get_param_name(dkey) if skey ~= realkey then dest[realkey], src[skey] = val, nil end end --[[ Public strings ]]-- ------------------------ -- Special match keywords (functions and modifiers MUST avoid these names) local mkeywords = { ['or'] = 0, pattern = 1, plain = 2, strict = 3 } -- Sort functions (functions and modifiers MUST avoid these names) local sortfunctions = { alphabetically = false, naturally = natural_sort } -- Callback styles for the `mapping_*` and `renaming_*` class of modifiers -- (functions and modifiers MUST avoid these names) --[[ Meanings of the columns: col[1] = Loop type (0-3) col[2] = Number of module arguments that the style requires (1-3) col[3] = Minimum number of sequential parameters passed to the callback col[4] = Name of the callback parameter where to place each parameter name col[5] = Name of the callback parameter where to place each parameter value col[6] = Argument in the modifier's invocation that will override `col[4]` col[7] = Argument in the modifier's invocation that will override `col[5]` A value of `-1` indicates that no meaningful value is stored (i.e. `nil`) ]]-- local mapping_styles = { names_and_values = { 3, 2, 2, 1, 2, -1, -1 }, values_and_names = { 3, 2, 2, 2, 1, -1, -1 }, values_only = { 1, 2, 1, -1, 1, -1, -1 }, names_only = { 2, 2, 1, 1, -1, -1, -1 }, names_and_values_as = { 3, 4, 0, -1, -1, 2, 3 }, names_only_as = { 2, 3, 0, -1, -1, 2, -1 }, values_only_as = { 1, 3, 0, -1, -1, -1, 2 }, blindly = { 0, 2, 0, -1, -1, -1, -1 } } -- Memory slots (functions and modifiers MUST avoid these names) local memoryslots = { h = 'header', f = 'footer', i = 'itersep', l = 'lastsep', n = 'ifngiven', p = 'pairsep', s = 'oxfordsep' } -- Possible trimming modes for the `parsing` modifier local trim_parse_opts = { trim_none = { false, false }, trim_positional = { false, true }, trim_named = { true, false }, trim_all = { true, true } } -- Possible string modes for the iteration separator in the `parsing` and -- `reinterpreting` modifiers local isep_parse_opts = { splitter_pattern = false, splitter_string = true } -- Possible string modes for the key-value separator in the `parsing` and -- `reinterpreting` modifiers local psep_parse_opts = { setter_pattern = false, setter_string = true } -- Possible position references for the `splicing` modifier local position_references = { add_nothing = 0, add_smallest_number = 1, add_last_of_sequence = 2, add_largest_number = 3 } -- Possible modes for the `reassigning` modifier local a_modes = { transfer = 0, clone = 1, rename = 2, copy = 3, sacrifice = 4, provide = 5, spare = 7 } -- Functions and modifiers MUST avoid these names too: `here`, `in_substack`, -- `let`, `expose`, `use`, `with_flushed_glue`, `without_flushed_glue` -- `without_sorting` --[[ Private constants ]]-- --------------------------- -- Hard-coded name of the module (to avoid going through `frame:getTitle()`) local modulename = 'Module:Params' -- The functions listed here declare that they don't need the -- `frame:getParent().args` metatable to be copied into a regular table; if -- they are modifiers they also guarantee that they will make their own -- (modified) copy available local refparams = { call_for_each_group = true, combining = true, combining_by_calling = true, combining_values = true, concat_and_call = true, concat_and_invoke = true, concat_and_magic = true, count = true, grouping_by_calling = true, mixing_names_and_values = true, keeping_at_most = true, renaming_by_mixing = true, renaming_to_sequence = true, renaming_to_uppercase = true, renaming_to_lowercase = true, shifting = true, splicing = true, value_of = true, with_name_matching = true } -- Maximum number of numeric parameters that can be filled, if missing (we -- chose an arbitrary number for this constant; you can discuss about its -- optimal value at Module talk:Params) local maxfill = 1024 -- The private table of functions local library = {} -- Functions and modifiers that can only be invoked in first position local static_iface = {} --[[ Private functions ]]-- --------------------------- -- Create a new context local function context_new (child_frame, first_fn_name) local main_frame, tpipe = child_frame:getParent(), { first_fn_name } for key, val in pairs(child_frame.args) do if type(key) == 'number' and key > 0 then tpipe[key + 1] = val else tpipe[key] = val end end return { frame = main_frame, pipe = tpipe, oparams = main_frame.args, firstposonly = static_iface, iterfunc = pairs, fnpos = 1, sorttype = 0, n_parents = 0, n_children = 0, n_available = maxfill } end -- Move to the next action within the user-given list local function context_iterate (ctx, next_fn_pos, trimmed_fname) local fname = trimmed_fname or ctx.pipe[next_fn_pos] and ctx.pipe[next_fn_pos]:match'^%s*(.*%S)' if fname == nil then error(modulename .. ': You must specify a function to call', 0) end if library[fname] == nil then if ctx.firstposonly[fname] == nil then error(modulename .. ': The function ‘' .. fname .. '’ does not exist', 0) else error(modulename .. ': The ‘' .. fname .. '’ directive can only appear in first position', 0) end end ctx.fnpos = next_fn_pos return library[fname] end -- Main loop local function main_loop (ctx, start_with) local fn = start_with repeat fn = fn(ctx) until not fn if ctx.n_parents > 0 then error(modulename .. ': One or more ‘merging_substack’ directives are missing', 0) end if ctx.n_children > 0 then error(modulename .. ', For some of the snapshots either the ‘flushing’ directive is missing or a group has not been properly closed with ‘merging_substack’', 0) end end -- Load a `setting`-like directive string into the `dest` table local function set_strings_from_opts (dest, opts, offs) local cmd if opts[offs] == nil then return offs - 1 end cmd = opts[offs]:gsub('%s+', ''):gsub('/+', '/'):match'^/*(.*[^/])' if cmd == nil then return offs end local vname, chr local amap, sep, argc = {}, string.byte('/'), offs + 1 for idx = 1, #cmd do chr = cmd:byte(idx) if chr == sep then for key, val in ipairs(amap) do dest[val], amap[key] = opts[argc], nil end argc = argc + 1 else vname = memoryslots[string.char(chr)] if vname == nil then error(modulename .. ', ‘setting’: Unknown slot ‘' .. string.char(chr) .. '’', 0) end table.insert(amap, vname) end end for key, val in ipairs(amap) do dest[val] = opts[argc] end return argc end -- Add a new stack of parameters to `ctx.children` local function new_substack (ctx) local currsnap, newparams = ctx.n_children + 1, {} if ctx.children == nil then ctx.children = { newparams } else ctx.children[currsnap] = newparams end ctx.n_children = currsnap return newparams end -- Parse a raw argument containing a `sortfunctions` directive, or -- `'without_sorting'`, or `nil` local function load_sort_opt (raw_arg) local trarg if raw_arg ~= nil then trarg = raw_arg:match'^%s*(.*%S)' end if trarg == nil then return nil, 1, false, nil end if trarg == 'without_sorting' then return nil, 2, false, nil end local tmp = sortfunctions[trarg] if tmp == nil then return nil, 1, false, trarg end return tmp or nil, 2, true, nil end -- Parse optional user arguments of type `...|[let/use]|[...]|[let/use]|[...]| -- [number of additional parameters]|[parameter 1]|[parameter 2]|[...]` local function load_child_opts (src, start_from, append_after, params) local tnamed, tmp1, tmp2 local pin, tbl, mem = start_from, {}, {} while src[pin] ~= nil and src[pin + 1] ~= nil do tmp1 = src[pin]:match'^%s*(.*%S)' if tmp1 == 'let' and src[pin + 2] ~= nil then tmp1 = get_param_name(src[pin + 1]) tbl[tmp1], pin = src[pin + 2], pin + 3 --[[ elseif tmp1 == 'expose' then tmp1 = get_param_name(src[pin + 1]) tmp2 = params[tmp1] mem[tmp1], tbl[tmp1], pin = tmp2, tmp2, pin + 2 ]]-- elseif tmp1 == 'use' and src[pin + 2] ~= nil then tmp1 = get_param_name(src[pin + 2]) tmp2 = params[tmp1] mem[tmp1], tbl[get_param_name(src[pin + 1])], pin = tmp2, tmp2, pin + 3 else break end end local tnew = copy_or_ref_table(params, next(mem) == nil) for key in pairs(mem) do tnew[key] = nil end if pin ~= start_from then tnamed, tbl = tbl, {} end tmp1 = tonumber(src[pin]) if tmp1 ~= nil and math.floor(tmp1) == tmp1 then if tmp1 < 0 then tmp1 = -1 end tmp2 = append_after - pin for idx = pin + 1, pin + tmp1 do tbl[idx + tmp2] = src[idx] end pin = pin + tmp1 + 1 end if tnamed ~= nil then for key, val in pairs(tnamed) do tbl[key] = val end end return tbl, pin, tnew, mem end -- Load the optional arguments of some of the `mapping_*` and `renaming_*` -- class of modifiers local function load_callback_opts (src, start_from, default_style, params) local style, shf local tmp = src[start_from + 1] if tmp ~= nil then style = mapping_styles[tmp:match'^%s*(.-)%s*$'] end if style == nil then style, shf = default_style, start_from - 1 else shf = start_from end local n_exist, karg, varg = style[3], style[4], style[5] tmp = style[6] if tmp > -1 then karg = src[tmp + shf]:match'^%s*(.-)%s*$' if karg == '0' or karg:find'^%-?[1-9]%d*$' ~= nil then karg = tonumber(karg) n_exist = math.max(n_exist, karg) end end tmp = style[7] if tmp > -1 then varg = src[tmp + shf]:match'^%s*(.-)%s*$' if varg == '0' or varg:find'^%-?[1-9]%d*$' ~= nil then varg = tonumber(varg) n_exist = math.max(n_exist, varg) end end tmp = style[1] local dest, argc, tnew, mem = load_child_opts(src, style[2] + shf, n_exist, params) if (tmp == 3 or tmp == 2) and dest[karg] ~= nil then tmp = tmp - 2 end if (tmp == 3 or tmp == 1) and dest[varg] ~= nil then tmp = tmp - 1 end return dest, argc, tmp, karg, varg, tnew, mem end -- Parse the arguments of some of the `mapping_*` and `renaming_*` class of -- modifiers local function load_replace_args (opts, offs, whoami) if opts[offs + 1] == nil then error(modulename .. ', ‘' .. whoami .. '’: No pattern string was given', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘' .. whoami .. '’: No replacement string was given', 0) end local tn, flg local ptn, repl, nmax, argc = opts[offs + 1], opts[offs + 2], tonumber(opts[offs + 3]), 3 if nmax ~= nil then argc = 4 elseif opts[offs + 3] ~= nil then tn = opts[offs + 3]:match'^%s*(.*%S)' if tn == nil then argc = 4 end end if tn == nil and opts[offs + argc] ~= nil then tn = opts[offs + argc]:match'^%s*(.*%S)' end if tn ~= nil then flg = mkeywords[tn] if flg ~= nil then tn = nil end end if flg == 0 then flg = nil elseif flg ~= nil then argc = argc + 1 end return ptn, repl, nmax, flg, offs + argc, (nmax ~= nil and nmax < 1) or (flg == 3 and ptn == repl), tn end -- Parse the arguments of the `with_*_matching` class of modifiers local function load_pattern_args (opts, offs, whoami) local tn, kwid local ptns, arg, state, nptns, idx = {}, opts[offs + 1], 0, 0, offs + 2 while arg ~= nil do if state == 0 then nptns, state = nptns + 1, -1 ptns[nptns] = { arg, false, false } else tn = arg:match'^%s*(.*%S)' kwid = tn and mkeywords[tn] if kwid == nil or (state > 0 and kwid > 0) then break else state = kwid if state > 1 then ptns[nptns][2] = true end if state == 3 then ptns[nptns][3] = true end end end arg, idx = opts[idx], idx + 1 end if state == 0 then error(modulename .. ', ‘' .. whoami .. '’: No pattern was given', 0) end return ptns, nptns, idx - 1, kwid == nil and tn or nil end -- Load the optional arguments of the `parsing`, `reinterpreting` and -- `evaluating` modifiers local function load_parse_opts (opts, offs, isp, psp) local tn, tmp local optslots, noptslots, argc, trimn, trimu, iplain, pplain = { true, true, true }, 3, offs, true, false, true, true repeat noptslots, tmp = noptslots - 1, opts[argc] tn = tmp and tmp:match'^%s*(.*%S)' if tn == nil then break end if optslots[1] ~= nil and trim_parse_opts[tn] ~= nil then tmp = trim_parse_opts[tn] trimn, trimu, optslots[1] = tmp[1], tmp[2], nil elseif optslots[2] ~= nil and isep_parse_opts[tn] ~= nil then argc = argc + 1 iplain, isp, optslots[2] = isep_parse_opts[tn], opts[argc], nil elseif optslots[3] ~= nil and psep_parse_opts[tn] ~= nil then argc = argc + 1 pplain, psp, optslots[3] = psep_parse_opts[tn], opts[argc], nil else break end argc, tn = argc + 1, nil until noptslots < 1 return isp, iplain, psp, pplain, trimn, trimu, argc, tn end -- Map parameters' values using a custom callback and a referenced table local value_maps = { [0] = function (tbl, margs, karg, varg, fn) for key in pairs(tbl) do tbl[key] = fn() end end, [1] = function (tbl, margs, karg, varg, fn) for key, val in pairs(tbl) do margs[varg] = val tbl[key] = fn() end end, [2] = function (tbl, margs, karg, varg, fn) for key in pairs(tbl) do margs[karg] = key tbl[key] = fn() end end, [3] = function (tbl, margs, karg, varg, fn) for key, val in pairs(tbl) do margs[karg], margs[varg] = key, val tbl[key] = fn() end end } -- Private table for `map_names()` local name_thieves = { [0] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do steal_if_renamed(val, tbl, key, cache, fn()) end end, [1] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do rargs[varg] = val steal_if_renamed(val, tbl, key, cache, fn()) end end, [2] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do rargs[karg] = key steal_if_renamed(val, tbl, key, cache, fn()) end end, [3] = function (cache, tbl, rargs, karg, varg, fn) for key, val in pairs(tbl) do rargs[karg], rargs[varg] = key, val steal_if_renamed(val, tbl, key, cache, fn()) end end } -- Map parameters' names using a custom callback and a referenced table local function map_names (tbl, rargs, karg, varg, looptype, fn) local cache = {} name_thieves[looptype](cache, tbl, rargs, karg, varg, fn) for key, val in pairs(cache) do tbl[key] = val end end -- Return a new table that contains `src` regrouped according to the numeric -- suffixes in its keys local function make_groups (src) -- NOTE: `src` might be the original metatable! local prefix, gid local groups = {} for key, val in pairs(src) do -- `key` must only be a string or a number... if type(key) == 'string' then prefix, gid = key:match'^%s*(.-)%s*(%-?%d*)%s*$' gid = tonumber(gid) or '' else prefix, gid = '', key end if groups[gid] == nil then groups[gid] = {} end if prefix == '0' or prefix:find'^%-?[1-9]%d*$' ~= nil then prefix = tonumber(prefix) if prefix < 1 then prefix = prefix - 1 end end groups[gid][prefix] = val end return groups end -- Split into parts a string containing the `$#` and `$@` placeholders and -- return the information as a skeleton table, a canvas table and a length local function parse_placeholder_string (target) local skel, canvas, idx, s_pos, e_pos = {}, {}, 1, 1, string.find(target, '%$[@#]', 1, false) while e_pos ~= nil do canvas[idx], skel[idx + 1] = target:sub(s_pos, e_pos - 1), target:sub(e_pos, e_pos + 1) == '$@' idx, s_pos = idx + 2, e_pos + 2 e_pos = string.find(target, '%$[@#]', s_pos, false) end if (s_pos > target:len()) then idx = idx - 1 else canvas[idx] = target:sub(s_pos) end return skel, canvas, idx end -- Populate a table by parsing a parameter string (heavy lifting for `parsing`, -- `reinterpreting` and `evaluating`) local function parse_parameter_string (tbl, str, isp, ipl, psp, ppl, trn, tru) local key, val, spos1, spos2, pos1, pos2 local pos3, idx, lenplone = 0, 1, #str + 1 if isp == nil or isp == '' then if psp == nil or psp == '' then if tru then tbl[idx] = str:match'^%s*(.-)%s*$' else tbl[idx] = str end return end spos1, spos2 = str:find(psp, 1, ppl) if spos1 == nil then key = idx if tru then val = str:match'^%s*(.-)%s*$' else val = str end else key = get_param_name(str:sub(1, spos1 - 1)) val = str:sub(spos2 + 1) if trn then val = val:match'^%s*(.-)%s*$' end end tbl[key] = val return end if psp == nil or psp == '' then repeat pos1 = pos3 + 1 pos2, pos3 = str:find(isp, pos1, ipl) val = str:sub(pos1, (pos2 or lenplone) - 1) if tru then val = val:match'^%s*(.-)%s*$' end tbl[idx], idx = val, idx + 1 until pos2 == nil return end repeat pos1 = pos3 + 1 pos2, pos3 = str:find(isp, pos1, ipl) val = str:sub(pos1, (pos2 or lenplone) - 1) spos1, spos2 = val:find(psp, 1, ppl) if spos1 == nil then key = idx if tru then val = val:match'^%s*(.-)%s*$' end idx = idx + 1 else key = get_param_name(val:sub(1, spos1 - 1)) val = val:sub(spos2 + 1) if trn then val = val:match'^%s*(.-)%s*$' end end tbl[key] = val until pos2 == nil return end -- Heavy lifting for `snapshotting` and `remembering` local function make_child (ctx, src, whoami) local len = tonumber(ctx.pipe[ctx.fnpos + 1]) if len == nil or len == 0 then local stack = new_substack(ctx) for key, val in pairs(src) do stack[key] = val end return len == nil and 1 or 2 end if len < 0 or math.floor(len) ~= len then error(modulename .. ', ‘' .. whoami .. '’: The number of parameters to copy must be an integer greater than zero', 0) end copy_table_maxn(new_substack(ctx), src, len) return 2 end -- Heavy lifting for `setting_by_flushing`, `combining` and `combining_values` local function set_strings_from_substack (ctx, dest, whoami) if ctx.n_children < 1 then error(modulename .. ', ‘' .. whoami .. '’: There are no substacks to flush', 0) end local currsnap = ctx.n_children local stack = ctx.children[currsnap] for key, val in pairs(memoryslots) do if stack[key] ~= nil then dest[val] = stack[key] end end ctx.children[currsnap], ctx.n_children = nil, currsnap - 1 end -- Heavy lifting for `combining` and `combining_values` local function combine_parameters (ctx, keyval_fn, whoami) -- NOTE: `ctx.params` might be the original metatable! This function -- MUST create a copy of it before returning local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘' .. whoami .. '’: No parameter name was provided', 0) end local argc local tbl, vars = ctx.params, {} local sortfn, ivar0, dosort, tmp = load_sort_opt(opts[offs + 2]) if ivar0 == 2 then tmp = opts[offs + 3] ~= nil and opts[offs + 3]:match'^%s*(.*%S)' end ivar0 = ivar0 + offs if tmp == 'with_flushed_glue' then ivar0 = ivar0 + 1 argc = set_strings_from_opts(vars, opts, ivar0 + 1) set_strings_from_substack(ctx, vars, whoami) else if tmp == 'without_flushed_glue' then ivar0 = ivar0 + 1 end argc = set_strings_from_opts(vars, opts, ivar0 + 1) end if argc < ivar0 then error(modulename .. ', ‘' .. whoami .. '’: No setting directive was given', 0) end if next(tbl) == nil then if vars.ifngiven ~= nil then ctx.params = { [get_param_name(opts[offs + 1])] = vars.ifngiven } elseif tbl == ctx.oparams then ctx.params = {} end return argc + 1 end local cache, len if dosort then local words cache, words, len, tmp = get_sorted_key_list(tbl, sortfn) for idx = 1, tmp do cache[len + idx] = words[idx] end len = len + tmp else cache, len = {}, 1 for key in pairs(tbl) do cache[len], len = key, len + 1 end len = len - 1 end local pmap, nss, kvs, pps = {}, 0, vars.pairsep or '', vars.itersep or '' for idx = 1, len do tmp, pmap[nss + 1] = cache[idx], pps pmap[nss + 2] = keyval_fn(tmp, tbl[tmp], kvs) nss = nss + 2 end tmp = vars.oxfordsep or vars.lastsep if tmp ~= nil and nss > 4 then pmap[nss - 1] = tmp elseif nss > 2 and vars.lastsep ~= nil then pmap[nss - 1] = vars.lastsep end pmap[1] = vars.header or '' if vars.footer ~= nil then pmap[nss + 1] = vars.footer end ctx.params = { [get_param_name(opts[offs + 1])] = table.concat(pmap) } return argc + 1 end -- Concatenate the numeric keys from the table of parameters to the numeric -- keys from the table of options; non-numeric keys from the table of options -- will prevail over colliding non-numeric keys from the table of parameters local function concat_params (ctx, offs) local tbl, retval, cache, nmax = ctx.params, {}, {}, 0 for key, val in pairs(ctx.pipe) do if type(key) == 'number' then if key < 1 then cache[key] = val elseif key > offs then cache[key - offs] = val end if key > nmax then nmax = key end else cache[key] = val end end nmax = nmax - offs if ctx.subset == 1 then -- We need only the sequence for key, val in ipairs(tbl) do retval[key + nmax] = val end else if ctx.subset == -1 then for key in ipairs(tbl) do tbl[key] = nil end end for key, val in pairs(tbl) do if type(key) == 'number' and key > 0 then retval[key + nmax] = val else retval[key] = val end end end for key, val in pairs(cache) do retval[key] = val end return retval end -- Flush the parameters by calling a custom function for each value (after this -- function has been invoked `ctx.params` will be no longer usable) local function flush_params (ctx, fn) local tmp local tbl = ctx.params if ctx.subset == -1 then for key, val in ipairs(tbl) do tbl[key] = nil end elseif ctx.subset == 1 then if ctx.pins == nil then for key, val in ipairs(tbl) do fn(key, val) end return end tmp = {} for key, val in ipairs(tbl) do tmp[key] = val end tbl = tmp end if ctx.pins ~= nil then local marker = ctx.sorttype < 1 and ctx.subset ~= -1 or nil for idx = 1, #ctx.pins do tmp = ctx.pins[idx] if tbl[tmp] ~= nil then fn(tmp, tbl[tmp]) tbl[tmp] = marker end end if ctx.subset == 1 then for key, val in ipairs(tbl) do if val ~= true then fn(key, val) end end return end end if ctx.sorttype > 0 then local nums, words, nn, nw = get_sorted_key_list(tbl, natural_sort) if ctx.sorttype == 2 then for idx = 1, nw do fn(words[idx], tbl[words[idx]]) end for idx = 1, nn do fn(nums[idx], tbl[nums[idx]]) end return end for idx = 1, nn do fn(nums[idx], tbl[nums[idx]]) end for idx = 1, nw do fn(words[idx], tbl[words[idx]]) end return end if ctx.subset == -1 or ctx.pins == nil then for key, val in ipairs(tbl) do fn(key, val) tbl[key] = nil end for key, val in pairs(tbl) do fn(key, val) end return end for key, val in ipairs(tbl) do if val ~= true then fn(key, val) end tbl[key] = nil end for key, val in pairs(tbl) do if val ~= true then fn(key, val) end end end -- Flush the parameters by calling one of two custom functions for each value -- (after this function has been invoked `ctx.params` will be no longer usable) local function mixed_flush_params (ctx, fn_seq, fn_oth) if ctx.subset == 1 then flush_params(ctx, fn_seq) return end if ctx.subset == -1 then flush_params(ctx, fn_oth) return end local tbl = ctx.params if ctx.pins == nil and ctx.sorttype < 1 then for key, val in ipairs(tbl) do fn_seq(key, val) tbl[key] = nil end for key, val in pairs(tbl) do fn_oth(key, val) end return end local tseq = {} for key, val in ipairs(tbl) do tseq[key] = val end if ctx.pins ~= nil then local tmp local marker = ctx.sorttype < 1 or nil for idx = 1, #ctx.pins do tmp = ctx.pins[idx] if tseq[tmp] ~= nil then fn_seq(tmp, tbl[tmp]) tbl[tmp], tseq[tmp] = nil, marker elseif tbl[tmp] ~= nil then fn_oth(tmp, tbl[tmp]) tbl[tmp] = nil end end end if ctx.sorttype > 0 then local nums, words, nn, nw = get_sorted_key_list(tbl, natural_sort) if ctx.sorttype == 2 then for idx = 1, nw do fn_oth(words[idx], tbl[words[idx]]) end end for idx = 1, nn do if tseq[nums[idx]] ~= nil then fn_seq(nums[idx], tseq[nums[idx]]) else fn_oth(nums[idx], tbl[nums[idx]]) end end if ctx.sorttype ~= 2 then for idx = 1, nw do fn_oth(words[idx], tbl[words[idx]]) end end return end for key, val in ipairs(tseq) do if val ~= true then fn_seq(key, val) tbl[key] = nil end end for key, val in pairs(tbl) do fn_oth(key, val) end end -- Finalize and return a concatenated list local function finalize_and_return_concatenated_list (ctx, lst, len, modsize) if len > 0 then local tmp = ctx.oxfordsep or ctx.lastsep if tmp ~= nil and len > modsize * 2 then lst[len - modsize + 1] = tmp elseif len > modsize and ctx.lastsep ~= nil then lst[len - modsize + 1] = ctx.lastsep end lst[1] = ctx.header or '' if ctx.footer ~= nil then lst[len + 1] = ctx.footer end ctx.text = table.concat(lst) else ctx.text = ctx.ifngiven or '' end end --- --- --- PUBLIC ENVIRONMENT --- --- ________________________________ --- --- --- --[[ Modifiers ]]-- ------------------- -- Syntax: #invoke:params|sequential|pipe to library.sequential = function (ctx) if ctx.subset == 1 then error(modulename .. ': The ‘sequential’ directive has been provided more than once', 0) end if ctx.subset == -1 then error(modulename .. ': The two directives ‘non-sequential’ and ‘sequential’ are in contradiction with each other', 0) end if ctx.sorttype > 0 then error(modulename .. ': The ‘all_sorted’ and ‘reassorted’ directives are redundant when followed by ‘sequential’', 0) end ctx.iterfunc, ctx.subset = ipairs, 1 return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|non-sequential|pipe to library['non-sequential'] = function (ctx) if ctx.subset == -1 then error(modulename .. ': The ‘non-sequential’ directive has been provided more than once', 0) end if ctx.subset == 1 then error(modulename .. ': The two directives ‘sequential’ and ‘non-sequential’ are in contradiction with each other', 0) end ctx.iterfunc, ctx.subset = pairs, -1 return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|all_sorted|pipe to library.all_sorted = function (ctx) if ctx.sorttype == 1 then error(modulename .. ': The ‘all_sorted’ directive has been provided more than once', 0) end if ctx.subset == 1 then error(modulename .. ': The ‘all_sorted’ directive is redundant after ‘sequential’', 0) end if ctx.sorttype == 2 then error(modulename .. ': The two directives ‘reassorted’ and ‘sequential’ are in contradiction with each other', 0) end ctx.sorttype = 1 return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|reassorted|pipe to library.reassorted = function (ctx) if ctx.sorttype == 2 then error(modulename .. ': The ‘reassorted’ directive has been provided more than once', 0) end if ctx.subset == 1 then error(modulename .. ': The ‘reassorted’ directive is redundant after ‘sequential’', 0) end if ctx.sorttype == 1 then error(modulename .. ': The two directives ‘sequential’ and ‘reassorted’ are in contradiction with each other', 0) end ctx.sorttype = 2 return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|pinned_until|sentinel|[parameter name 1]|[parameter -- name 2]|...|parameter name N|sentinel|pipe to library.pinned_until = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘pinned_until’: No sentinel was provided', 0) end local tmp, bucket, curr, ncurr local sntl, idx = opts[offs + 1]:match'^%s*(.-)%s*$', 2 if ctx.pin_bucket == nil then bucket, curr, ncurr = {}, {}, 0 ctx.pin_bucket, ctx.pins = bucket, curr else bucket, curr, ncurr = ctx.pin_bucket, ctx.pins, ctx.npins end while opts[offs + idx] ~= nil do tmp = opts[offs + idx]:match'^%s*(.-)%s*$' if tmp == sntl then if idx == 2 then error(modulename .. ', ‘pinned_until’: No parameters to pin were provided', 0) end ctx.npins = ncurr + idx - 2 return context_iterate(ctx, offs + idx + 1) end if tmp == '0' or tmp:find'^%-?[1-9]%d*$' ~= nil then tmp = tonumber(tmp) end if bucket[tmp] then error(modulename .. ', ‘pinned_until’: Duplicate pinned parameter ‘' .. tostring(tmp) .. '’', 0) end curr[ncurr + idx - 1], bucket[tmp], idx = tmp, true, idx + 1 end error(modulename .. ', ‘pinned_until’: Missing sentinel in position #' .. tostring(idx), 0) end -- Syntax: #invoke:params|setting|directives|...|pipe to library.setting = function (ctx) local new_offs = set_strings_from_opts(ctx, ctx.pipe, ctx.fnpos + 1) if new_offs - ctx.fnpos < 2 then error(modulename .. ', ‘setting’: No directive was given', 0) end return context_iterate(ctx, new_offs + 1) end -- Syntax: #invoke:params|scoring|new parameter name|[container]|pipe to library.scoring = function (ctx) local opts, offs, retval = ctx.pipe, ctx.fnpos, 0 if opts[offs + 1] == nil then error(modulename .. ', ‘scoring’: No parameter name was provided', 0) end for _ in pairs(ctx.params) do retval = retval + 1 end local tn = opts[offs + 2] and opts[offs + 2]:match'^%s*(.*%S)' if tn == 'in_substack' then new_substack(ctx)[get_param_name(opts[offs + 1])] = tostring(retval) return context_iterate(ctx, offs + 3) end ctx.params[get_param_name(opts[offs + 1])] = tostring(retval) return tn == 'here' and context_iterate(ctx, offs + 3) or context_iterate(ctx, offs + 2, tn) end -- Syntax: #invoke:params|squeezing|pipe to library.squeezing = function (ctx) local store, indices, tbl, newlen = {}, {}, ctx.params, 0 for key, val in pairs(tbl) do if type(key) == 'number' then newlen = newlen + 1 indices[newlen], store[key], tbl[key] = key, val, nil end end table.sort(indices) for idx = 1, newlen do tbl[idx] = store[indices[idx]] end return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|filling_the_gaps|pipe to library.filling_the_gaps = function (ctx) local newval, tbl, tmp, nmin, nmax, nnums = ctx.pipe[ctx.fnpos + 1], ctx.params, {}, 1, nil, -1 if newval == nil then error(modulename .. ', ‘filling_the_gaps’: No value was provided', 0) end for key, val in pairs(tbl) do if type(key) == 'number' then if nmax == nil then if key < nmin then nmin = key end nmax = key elseif key > nmax then nmax = key elseif key < nmin then nmin = key end tmp[key], nnums = val, nnums + 1 end end if nmax ~= nil and nmax - nmin > nnums then ctx.n_available = ctx.n_available + nmin + nnums - nmax if ctx.n_available < 0 then error(modulename .. ', ‘filling_the_gaps’: It is possible to fill at most ' .. tostring(maxfill) .. ' parameters', 0) end for idx = nmin, nmax do tbl[idx] = newval end for key, val in pairs(tmp) do tbl[key] = val end end return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|clearing|pipe to library.clearing = function (ctx) local tbl, numerics = ctx.params, {} for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key], tbl[key] = val, nil end end for key, val in ipairs(numerics) do tbl[key] = val end return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|cutting|left cut|right cut|pipe to library.cutting = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local lcut = tonumber(opts[offs + 1]) if lcut == nil or math.floor(lcut) ~= lcut then error(modulename .. ', ‘cutting’: Left cut must be an integer number', 0) end local rcut = tonumber(opts[offs + 2]) if rcut == nil or math.floor(rcut) ~= rcut then error(modulename .. ', ‘cutting’: Right cut must be an integer number', 0) end local tbl = ctx.params local len = #tbl if lcut < 0 then lcut = len + lcut end if rcut < 0 then rcut = len + rcut end local tot = lcut + rcut if tot > 0 then local cache = {} if tot >= len then for key in ipairs(tbl) do tbl[key] = nil end tot = len else for idx = len - rcut + 1, len do tbl[idx] = nil end for idx = 1, lcut do tbl[idx] = nil end end for key, val in pairs(tbl) do if type(key) == 'number' and key > 0 then if key > len then cache[key - tot] = val else cache[key - lcut] = val end tbl[key] = nil end end for key, val in pairs(cache) do tbl[key] = val end end return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|cropping|left crop|right crop|pipe to library.cropping = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local lcut = tonumber(opts[offs + 1]) if lcut == nil or math.floor(lcut) ~= lcut then error(modulename .. ', ‘cropping’: Left crop must be an integer number', 0) end local rcut = tonumber(opts[offs + 2]) if rcut == nil or math.floor(rcut) ~= rcut then error(modulename .. ', ‘cropping’: Right crop must be an integer number', 0) end local tbl = ctx.params local nmin, nmax for key in pairs(tbl) do if type(key) == 'number' then if nmin == nil then nmin, nmax = key, key elseif key > nmax then nmax = key elseif key < nmin then nmin = key end end end if nmin ~= nil then local len = nmax - nmin + 1 if lcut < 0 then lcut = len + lcut end if rcut < 0 then rcut = len + rcut end if lcut + rcut - len > -1 then for key in pairs(tbl) do if type(key) == 'number' then tbl[key] = nil end end elseif lcut + rcut > 0 then for idx = nmax - rcut + 1, nmax do tbl[idx] = nil end for idx = nmin, nmin + lcut - 1 do tbl[idx] = nil end local lshift = nmin + lcut - 1 if lshift > 0 then for idx = lshift + 1, nmax do tbl[idx - lshift], tbl[idx] = tbl[idx], nil end end end end return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|purging|start offset|length|pipe to library.purging = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local idx = tonumber(opts[offs + 1]) if idx == nil or math.floor(idx) ~= idx then error(modulename .. ', ‘purging’: Start offset must be an integer number', 0) end local len = tonumber(opts[offs + 2]) if len == nil or math.floor(len) ~= len then error(modulename .. ', ‘purging’: Length must be an integer number', 0) end local tbl = ctx.params if len < 1 then len = len + table.maxn(tbl) if idx > len then return context_iterate(ctx, offs + 3) end len = len - idx + 1 end ctx.params = copy_table_reduced(tbl, idx, len) return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|backpurging|start offset|length|pipe to library.backpurging = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local last = tonumber(opts[offs + 1]) if last == nil or math.floor(last) ~= last then error(modulename .. ', ‘backpurging’: Start offset must be an integer number', 0) end local len = tonumber(opts[offs + 2]) if len == nil or math.floor(len) ~= len then error(modulename .. ', ‘backpurging’: Length must be an integer number', 0) end local idx local tbl = ctx.params if len > 0 then idx = last - len + 1 else for key in pairs(tbl) do if type(key) == 'number' and (idx == nil or key < idx) then idx = key end end if idx == nil then return context_iterate(ctx, offs + 3) end idx = idx - len if last < idx then return context_iterate(ctx, offs + 3) end len = last - idx + 1 end ctx.params = copy_table_reduced(ctx.params, idx, len) return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|shifting|addend|pipe to library.shifting = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local nshift = tonumber(ctx.pipe[ctx.fnpos + 1]) if nshift == nil or nshift == 0 or math.floor(nshift) ~= nshift then error(modulename .. ', ‘shifting’: A non-zero integer number must be provided', 0) end local tbl = {} for key, val in pairs(ctx.params) do if type(key) == 'number' then tbl[key + nshift] = val else tbl[key] = val end end ctx.params = tbl return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|reversing_numeric_names|pipe to library.reversing_numeric_names = function (ctx) local tbl, numerics, nmax = ctx.params, {}, 0 for key, val in pairs(tbl) do if type(key) == 'number' then numerics[key], tbl[key] = val, nil if key > nmax then nmax = key end end end for key, val in pairs(numerics) do tbl[nmax - key + 1] = val end return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|pivoting_numeric_names|pipe to --[[ library.pivoting_numeric_names = function (ctx) local tbl = ctx.params local shift = #tbl + 1 if shift < 2 then return library.reversing_numeric_names(ctx) end local tmp = {} for key, val in pairs(tbl) do if type(key) == 'number' then tmp[key], tbl[key] = val, nil end end for key, val in pairs(tmp) do tbl[shift - key] = val end return context_iterate(ctx, ctx.fnpos + 1) end ]]-- -- Syntax: #invoke:params|mirroring_numeric_names|pipe to --[[ library.mirroring_numeric_names = function (ctx) local nmax, nmin local tbl, tmp = ctx.params, {} for key, val in pairs(tbl) do if type(key) == 'number' then tmp[key], tbl[key] = val, nil if nmax == nil then nmin, nmax = key, key elseif key > nmax then nmax = key elseif key < nmin then nmin = key end end end for key, val in pairs(tmp) do tbl[nmax + nmin - key] = val end return context_iterate(ctx, ctx.fnpos + 1) end ]]-- -- Syntax: #invoke:params|swapping_numeric_names|pipe to --[[ library.swapping_numeric_names = function (ctx) local tmp local tbl, cache, nsize = ctx.params, {}, 1 for key in pairs(tbl) do if type(key) == 'number' then cache[nsize], nsize = key, nsize + 1 end end table.sort(cache) for idx = math.floor((nsize - 1) / 2), 1, -1 do tmp = tbl[cache[idx] ] tbl[cache[idx] ] = tbl[cache[nsize - idx] ] tbl[cache[nsize - idx] ] = tmp end return context_iterate(ctx, ctx.fnpos + 1) end ]]-- -- Syntax: #invoke:params|sorting_sequential_values|[criterion]|pipe to library.sorting_sequential_values = function (ctx) local sortfn local opts, offs = ctx.pipe, ctx.fnpos local tn = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if tn ~= nil then sortfn = sortfunctions[tn] end if sortfn then table.sort(ctx.params, sortfn) else table.sort(ctx.params) end -- i.e. either `false` or `nil` if sortfn == nil then return context_iterate(ctx, offs + 1, tn) end return context_iterate(ctx, offs + 2) end -- Syntax: #invoke:params|splicing|[add to position]|position|increment| -- [number of elements to write]|...|pipe to library.splicing = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local tmp2, argc, pos, refp local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local tmp1 = opts[offs + 1] if tmp1 ~= nil then tmp2 = tonumber(tmp1) if tmp2 == nil or math.floor(tmp2) ~= tmp2 then pos, argc, tmp2 = tonumber(opts[offs + 2]), offs + 4, tmp1:match'^%s*(.*%S)' if tmp2 ~= nil then refp = position_references[tmp2] if refp == nil then error(modulename .. ', ‘splicing’: ‘' .. tostring(tmp2) .. '’ is not a valid first argument', 0) end else refp = 0 end else pos, argc, refp = tmp2, offs + 3, 0 end else pos, argc, refp = tonumber(opts[offs + 2]), offs + 4, 0 end if pos == nil or math.floor(pos) ~= pos then error(modulename .. ', ‘splicing’: The position must be an integer number', 0) end local len = tonumber(opts[argc - 1]) if len == nil or math.floor(len) ~= len then error(modulename .. ', ‘splicing’: The increment must be an integer number', 0) end local insn = tonumber(opts[argc]) if len == 0 and (insn == nil or insn < 1) then error(modulename .. ', ‘splicing’: When the increment is zero the number of elements to write cannot be zero', 0) end if refp == 2 then for _ in ipairs(tbl) do pos = pos + 1 end refp = 0 end tmp1, tmp2 = nil, nil if refp ~= 0 or len ~= 0 then for key, val in pairs(tbl) do if type(key) == 'number' then if tmp1 == nil then tmp1, tmp2 = key, key elseif key < tmp1 then tmp1 = key elseif key > tmp2 then tmp2 = key end end end end if tmp2 == nil then len = 0 elseif refp == 3 then pos = pos + tmp2 elseif refp == 1 then pos = pos + tmp1 end if len > 0 and pos + len > tmp1 and pos <= tmp2 then tbl = copy_table_expanded(tbl, pos, len) elseif len < 0 and pos - len > tmp1 and pos <= tmp2 then tbl = copy_table_reduced(tbl, pos, -len) else tbl = copy_or_ref_table(tbl, tbl ~= ctx.oparams) end ctx.params = tbl if insn == nil or insn < 0 or math.floor(insn) ~= insn then return context_iterate(ctx, argc) end tmp1 = argc - offs - pos + 1 for key = pos, pos + insn - 1 do tbl[key] = opts[offs + key + tmp1] end return context_iterate(ctx, argc + insn + 1) end -- Syntax: #invoke:params|imposing|name|value|pipe to library.imposing = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘imposing’: Missing parameter name to impose', 0) end ctx.params[get_param_name(opts[offs + 1])] = opts[offs + 2] return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|providing|name|value|pipe to library.providing = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘providing’: Missing parameter name to provide', 0) end local key = get_param_name(opts[offs + 1]) if ctx.params[key] == nil then ctx.params[key] = opts[offs + 2] end return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|reassigning|source|destination|[mode]|pipe to library.reassigning = function (ctx) local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘reassigning’: Missing source parameter', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘reassigning’: Missing destination parameter', 0) end local mode, argc local src, tn = get_param_name(opts[offs + 1]), opts[offs + 3] ~= nil and opts[offs + 3]:match'^%s*(.*%S)' local val = tbl[src] if tn ~= nil then mode = a_modes[tn] end if mode == nil then mode, argc = 0, offs + 3 else argc, tn = offs + 4, nil end if val == nil and mode > 1 then return context_iterate(ctx, argc, tn) end local dest = get_param_name(opts[offs + 2]) local tmp = tbl[dest] == nil if mode % 2 == 0 or (mode == 7 and tmp) then tbl[src] = nil end if tmp or mode < 4 then tbl[dest] = val end return context_iterate(ctx, argc, tn) end -- Syntax: #invoke:params|discarding|name|[how many]|pipe to library.discarding = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘discarding’: Missing parameter name to discard', 0) end local len = tonumber(opts[offs + 2]) if len == nil then ctx.params[get_param_name(opts[offs + 1])] = nil return context_iterate(ctx, offs + 2) end local key = tonumber(opts[offs + 1]) if key == nil or math.floor(key) ~= key then error(modulename .. ', ‘discarding’: A range was provided, but the initial parameter name is not an integer number', 0) end if len < 1 or math.floor(len) ~= len then error(modulename .. ', ‘discarding’: A range can only be an integer number greater than zero', 0) end for idx = key, key + len - 1 do ctx.params[idx] = nil end return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|excluding_non-numeric_names|pipe to library['excluding_non-numeric_names'] = function (ctx) local tmp = ctx.params for key, val in pairs(tmp) do if type(key) ~= 'number' then tmp[key] = nil end end return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|excluding_numeric_names|pipe to library.excluding_numeric_names = function (ctx) local tmp = ctx.params for key, val in pairs(tmp) do if type(key) == 'number' then tmp[key] = nil end end return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|with_name_matching|target 1|[plain flag 1]|[or]| -- [target 2]|[plain flag 2]|[or]|[...]|[target N]|[plain flag -- N]|pipe to library.with_name_matching = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local tmp, ptn local tbl, newparams, opts, offs = ctx.params, {}, ctx.pipe, ctx.fnpos local targets, nptns, argc, tn = load_pattern_args(opts, offs, 'with_name_matching') for idx = 1, nptns do ptn = targets[idx] if ptn[3] then tmp = ptn[1] if tmp == '0' or tmp:find'^%-?[1-9]%d*$' ~= nil then tmp = tonumber(tmp) end newparams[tmp] = tbl[tmp] else for key, val in pairs(tbl) do if tostring(key):find(ptn[1], 1, ptn[2]) then newparams[key] = val end end end end ctx.params = newparams return context_iterate(ctx, argc, tn) end -- Syntax: #invoke:params|with_name_not_matching|target 1|[plain flag 1]| -- [and]|[target 2]|[plain flag 2]|[and]|[...]|[target N]|[plain -- flag N]|pipe to library.with_name_not_matching = function (ctx) local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local targets, nptns, argc, tn = load_pattern_args(opts, offs, 'with_name_not_matching') if nptns == 1 and targets[1][3] then local tmp = targets[1][1] if tmp == '0' or tmp:find'^%-?[1-9]%d*$' ~= nil then tbl[tonumber(tmp)] = nil else tbl[tmp] = nil end return context_iterate(ctx, argc, tn) end local yesmatch, ptn for key in pairs(tbl) do yesmatch = true for idx = 1, nptns do ptn = targets[idx] if ptn[3] then if tostring(key) ~= ptn[1] then yesmatch = false break end elseif not tostring(key):find(ptn[1], 1, ptn[2]) then yesmatch = false break end end if yesmatch then tbl[key] = nil end end return context_iterate(ctx, argc, tn) end -- Syntax: #invoke:params|with_value_matching|target 1|[plain flag 1]|[or]| -- [target 2]|[plain flag 2]|[or]|[...]|[target N]|[plain flag -- N]|pipe to library.with_value_matching = function (ctx) local nomatch, ptn local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local targets, nptns, argc, tn = load_pattern_args(opts, offs, 'with_value_matching') for key, val in pairs(tbl) do nomatch = true for idx = 1, nptns do ptn = targets[idx] if ptn[3] then if val == ptn[1] then nomatch = false break end elseif val:find(ptn[1], 1, ptn[2]) then nomatch = false break end end if nomatch then tbl[key] = nil end end return context_iterate(ctx, argc, tn) end -- Syntax: #invoke:params|with_value_not_matching|target 1|[plain flag 1]| -- [and]|[target 2]|[plain flag 2]|[and]|[...]|[target N]|[plain -- flag N]|pipe to library.with_value_not_matching = function (ctx) local yesmatch, ptn local tbl, opts, offs = ctx.params, ctx.pipe, ctx.fnpos local targets, nptns, argc, tn = load_pattern_args(opts, offs, 'with_value_not_matching') for key, val in pairs(tbl) do yesmatch = true for idx = 1, nptns do ptn = targets[idx] if ptn[3] then if val ~= ptn[1] then yesmatch = false break end elseif not val:find(ptn[1], 1, ptn[2]) then yesmatch = false break end end if yesmatch then tbl[key] = nil end end return context_iterate(ctx, argc, tn) end -- Syntax: #invoke:params|keeping_at_most|number of parameters to pick|pipe to library.keeping_at_most = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local len = tonumber(ctx.pipe[ctx.fnpos + 1]) if len == nil or len < 1 or math.floor(len) ~= len then error(modulename .. ', ‘keeping_at_most’: The number of parameters to keep must be an integer greater than zero', 0) end ctx.params = copy_table_maxn({}, ctx.params, len) return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|trimming_values|pipe to library.trimming_values = function (ctx) local tbl = ctx.params for key, val in pairs(tbl) do tbl[key] = val:match'^%s*(.-)%s*$' end return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|mapping_to_lowercase|pipe to library.mapping_to_lowercase = function (ctx) local tbl = ctx.params for key, val in pairs(tbl) do tbl[key] = val:lower() end return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|mapping_to_uppercase|pipe to library.mapping_to_uppercase = function (ctx) local tbl = ctx.params for key, val in pairs(tbl) do tbl[key] = val:upper() end return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|mapping_by_calling|template name|[call -- style]|[let/use]|[...]|[let/use]|[...]|[number of additional -- parameters]|[parameter 1]|[parameter 2]|[...]|[parameter N]|pipe to library.mapping_by_calling = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local tname = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if tname == nil then error(modulename .. ', ‘mapping_by_calling’: No template name was provided', 0) end local margs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, offs + 1, mapping_styles.values_only, ctx.params) local model = { title = tname, args = margs } value_maps[looptype](tbl, margs, karg, varg, function () return ctx.frame:expandTemplate(model) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|mapping_by_invoking|module name|function name|[call -- style]|[let/use]|[...]|[let/use]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.mapping_by_invoking = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local mname = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if mname == nil then error(modulename .. ', ‘mapping_by_invoking’: No module name was provided', 0) end local fname = opts[offs + 2] and opts[offs + 2]:match'^%s*(.*%S)' if fname == nil then error(modulename .. ', ‘mapping_by_invoking’: No function name was provided', 0) end local margs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, offs + 2, mapping_styles.values_only, ctx.params) local model = { title = 'Module:' .. mname, args = margs } local mfunc = require(model.title)[fname] if mfunc == nil then error(modulename .. ', ‘mapping_by_invoking’: The function ‘' .. fname .. '’ does not exist', 0) end value_maps[looptype](tbl, margs, karg, varg, function () return tostring(mfunc(ctx.frame:newChild(model))) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|mapping_by_magic|parser function|[call -- style]|[let/use]|[...]|[let/use]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.mapping_by_magic = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local magic = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if magic == nil then error(modulename .. ', ‘mapping_by_magic’: No parser function was provided', 0) end local margs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, offs + 1, mapping_styles.values_only, ctx.params) value_maps[looptype](tbl, margs, karg, varg, function () return ctx.frame:callParserFunction(magic, margs) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|mapping_by_replacing|target|replace|[count]|[plain -- flag]|pipe to library.mapping_by_replacing = function (ctx) local ptn, repl, nmax, flg, argc, die, tn = load_replace_args(ctx.pipe, ctx.fnpos, 'mapping_by_replacing') if die then return context_iterate(ctx, argc, tn) end local tbl = ctx.params if flg == 3 then for key, val in pairs(tbl) do if val == ptn then tbl[key] = repl end end else if flg == 2 then -- Copied from Module:String's `str._escapePattern()` ptn = ptn:gsub('[%(%)%.%%%+%-%*%?%[%^%$%]]', '%%%0') end for key, val in pairs(tbl) do tbl[key] = val:gsub(ptn, repl, nmax) end end return context_iterate(ctx, argc, tn) end -- Syntax: #invoke:params|mapping_by_mixing|mixing string|pipe to library.mapping_by_mixing = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘mapping_by_mixing’: No mixing string was provided', 0) end local tbl, mix = ctx.params, opts[offs + 1] if mix == '$#' then for key in pairs(tbl) do tbl[key] = tostring(key) end return context_iterate(ctx, offs + 2) end local skel, cnv, n_parts = parse_placeholder_string(mix) for key, val in pairs(tbl) do for idx = 2, n_parts, 2 do if skel[idx] then cnv[idx] = val else cnv[idx] = tostring(key) end end tbl[key] = table.concat(cnv) end return context_iterate(ctx, offs + 2) end -- Syntax: #invoke:params|renaming_to_lowercase|pipe to library.renaming_to_lowercase = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local cache = {} for key, val in pairs(ctx.params) do if type(key) == 'string' then cache[key:lower()] = val else cache[key] = val end end ctx.params = cache return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|renaming_to_uppercase|pipe to library.renaming_to_uppercase = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local cache = {} for key, val in pairs(ctx.params) do if type(key) == 'string' then cache[key:upper()] = val else cache[key] = val end end ctx.params = cache return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|renaming_to_sequence|[sort order]|pipe to library.renaming_to_sequence = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local cache, len local tbl = ctx.params local sortfn, argc, dosort, tn = load_sort_opt(ctx.pipe[ctx.fnpos + 1]) if dosort then local words, wl cache, words, len, wl = get_sorted_key_list(tbl, sortfn) for idx = 1, len do cache[idx] = tbl[cache[idx]] end for idx = 1, wl do cache[len + idx] = tbl[words[idx]] end else cache, len = {}, 1 for _, val in pairs(tbl) do cache[len], len = val, len + 1 end end ctx.params = cache return context_iterate(ctx, ctx.fnpos + argc, tn) end -- Syntax: #invoke:params|renaming_by_calling|template name|[call -- style]|[let/use]|[...]|[let/use]|[...]|[number of additional -- parameters]|[parameter 1]|[parameter 2]|[...]|[parameter N]|pipe to library.renaming_by_calling = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local tname = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if tname == nil then error(modulename .. ', ‘renaming_by_calling’: No template name was provided', 0) end local rargs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, offs + 1, mapping_styles.names_only, ctx.params) local model = { title = tname, args = rargs } map_names(tbl, rargs, karg, varg, looptype, function () return ctx.frame:expandTemplate(model) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_invoking|module name|function -- name|[call style]|[let/use]|[...]|[let/use]|[...]|[number of -- additional arguments]|[argument 1]|[argument 2]|[...]|[argument -- N]|pipe to library.renaming_by_invoking = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local mname = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if mname == nil then error(modulename .. ', ‘renaming_by_invoking’: No module name was provided', 0) end local fname = opts[offs + 2] and opts[offs + 2]:match'^%s*(.*%S)' if fname == nil then error(modulename .. ', ‘renaming_by_invoking’: No function name was provided', 0) end local rargs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, offs + 2, mapping_styles.names_only, ctx.params) local model = { title = 'Module:' .. mname, args = rargs } local mfunc = require(model.title)[fname] if mfunc == nil then error(modulename .. ', ‘renaming_by_invoking’: The function ‘' .. fname .. '’ does not exist', 0) end map_names(tbl, rargs, karg, varg, looptype, function () return tostring(mfunc(ctx.frame:newChild(model))) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_magic|parser function|[call -- style]|[let/use]|[...]|[let/use]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.renaming_by_magic = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local magic = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if magic == nil then error(modulename .. ', ‘renaming_by_magic’: No parser function was provided', 0) end local rargs, argc, looptype, karg, varg, tbl, mem = load_callback_opts(opts, offs + 1, mapping_styles.names_only, ctx.params) map_names(tbl, rargs, karg, varg, looptype, function () return ctx.frame:callParserFunction(magic, rargs) end) for key, val in pairs(mem) do tbl[key] = val end ctx.params = tbl return context_iterate(ctx, argc) end -- Syntax: #invoke:params|renaming_by_replacing|target|replace|[count]|[plain -- flag]|pipe to library.renaming_by_replacing = function (ctx) local ptn, repl, nmax, flg, argc, die, tn = load_replace_args(ctx.pipe, ctx.fnpos, 'renaming_by_replacing') if die then return context_iterate(ctx, argc, tn) end local tbl = ctx.params if flg == 3 then ptn = get_param_name(ptn) local val = tbl[ptn] if val ~= nil then tbl[ptn], tbl[get_param_name(repl)] = nil, val end else if flg == 2 then -- Copied from Module:String's `str._escapePattern()` ptn = ptn:gsub('[%(%)%.%%%+%-%*%?%[%^%$%]]', '%%%0') end local cache = {} for key, val in pairs(tbl) do steal_if_renamed(val, tbl, key, cache, tostring(key):gsub(ptn, repl, nmax)) end for key, val in pairs(cache) do tbl[key] = val end end return context_iterate(ctx, argc, tn) end -- Syntax: #invoke:params|renaming_by_mixing|mixing string|pipe to library.renaming_by_mixing = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local mix = ctx.pipe[ctx.fnpos + 1] if mix == nil then error(modulename .. ', ‘renaming_by_mixing’: No mixing string was provided', 0) end local cache = {} mix = mix:match'^%s*(.-)%s*$' if mix == '$@' then for _, val in pairs(ctx.params) do cache[get_param_name(val)] = val end else local skel, canvas, n_parts = parse_placeholder_string(mix) for key, val in pairs(ctx.params) do for idx = 2, n_parts, 2 do if skel[idx] then canvas[idx] = val else canvas[idx] = tostring(key) end end cache[get_param_name(table.concat(canvas))] = val end end ctx.params = cache return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|grouping_by_calling|template -- name|[let/use]|[...]|[let/use]|[...]|[number of additional -- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to library.grouping_by_calling = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local opts, offs = ctx.pipe, ctx.fnpos local tmp, argc, tbl, mem = load_child_opts(opts, offs + 2, 0, ctx.params) local gargs = {} for key, val in pairs(tmp) do if type(key) == 'number' and key < 1 then gargs[key - 1] = val else gargs[key] = val end end tmp = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if tmp == nil then error(modulename .. ', ‘grouping_by_calling’: No template name was provided', 0) end local model = { title = tmp } local groups = make_groups(tbl) for gid, group in pairs(groups) do for key, val in pairs(gargs) do group[key] = val end group[0], model.args = gid, group groups[gid] = ctx.frame:expandTemplate(model) end for key, val in pairs(mem) do groups[key] = val end ctx.params = groups return context_iterate(ctx, argc) end -- Syntax: #invoke:params|parsing|string to parse|[trim flag]|[iteration -- delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe to library.parsing = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘parsing’: No string to parse was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc, tn = load_parse_opts(opts, offs + 2, '|', '=') parse_parameter_string(ctx.params, opts[offs + 1], isep, iplain, psep, pplain, trimnamed, trimunnamed) return context_iterate(ctx, argc, tn) end -- Syntax: #invoke:params|reinterpreting|parameter to reinterpret|[trim -- flag]|[iteration delimiter setter]|[...]|[key-value delimiter -- setter]|[...]|pipe to library.reinterpreting = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘reinterpreting’: No parameter to reinterpret was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc, tn = load_parse_opts(opts, offs + 2, '|', '=') local tbl, tmp = ctx.params, get_param_name(opts[offs + 1]) local str = tbl[tmp] if str ~= nil then tbl[tmp] = nil parse_parameter_string(tbl, str, isep, iplain, psep, pplain, trimnamed, trimunnamed) end return context_iterate(ctx, argc, tn) end -- Syntax: #invoke:params|evaluating|string to parse|[trim flag]|[iteration -- delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe to library.evaluating = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘evaluating’: No string to parse was provided', 0) end local isep, iplain, psep, pplain, trimnamed, trimunnamed, repos, tn = load_parse_opts(opts, offs + 2, '!', ':') if opts[offs + 1]:match'^%s*(.*%S)' == nil then remove_numeric_keys(opts, offs, repos - offs) return context_iterate(ctx, offs, tn) end local new_opts, cache = {}, {} parse_parameter_string(cache, opts[offs + 1], isep, iplain, psep, pplain, trimnamed, trimunnamed) local shift = #cache + offs - repos + 1 for key, val in pairs(opts) do if type(key) ~= 'number' or key < offs then new_opts[key] = val elseif key >= repos then new_opts[key + shift] = val end end for key, val in pairs(cache) do if type(key) ~= 'number' or key < 1 then new_opts[key] = val else new_opts[key + offs] = val end end ctx.pipe = new_opts return context_iterate(ctx, offs + 1) end -- Syntax: #invoke:params|mixing_names_and_values|mixing string|pipe to library.mixing_names_and_values = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘mixing_names_and_values’: No mixing string was provided for parameter names', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘mixing_names_and_values’: No mixing string was provided for parameter values', 0) end local tmp local cache, mix_k, mix_v = {}, opts[offs + 1]:match'^%s*(.-)%s*$', opts[offs + 2] if mix_k == '$@' and mix_v == '$@' then for _, val in pairs(ctx.params) do cache[get_param_name(val)] = val end elseif mix_k == '$@' and mix_v == '$#' then for key, val in pairs(ctx.params) do cache[get_param_name(val)] = tostring(key) end elseif mix_k == '$#' and mix_v == '$#' then for key in pairs(ctx.params) do cache[key] = tostring(key) end else local skel_k, cnv_k, n_parts_k = parse_placeholder_string(mix_k) local skel_v, cnv_v, n_parts_v = parse_placeholder_string(mix_v) for key, val in pairs(ctx.params) do tmp = tostring(key) for idx = 2, n_parts_k, 2 do if skel_k[idx] then cnv_k[idx] = val else cnv_k[idx] = tmp end end for idx = 2, n_parts_v, 2 do if skel_v[idx] then cnv_v[idx] = val else cnv_v[idx] = tmp end end cache[get_param_name(table.concat(cnv_k))] = table.concat(cnv_v) end end ctx.params = cache return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|combining|new parameter name|[sort -- order]|[with/without flushed glue]|setting directives|...|pipe to library.combining = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning return context_iterate(ctx, combine_parameters( ctx, function (key, val, kvs) return key .. kvs .. val end, 'combining' )) end -- Syntax: #invoke:params|combining_values|new parameter name|[sort -- order]|[with/without flushed glue]|setting directives|...|pipe to library.combining_values = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning return context_iterate(ctx, combine_parameters( ctx, function (key, val, kvs) return val end, 'combining_values' )) end -- Syntax: #invoke:params|combining_by_calling|template name|new parameter -- name|pipe to library.combining_by_calling = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local opts, offs = ctx.pipe, ctx.fnpos local tname = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if tname == nil then error(modulename .. ', ‘combining_by_calling’: No template name was provided', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘combining_by_calling’: No parameter name was provided', 0) end ctx.params = { [get_param_name(opts[offs + 2])] = ctx.frame:expandTemplate{ title = tname, args = ctx.params } } return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|combining_by_invoking|module name|function name|new -- parameter name|pipe to library.combining_by_invoking = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local opts, offs = ctx.pipe, ctx.fnpos local mname = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if mname == nil then error(modulename .. ', ‘combining_by_invoking’: No module name was provided', 0) end local fname = opts[offs + 2] and opts[offs + 2]:match'^%s*(.*%S)' if fname == nil then error(modulename .. ', ‘combining_by_invoking’: No function name was provided', 0) end if opts[offs + 3] == nil then error(modulename .. ', ‘combining_by_invoking’: No parameter name was provided', 0) end local model = { title = 'Module:' .. mname, args = ctx.params } local mfunc = require(model.title)[fname] if mfunc == nil then error(modulename .. ', ‘mapping_by_invoking’: The function ‘' .. fname .. '’ does not exist', 0) end ctx.params = { [get_param_name(opts[offs + 3])] = tostring(mfunc(ctx.frame:newChild(model))) } return context_iterate(ctx, offs + 4) end -- Syntax: #invoke:params|combining_by_magic|parser function|new parameter -- name|pipe to library.combining_by_magic = function (ctx) -- NOTE: `ctx.params` might be the original metatable! As a modifier, -- this function MUST create a copy of it before returning local opts, offs = ctx.pipe, ctx.fnpos local magic = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if magic == nil then error(modulename .. ', ‘combining_by_magic’: No parser function was provided', 0) end if opts[offs + 2] == nil then error(modulename .. ', ‘combining_by_magic’: No parameter name was provided', 0) end ctx.params = { [get_param_name(opts[offs + 2])] = ctx.frame:callParserFunction(magic, ctx.params) } return context_iterate(ctx, offs + 3) end -- Syntax: #invoke:params|snapshotting|[maximum number]|pipe to library.snapshotting = function (ctx) return context_iterate(ctx, ctx.fnpos + make_child(ctx, ctx.params, 'snapshotting')) end -- Syntax: #invoke:params|remembering|[maximum number]|pipe to library.remembering = function (ctx) return context_iterate(ctx, ctx.fnpos + make_child(ctx, ctx.oparams, 'remembering')) end -- Syntax: #invoke:params|entering_substack|[new]|pipe to library.entering_substack = function (ctx) local tbl, opts, offs, ncurrparent = ctx.params, ctx.pipe, ctx.fnpos, ctx.n_parents + 1 local tn = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if ctx.parents == nil then ctx.parents = { tbl } else ctx.parents[ncurrparent] = tbl end ctx.n_parents = ncurrparent if tn == 'new' then ctx.params = {} return context_iterate(ctx, offs + 2) end local currsnap = ctx.n_children if currsnap > 0 then ctx.params, ctx.children[currsnap], ctx.n_children = ctx.children[currsnap], nil, currsnap - 1 else local newparams = {} for key, val in pairs(tbl) do newparams[key] = val end ctx.params = newparams end return context_iterate(ctx, offs + 1, tn) end -- Syntax: #invoke:params|pulling|parameter name|pipe to library.pulling = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘pulling’: No parameter to pull was provided', 0) end local tmp = ctx.n_parents local parent = tmp < 1 and ctx.oparams or ctx.parents[tmp] tmp = get_param_name(opts[offs + 1]) if parent[tmp] ~= nil then ctx.params[tmp] = parent[tmp] end return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|recalling|parameter name|pipe to library.recalling = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘recalling’: No parameter to recall was provided', 0) end local arg = get_param_name(opts[offs + 1]) if ctx.oparams[arg] ~= nil then ctx.params[arg] = ctx.oparams[arg] end return context_iterate(ctx, ctx.fnpos + 2) end -- Syntax: #invoke:params|finding|parameter name|pipe to --[[ library.finding = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘finding’: No parameter to find was provided', 0) end local arg = get_param_name(opts[offs + 1]) local parent for idx = ctx.n_parents, 1, -1 do parent = ctx.parents[idx] if parent[arg] ~= nil then ctx.params[arg] = parent[arg] return context_iterate(ctx, offs + 2) end end if ctx.oparams[arg] ~= nil then ctx.params[arg] = ctx.oparams[arg] end return context_iterate(ctx, offs + 2) end ]]-- -- Syntax: #invoke:params|picking|number of parameters to pick|pipe to --[[ library.picking = function (ctx) local len = tonumber(ctx.pipe[ctx.fnpos + 1]) if len == nil or len < 1 or math.floor(len) ~= len then error(modulename .. ', ‘picking’: The number of parameters to pick must be an integer greater than zero', 0) end if ctx.n_parents < 1 then copy_table_maxn(ctx.params, ctx.oparams, len) else copy_table_maxn(ctx.params, ctx.parents[ctx.n_parents], len) end return context_iterate(ctx, ctx.fnpos + 2) end ]]-- -- Syntax: #invoke:params|detaching_substack|pipe to library.detaching_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘detaching_substack’: No substacks have been created', 0) end local parent = ctx.parents[ncurrparent] for key in pairs(ctx.params) do parent[key] = nil end return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|dropping_substack|pipe to library.dropping_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘dropping_substack’: No substacks have been created', 0) end ctx.params, ctx.parents[ncurrparent], ctx.n_parents = ctx.parents[ncurrparent], nil, ncurrparent - 1 return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|leaving_substack|pipe to library.leaving_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘leaving_substack’: No substacks have been created', 0) end local currsnap = ctx.n_children + 1 if ctx.children == nil then ctx.children = { ctx.params } else ctx.children[currsnap] = ctx.params end ctx.params, ctx.parents[ncurrparent], ctx.n_parents, ctx.n_children = ctx.parents[ncurrparent], nil, ncurrparent - 1, currsnap return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|merging_substack|pipe to library.merging_substack = function (ctx) local ncurrparent = ctx.n_parents if ncurrparent < 1 then error(modulename .. ', ‘merging_substack’: No substack has been created', 0) end local parent, child = ctx.parents[ncurrparent], ctx.params ctx.params, ctx.parents[ncurrparent], ctx.n_parents = parent, nil, ncurrparent - 1 for key, val in pairs(child) do parent[key] = val end return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|flushing|pipe to library.flushing = function (ctx) if ctx.n_children < 1 then error(modulename .. ', ‘flushing’: There are no substacks to flush', 0) end local parent, currsnap = ctx.params, ctx.n_children for key, val in pairs(ctx.children[currsnap]) do parent[key] = val end ctx.children[currsnap], ctx.n_children = nil, currsnap - 1 return context_iterate(ctx, ctx.fnpos + 1) end -- Syntax: #invoke:params|setting_by_flushing|pipe to library.setting_by_flushing = function (ctx) set_strings_from_substack(ctx, ctx, 'setting_by_flushing') return context_iterate(ctx, ctx.fnpos + 1) end --[[ Functions ]]-- ----------------------------- -- Syntax: #invoke:params|count library.count = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local retval = 0 for _ in ctx.iterfunc(ctx.params) do retval = retval + 1 end if ctx.subset == -1 then retval = retval - #ctx.params end ctx.text = retval return false end -- Syntax: #invoke:args|concat_and_call|template name|[prepend 1]|[prepend 2]| -- [...]|[item n]|[named item 1=value 1]|[...]|[named item n=value -- n]|[...] library.concat_and_call = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts, offs = ctx.pipe, ctx.fnpos local tname = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if tname == nil then error(modulename .. ', ‘concat_and_call’: No template name was provided', 0) end ctx.text = ctx.frame:expandTemplate{ title = tname, args = concat_params(ctx, offs + 1) } return false end -- Syntax: #invoke:args|concat_and_invoke|module name|function name|[prepend -- 1]|[prepend 2]|[...]|[item n]|[named item 1=value 1]|[...]|[named -- item n=value n]|[...] library.concat_and_invoke = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts, offs = ctx.pipe, ctx.fnpos local mname = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if mname == nil then error(modulename .. ', ‘concat_and_invoke’: No module name was provided', 0) end local fname = opts[offs + 2] and opts[offs + 2]:match'^%s*(.*%S)' if fname == nil then error(modulename .. ', ‘concat_and_invoke’: No function name was provided', 0) end local mfunc = require('Module:' .. mname)[fname] if mfunc == nil then error(modulename .. ', ‘concat_and_invoke’: The function ‘' .. fname .. '’ does not exist', 0) end ctx.text = mfunc(ctx.frame:newChild{ title = 'Module:' .. mname, args = concat_params(ctx, offs + 2) }) return false end -- Syntax: #invoke:args|concat_and_magic|parser function|[prepend 1]|[prepend -- 2]|[...]|[item n]|[named item 1=value 1]|[...]|[named item n= -- value n]|[...] library.concat_and_magic = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts, offs = ctx.pipe, ctx.fnpos local magic = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if magic == nil then error(modulename .. ', ‘concat_and_magic’: No parser function was provided', 0) end ctx.text = ctx.frame:callParserFunction(magic, concat_params(ctx, offs + 1)) return false end -- Syntax: #invoke:params|value_of|parameter name library.value_of = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts, offs = ctx.pipe, ctx.fnpos if opts[offs + 1] == nil then error(modulename .. ', ‘value_of’: No parameter name was provided', 0) end local val local key = opts[offs + 1]:match'^%s*(.-)%s*$' if key == '0' or key:find'^%-?[1-9]%d*$' ~= nil then key = tonumber(key) val = ctx.params[key] -- No worries: #ctx.params is unused when the modifier is in -- first position (and therefore `ctx.params` is a metatable) if val ~= nil and ( ctx.subset ~= -1 or key > #ctx.params or key < 1 ) and ( ctx.subset ~= 1 or (key <= #ctx.params and key > 0) ) then ctx.text = (ctx.header or '') .. val .. (ctx.footer or '') else ctx.text = ctx.ifngiven or '' end else val = ctx.params[key] if ctx.subset ~= 1 and val ~= nil then ctx.text = (ctx.header or '') .. val .. (ctx.footer or '') else ctx.text = ctx.ifngiven or '' end end return false end -- Syntax: #invoke:params|list library.list = function (ctx) local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or '' flush_params(ctx, function (key, val) ret[nss + 1], ret[nss + 2], ret[nss + 3], ret[nss + 4], nss = pps, key, kvs, val, nss + 4 end) finalize_and_return_concatenated_list(ctx, ret, nss, 4) return false end -- Syntax: #invoke:params|list_values library.list_values = function (ctx) -- NOTE: `library.coins()` and `library.unique_coins()` rely on us local ret, nss, pps = {}, 0, ctx.itersep or '' flush_params(ctx, function (key, val) ret[nss + 1], ret[nss + 2], nss = pps, val, nss + 2 end) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|list_maybe_with_names library.list_maybe_with_names = function (ctx) local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or '' mixed_flush_params( ctx, function (key, val) ret[nss + 1], ret[nss + 2], ret[nss + 3], ret[nss + 4], nss = pps, '', '', val, nss + 4 end, function (key, val) ret[nss + 1], ret[nss + 2], ret[nss + 3], ret[nss + 4], nss = pps, key, kvs, val, nss + 4 end ) finalize_and_return_concatenated_list(ctx, ret, nss, 4) return false end -- Syntax: #invoke:params|for_each|wikitext library.for_each = function (ctx) local ret, nss, pps, txt = {}, 0, ctx.itersep or '', ctx.pipe[ctx.fnpos + 1] or '' local skel, cnv, n_parts = parse_placeholder_string(txt) flush_params(ctx, function (key, val) for idx = 2, n_parts, 2 do if skel[idx] then cnv[idx] = val else cnv[idx] = tostring(key) end end ret[nss + 1], nss = pps, nss + 2 ret[nss] = table.concat(cnv) end) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|call_for_each|template name|[append 1]|[append 2]| -- [...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.call_for_each = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local tname = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if tname == nil then error(modulename .. ', ‘call_for_each’: No template name was provided', 0) end local cargs = copy_table_reduced(opts, 1, offs - 1) local model, ret, nss, ccs = { title = tname, args = cargs }, {}, 0, ctx.itersep or '' flush_params(ctx, function (key, val) cargs[1], cargs[2], ret[nss + 1], nss = key, val, ccs, nss + 2 ret[nss] = ctx.frame:expandTemplate(model) end) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|invoke_for_each|module name|module function|[append -- 1]|[append 2]|[...]|[append n]|[named param 1=value 1]|[...]| -- [named param n=value n]|[...] library.invoke_for_each = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local mname = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if mname == nil then error(modulename .. ', ‘invoke_for_each’: No module name was provided', 0) end local fname = opts[offs + 2] and opts[offs + 2]:match'^%s*(.*%S)' if fname == nil then error(modulename .. ', ‘invoke_for_each’: No function name was provided', 0) end local iargs = copy_table_reduced(ctx.pipe, 1, offs) local model = { title = 'Module:' .. mname, args = iargs } local mfunc, ret, nss, ccs = require(model.title)[fname], {}, 0, ctx.itersep or '' if mfunc == nil then error(modulename .. ', ‘invoke_for_each’: The function ‘' .. fname .. '’ does not exist', 0) end flush_params(ctx, function (key, val) iargs[1], iargs[2], ret[nss + 1], nss = key, val, ccs, nss + 2 ret[nss] = mfunc(ctx.frame:newChild(model)) end) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|magic_for_each|parser function|[append 1]|[append -- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.magic_for_each = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local magic = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if magic == nil then error(modulename .. ', ‘magic_for_each’: No parser function was provided', 0) end local ret, nss, ccs, cargs = {}, 0, ctx.itersep or '', copy_table_reduced(opts, 1, offs - 1) flush_params(ctx, function (key, val) cargs[1], cargs[2], ret[nss + 1], nss = key, val, ccs, nss + 2 ret[nss] = ctx.frame:callParserFunction(magic, cargs) end) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|call_for_each_value|template name|[append 1]|[append -- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.call_for_each_value = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local tname = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if tname == nil then error(modulename .. ', ‘call_for_each_value’: No template name was provided', 0) end local cargs = copy_table_reduced(ctx.pipe, 1, offs) local model = { title = tname, args = cargs } local ret, nss, ccs = {}, 0, ctx.itersep or '' flush_params(ctx, function (key, val) cargs[1], ret[nss + 1], nss = val, ccs, nss + 2 ret[nss] = ctx.frame:expandTemplate(model) end) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|invoke_for_each_value|module name|[append 1]|[append -- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.invoke_for_each_value = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local mname = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if mname == nil then error(modulename .. ', ‘invoke_for_each_value’: No module name was provided', 0) end local fname = opts[offs + 2] and opts[offs + 2]:match'^%s*(.*%S)' if fname == nil then error(modulename .. ', ‘invoke_for_each_value’: No function name was provided', 0) end local iargs = copy_table_reduced(ctx.pipe, 1, offs + 1) local model = { title = 'Module:' .. mname, args = iargs } local mfunc, ret, nss, ccs = require(model.title)[fname], {}, 0, ctx.itersep or '' if mfunc == nil then error(modulename .. ', ‘invoke_for_each_value’: The function ‘' .. fname .. '’ does not exist', 0) end flush_params(ctx, function (key, val) iargs[1], ret[nss + 1], nss = val, ccs, nss + 2 ret[nss] = mfunc(ctx.frame:newChild(model)) end) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|magic_for_each_value|parser function|[append 1]| -- [append 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named -- param n=value n]|[...] library.magic_for_each_value = function (ctx) local opts, offs = ctx.pipe, ctx.fnpos local magic = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if magic == nil then error(modulename .. ', ‘magic_for_each_value’: No parser function was provided', 0) end local cargs, ret, nss, ccs = copy_table_reduced(opts, 1, offs), {}, 0, ctx.itersep or '' flush_params(ctx, function (key, val) cargs[1], ret[nss + 1], nss = val, ccs, nss + 2 ret[nss] = ctx.frame:callParserFunction(magic, cargs) end) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end -- Syntax: #invoke:params|call_for_each_group|template name|[append 1]|[append -- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param -- n=value n]|[...] library.call_for_each_group = function (ctx) -- NOTE: `ctx.params` might be the original metatable! local opts, offs = ctx.pipe, ctx.fnpos local tmp = opts[offs + 1] and opts[offs + 1]:match'^%s*(.*%S)' if tmp == nil then error(modulename .. ', ‘call_for_each_group’: No template name was provided', 0) end local model = { title = tmp } local bargs, ret, nss, ccs = {}, {}, 0, ctx.itersep or '' for key, val in pairs(opts) do if type(key) ~= 'number' then bargs[key] = val elseif key > offs then bargs[key - offs - 1] = val elseif key < 1 then bargs[key - 1] = val end end ctx.params = make_groups(ctx.params) flush_params(ctx, function (gid, group) for key, val in pairs(bargs) do group[key] = val end group[0], model.args, ret[nss + 1], nss = gid, group, ccs, nss + 2 ret[nss] = ctx.frame:expandTemplate(model) end) finalize_and_return_concatenated_list(ctx, ret, nss, 2) return false end --[[ First-position-only modifiers ]]-- --------------------------------------- -- Syntax: #invoke:params|new|pipe to static_iface.new = function (child_frame) local ctx = context_new(child_frame, 'new') ctx.params = {} main_loop(ctx, context_iterate(ctx, 2)) return ctx.text end --[[ First-position-only functions ]]-- --------------------------------------- -- Syntax: #invoke:params|self static_iface.self = function (child_frame) return child_frame:getParent():getTitle() end --[[ Public metatable of functions ]]-- --------------------------------------- return setmetatable({}, { __index = function (_, query) local fname = query:match'^%s*(.*%S)' if fname == nil then error(modulename .. ': You must specify a function to call', 0) end local func = static_iface[fname] if func ~= nil then return func end func = library[fname] if func == nil then error(modulename .. ': The function ‘' .. fname .. '’ does not exist', 0) end return function (child_frame) local ctx = context_new(child_frame, fname) ctx.params = copy_or_ref_table(ctx.oparams, refparams[fname]) main_loop(ctx, func) return ctx.text end end }) ed6uj3jkl9sb18ckis1vsieht07yb7c ಟೆಂಪ್ಲೇಟ್:INRConvert/CurrentRate 10 18422 373871 352181 2026-07-21T22:39:25Z en>Paine Ellsworth 0 per edit request on talk page - update exchange rate 373871 wikitext text/x-wiki <noinclude>{{pp-template}}{{High-use}}{{asof|2026|07|21}}, 1 INR equals '''</noinclude>{{#switch: {{{1|USD}}} | AED = 0.03845809 | AUD = 0.01509900 | BDT = 1.29185864 | CAD = 0.01487353 | CNY = 0.07100111 | EUR = 0.00915632 | GBP = 0.00784404 | LKR = 3.51101276 | PKR = 2.91422122 | NZD = 0.01834491 | USD = 0.01038425 | JPY = 1.68998778 }}<noinclude>''' USD. Source: [[XE.com]] reported data at http://www.xe.com/. For USD converter, see http://themoneyconverter.com/INR/USD.aspx. This page was last edited on {{#time:j F Y|{{REVISIONYEAR}}-{{REVISIONMONTH}}-{{REVISIONDAY2}}}}.</noinclude> 7xpoo7qxyo6ibzn3ovlrfowkd7zysw2 373872 373871 2026-10-28T05:55:28Z ChiK 1136 1 revision imported from [[:en:Template:INRConvert/CurrentRate]] 373871 wikitext text/x-wiki <noinclude>{{pp-template}}{{High-use}}{{asof|2026|07|21}}, 1 INR equals '''</noinclude>{{#switch: {{{1|USD}}} | AED = 0.03845809 | AUD = 0.01509900 | BDT = 1.29185864 | CAD = 0.01487353 | CNY = 0.07100111 | EUR = 0.00915632 | GBP = 0.00784404 | LKR = 3.51101276 | PKR = 2.91422122 | NZD = 0.01834491 | USD = 0.01038425 | JPY = 1.68998778 }}<noinclude>''' USD. Source: [[XE.com]] reported data at http://www.xe.com/. For USD converter, see http://themoneyconverter.com/INR/USD.aspx. This page was last edited on {{#time:j F Y|{{REVISIONYEAR}}-{{REVISIONMONTH}}-{{REVISIONDAY2}}}}.</noinclude> 7xpoo7qxyo6ibzn3ovlrfowkd7zysw2 ವಿಕಿಪೀಡಿಯ:ತಾಂತ್ರಿಕ ಸುದ್ದಿ/ಆರ್ಕೈವ್ 9 4 24597 373847 373100 2026-10-28T05:44:46Z ChiK 1136 Adding 3 threads from [[ವಿಕಿಪೀಡಿಯ:ತಾಂತ್ರಿಕ_ಸುದ್ದಿ]] (using [[w:tcy:User:ChiK/Archiver|ಆರ್ಕೈವರ್]]) 373847 wikitext text/x-wiki {{Archive}} == <span lang="en" dir="ltr">Tech News: 2026-03</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W03"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/03|Translations]] are available. '''Weekly highlight''' * The Wikimedia Foundation has shared some guiding questions for the July 2026–June 2027 Annual Plan on [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2026-2027/Product & Technology OKRs|Meta]] and ''[[diffblog:2025/12/10/shaping-wikimedia-foundations-2026-2027-annual-goals-key-questions-for-the-wikimedia-movement/|Diff]]''. These focus on global trends, faster and healthier experimentation, better support for newcomers, strengthening editors and advanced users, improving collaboration across projects, and growing and retaining readership. Feedback and ideas are welcome on the [[m:Talk:Wikimedia Foundation Annual Plan/2026-2027|talk page]]. '''Updates for editors''' * As part of the current work of Community Tech team on the [[m:Special:MyLanguage/Community Wishlist/W372|Multiple watchlists]] project, the display of [[Special:EditWatchlist|EditWatchlist]] will be updated as a first step towards multiple watchlists. Additionally, the pagination on [[Special:Search|Search]] will be updated too, as a part of the work on the [[m:Special:MyLanguage/Community Wishlist/W186|Revamp pagination / page navigation]] wish. [https://phabricator.wikimedia.org/T411596] * [[m:Special:GlobalWatchlist|The Global Watchlist]] is a MediaWiki [[mw:Special:MyLanguage/Extension:GlobalWatchlist|extension]] that lets you see your watchlists from different wikis on the same page. It was recently updated to look more like the regular [[Special:Watchlist|Watchlist]], such as preparing it for temporary accounts in IP masking (including rerouting user links to contributions pages), making page titles bold, and opening links in edit summaries and tags in new browser tabs. [https://phabricator.wikimedia.org/T398361][https://phabricator.wikimedia.org/T298919][https://phabricator.wikimedia.org/T273526][https://phabricator.wikimedia.org/T286309] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:28}} community-submitted {{PLURAL:28|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the issue where global blocks did not have the option to disable sending emails, has now been fixed, and will be available for use in the week of January 13. [https://phabricator.wikimedia.org/T401293] '''Updates for technical contributors''' * The [[mw:Special:MyLanguage/VisualEditor/Citation tool|VisualEditor citation tool]] and [[mw:Special:MyLanguage/Help:Reference Previews|Reference Previews]] now support "map" as a reference type. [https://phabricator.wikimedia.org/T411083] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.10|MediaWiki]]/[[mw:MediaWiki 1.46/wmf.11|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/03|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W03"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೧:೦೩, ೧೩ ಜನವರಿ ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29907192 --> == <span lang="en" dir="ltr">Tech News: 2026-04</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W04"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/04|Translations]] are available. '''Updates for editors''' * The tray shown on [[Special:Diff|Special:Diff]] in mobile view has been redesigned. It is now collapsed by default, and incorporates a link to undo the edit being viewed, making it easier for mobile editors and reviewers to take action while keeping the interface uncluttered. [https://phabricator.wikimedia.org/T402297] * [[m:Special:GlobalWatchlist|The Global Watchlist]] lets you view your watchlists from multiple wikis on one page. The [[mw:Special:MyLanguage/Extension:GlobalWatchlist|extension]] continues to improve — it now automatically determines the text direction (ensuring correct display of sites with unusual domain names) and shows detailed descriptions for log actions. Later this week, a new permanent link for page creations and CSS classes for each entry element will be added. [https://phabricator.wikimedia.org/T412505][https://phabricator.wikimedia.org/T287929][https://phabricator.wikimedia.org/T262768][https://phabricator.wikimedia.org/T414135] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:32}} community-submitted {{PLURAL:32|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the previously observed issue in Vector 2022, where anchor link targets were obscured by the sticky header, has now been addressed. [https://phabricator.wikimedia.org/T406114] '''Updates for technical contributors''' * As mentioned in the [[m:Special:MyLanguage/Tech/News/2025/44|October 2025 deprecation announcement]], MediaWiki Interfaces team will begin sunsetting all transform endpoints containing a trailing slash from the MediaWiki REST API the week of January 26. Changes are expected to roll out to all wikis on or before January 30th. All API users currently calling them are encouraged to transition to the non-trailing slash versions. Both endpoint variations can be found, compared, and tested using the [https://test.wikipedia.org/wiki/Special:RestSandbox REST Sandbox]. If you have questions or encounter any problems, please file a ticket in Phabricator to the [https://phabricator.wikimedia.org/project/view/6931/ #MW-Interfaces-Team board]. * Interactive reference documentation for the [[mw:Special:MyLanguage/Wikimedia REST API|Wikimedia REST API]] has moved. Requests to API docs previously hosted through [[mw:Special:MyLanguage/RESTBase|RESTBase]] (e.g.: <code dir=ltr>https://en.wikipedia.org/api/rest_v1/</code>) are now redirected to the [[w:en:Special:RestSandbox|REST Sandbox]]. * The [[mw:Special:MyLanguage/Wikidata Platform|WMF Wikidata Platform team]] (WDP) has published its [[d:Special:MyLanguage/Wikidata:Wikidata Platform team/Newsletter|January 2026 newsletter]]. It includes updates on the legacy full-graph endpoint decommissioning, the User-Agent policy change, the monthly Blazegraph migration office hours, and efforts to reduce regressions caused by the legacy endpoint shutdown. As a reminder, you can [[m:Special:MyLanguage/Global message delivery/Targets/WDP team updates|subscribe to the WDP newsletter]]! * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.12|MediaWiki]] '''Meetings and events''' * The [[mw:Wikimedia Hackathon Northwestern Europe 2026|Wikimedia Hackathon Northwestern Europe 2026]] will take place on 13-14 March 2026 in Arnhem, the Netherlands. Applications opened mid-December and will close soon or when capacity is reached. It's a two-day, technically oriented hackathon bringing together Wikimedians from the region. Hope to see you there! '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/04|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W04"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೧:೫೯, ೨೦ ಜನವರಿ ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29943403 --> == <span lang="en" dir="ltr">Tech News: 2026-05</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W05"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/05|Translations]] are available. '''Updates for editors''' * Wikimedia Foundation invites comments on [[m:Special:MyLanguage/Product and Technology Advisory Council/Year1 Reflections and Proposed Way Forward 2026 Update|proposed future]] of the [[:m:Special:MyLanguage/Product and Technology Advisory Council|Product and Technology Advisory Council]] until 28 February. * All users with registered accounts can now use passkeys for [[m:Special:MyLanguage/Help:Two-factor authentication|two-factor authentication]] (2FA). Passkeys are a simple way to log in without using a second device. They verify the user's identity using a fingerprint, face scan, or a PIN code. To set up a passkey, first set up a regular 2FA method. Currently, to log in with a passkey, users must also use a password. Later this quarter, passwordless login will allow users to log in with a single click and a passkey. Users with advanced rights will also be required to have 2FA enabled. This is part of the [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security|Account Security]] project. * Unregistered contributors on blocked IPs or blocked IP ranges can now interact on-wiki to appeal a block by creating a temporary account to appeal a block on the user talk page, unless the "prevent this user from editing their own talk page" is enabled. This solves the problem of logged-out users unable to use the default unblock process via user talk page. [https://phabricator.wikimedia.org/T398673] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:20}} community-submitted {{PLURAL:20|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the Two-Factor Authentication (2FA) methods description on the management page has been updated. It is now clearer and easier for users to understand and make use of. [https://phabricator.wikimedia.org/T332385] '''Updates for technical contributors''' * A new AbuseFilter variable, <code>account_type</code>, has been added to provide a reliable way to determine the account type being created in the <code>createaccount</code> and <code>autocreateaccount</code> actions. As part of this change, the variable <code>accountname</code> has been renamed to <code>account_name</code>, and <code>accountname</code> is now deprecated. Edit filter managers should update any filters that use hardcoded account type checks or the deprecated variable. [https://phabricator.wikimedia.org/T414049] * Image thumbnails that are requested in non-standard sizes, and using non-standard methods such as direct requests to <code dir=ltr><nowiki>upload.wikimedia.org/…</nowiki></code> will stop working in the near future. This change is to prevent ongoing external abuse by web-scrapers and bots. Some users with custom CSS/JS, Interface Admins who can fix gadgets and local skins, and Tool-authors, will need to update their code to use standard thumbnail sizes. [[phab:T414805|Details, search-links, and examples of how to fix them, are available in the task]]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.13|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/05|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W05"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೨:೪೭, ೨೭ ಜನವರಿ ೨೦೨೬ (IST) <!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29969530 --> == <span lang="en" dir="ltr">Tech News: 2026-06</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W06"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/06|Translations]] are available. '''Updates for editors''' * The "{{int:pageinfo-toolboxlink}}" feature, which gives validating information about a page ([{{fullurl:{{FULLPAGENAME}}|action=info}} example]), now automatically includes a table of contents. If there is a local [[{{ns:8}}:Pageinfo-header]] page created by individual users, it can now be removed. [https://phabricator.wikimedia.org/T363726] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:21}} community-submitted {{PLURAL:21|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, VisualEditor previously added bold or italic formatting inside link descriptions, making the wikicode complex. This has now been fixed. [https://phabricator.wikimedia.org/T409669] '''Updates for technical contributors''' * There was no XML dump on 20 January. Additionally, from now on, dumps will be generated once per month only. [https://phabricator.wikimedia.org/T414389] * The MediaWiki Interfaces team removed support for all transform endpoints containing a trailing slash from the [https://www.mediawiki.org/wiki/Special:MyLanguage/API:REST%20API MediaWiki REST API]. All API users currently calling those endpoints are encouraged to transition to the non-trailing slash versions. If you have questions or encounter any problems, please file a ticket in phabricator to the [https://phabricator.wikimedia.org/project/view/6931/ #MW-Interfaces-Team board]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.14|MediaWiki]] '''Weekly highlight''' * Users are reminded that the Wikimedia Foundation has shared some guiding questions for the July 2026–June 2027 Annual Plan on [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2026-2027/Product & Technology OKRs|Meta]] and ''[[diffblog:2025/12/10/shaping-wikimedia-foundations-2026-2027-annual-goals-key-questions-for-the-wikimedia-movement/|Diff]]''. These focus on global trends, faster and healthier experimentation, better support for newcomers, strengthening editors and advanced users, improving collaboration across projects, and growing and retaining readership. Feedback and ideas are welcome on the [[m:Talk:Wikimedia Foundation Annual Plan/2026-2027|talk page]]. '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/06|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W06"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೨೩:೧೩, ೨ ಪೆಬ್ರವರಿ ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30000986 --> == <span lang="en" dir="ltr">Tech News: 2026-07</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W07"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/07|Translations]] are available. '''Updates for editors''' * [[File:Maki-gift-15.svg|12px|link=|class=skin-invert|Wishlist item]] Logged-in contributors who manage large or complex watchlists can now organise and filter watched pages in ways that improve their workflows with the new [[mw:Special:MyLanguage/Help:Watchlist labels|Watchlist labels]] feature. By adding custom labels (for example: pages you created, pages being monitored for vandalism, or discussion pages) users can more quickly identify what needs attention, reduce cognitive load, and respond more efficiently. This improves watchlist usability, especially for highly active editors. * A new feature available on [[Special:Contributions|Special:Contributions]] shows [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|temporary accounts]] that are likely operated by the same person, and so makes patrolling less time-consuming. Upon checking contributions of a temporary account, users with access to temporary account IP addresses can now see a view of contributions from the related temporary accounts. The feature looks up all the IPs associated with a given temporary account within the data retention period and shows all the contributions of all temporary accounts that have used these IPs. [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts#February 2026: Improvements to the patroller tooling|Learn more]]. [https://phabricator.wikimedia.org/T415674] * When editors preview a wikitext edit, the reminder box that they are only seeing a preview (which is shown at the top), now has a grey/neutral background instead of a yellow/warning background. This makes it easier to distinguish preview notes from actual warnings (for example, edit conflicts or problematic redirect targets), which will now be shown in separate warning or error boxes. [https://phabricator.wikimedia.org/T414742] * The [[m:Special:GlobalWatchlist|Global Watchlist]] lets you view your watchlists from multiple wikis on one page. The [[mw:Special:MyLanguage/Extension:GlobalWatchlist|extension]] continues to improve — it now properly supports more than one Wikibase site, for example both [[d:|Wikidata]] and [[testwikidata:|testwikidata]]. In addition, issues regarding text direction have been fixed for users who prefer Wikidata or other Wikibase sites in right-to-left (RTL) languages. [https://phabricator.wikimedia.org/T415440][https://phabricator.wikimedia.org/T415458] * The automatic "magic links" for ISBN, RFC, and PMID numbers have been [[mw:Special:MyLanguage/Help:Magic links|deprecated in wikitext since 2021]] due to inflexibility and difficulties with localization. Several wikis have successfully replaced RFC and PMID magic links with equivalent external links, but a template was often required to replace the functionality of the ISBN magic link. There is now a new [[mw:Special:MyLanguage/Help:Magic words#isbn|built-in parser function]] <code dir=ltr><nowiki>{{#isbn}}</nowiki></code> available to replace the basic functionality of the ISBN magic link. This makes it easier for wikis who wish to migrate off of the deprecated magic link functionality to do so. [https://phabricator.wikimedia.org/T145604] * Two new wikis have been created: ** a {{int:project-localized-name-group-wikipedia}} in [[d:Q35401|Jju]] ([[w:kaj:|<code>w:kaj:</code>]]) [https://phabricator.wikimedia.org/T413283] ** a {{int:project-localized-name-group-wikipedia}} in [[d:Q1186896|Nawat]] ([[w:ppl:|<code>w:ppl:</code>]]) [https://phabricator.wikimedia.org/T413273] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:23}} community-submitted {{PLURAL:23|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. '''Updates for technical contributors''' * A new global user group has been created: [[{{int:grouppage-local-bot}}|{{int:group-local-bot}}]]. It will be used internally by the software to allow community bots to bypass rate limits that are applied to abusive [[w:en:Web scraping|web scrapers]]. Accounts that are approved as bots on at least one Wikimedia wiki will be automatically added to this group. It will not change what user permissions the bot has. [https://phabricator.wikimedia.org/T415588] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.15|MediaWiki]] '''Meetings and events''' * The [[mw:Special:MyLanguage/MediaWiki Users and Developers Conference Spring 2026|MediaWiki Users and Developers Conference, Spring 2026]] will be held March 25–27 in Salt Lake City, USA. This event is organized by and for the third-party MediaWiki community. You can propose sessions and register to attend. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/AZBWVI46SDEB65PGR5J6E4TYOQQEZXM7/] '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/07|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W07"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೫:೦೦, ೧೦ ಪೆಬ್ರವರಿ ೨೦೨೬ (IST) <!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30026671 --> == <span lang="en" dir="ltr">Tech News: 2026-08</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W08"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/08|Translations]] are available. '''Weekly highlight''' * The [[mw:Special:MyLanguage/Wikimedia Site Reliability Engineering|SRE Team]] will be performing a cleanup of Wikimedia's [[m:Special:MyLanguage/Etherpad|Etherpad]] instance, the web-based editor for real-time collaborative document editing. All pads will be permanently deleted after 30 April, 2026 – if there are still migration projects in progress at that point the team can revisit the date on a case by case basis. Please create local backups of any content you wish to keep, as deleted data cannot be recovered. This cleanup helps reduce database size and minimize infrastructure footprint. Etherpad will continue to support real-time collaboration, but long-term storage should not be expected. Additional cleanups may occur in the future without prior notice. [https://phabricator.wikimedia.org/T415237] '''Updates for editors''' * The Information Retrieval team will be launching an [[mw:Special:MyLanguage/Readers/Information Retrieval/Phase 1|Android mobile app experiment]] that tests hybrid search capabilities which can handle both semantic and keyword queries. The improvement of on-platform search will enable readers to find what they’re looking for directly on Wikipedia more easily. The experiment will first be launched on Greek Wikipedia in late February, followed by English, French, and Portuguese in March. [https://diff.wikimedia.org/2026/01/08/semantic-search-making-it-easier-to-find-the-information-readers-want/ Read more] on Diff blog. [https://www.mediawiki.org/wiki/Readers/Information_Retrieval] * The Reader Growth team will run [[mw:Special:MyLanguage/Readers/Reader Growth/WE3.10.2 Mobile Table of Contents|an experiment]] for mobile web users, that adds a table of contents and automatically expands all article sections, to learn more about navigation issues they face. The test will be available on Arabic, Chinese, English, French, Indonesian, and Vietnamese Wikipedias. * Previously, site notices ([[{{ns:8}}:Sitenotice]] and [[{{ns:8}}:Anonnotice]]) would only render on the desktop site. Now, they will render on all platforms. Users on mobile web will now see these notices and be informed. Site administrators should be prepared to test and fix notices on mobile devices to avoid interference with articles. To opt out, interface admins can add <code dir="ltr">#siteNotice { display: none; }</code> to [[{{ns:8}}:Minerva.css]]. [https://phabricator.wikimedia.org/T138572][https://phabricator.wikimedia.org/T416644] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:19}} community-submitted {{PLURAL:19|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue on [[Special:RecentChanges|Special:RecentChanges]] has been fixed. Previously, clicking hide in the active filters caused the "view new changes since…" button to disappear, though it should have remained visible. The button now behaves as expected. [https://phabricator.wikimedia.org/T406339] '''Updates for technical contributors''' * New documentation is now available to help editors debug on-site search features. It supports troubleshooting when pages do not appear in results, when ranking seems unexpected, and when you need to inspect what content is being indexed, helping make search behavior easier to understand and analyze. [[mw:Help:CirrusSearch/Debug|Learn more]]. [https://phabricator.wikimedia.org/T411169] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.16|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/08|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W08"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೦:೪೭, ೧೭ ಪೆಬ್ರವರಿ ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30086330 --> == <span lang="en" dir="ltr">Tech News: 2026-09</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W09"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/09|Translations]] are available. '''Weekly highlight''' * [[mw:Special:MyLanguage/Edit check/Reference Check|Reference Check]] has been deployed to English Wikipedia, completing its rollout across all Wikipedias. The feature prompts newcomers to add a citation before publishing new content, helping reduce common citation-related reverts and improve verifiability. In A/B testing, the impact was substantial: newcomers shown Reference Check were approximately 2.2 times more likely to include a reference on desktop and about 17.5 times more likely on mobile web. [https://analytics.wikimedia.org/published/reports/editing/reference_check_ab_test_report_final_2025.html] '''Updates for editors''' * The [[mw:Special:MyLanguage/Extension:InterwikiSorting|InterwikiSorting extension]], which allowed for the [[m:Special:MyLanguage/Interwiki sorting order|sorting of interwiki links]], has been undeployed from Wikipedia. As a result, editors who had enabled interwiki link sorting in non-compact mode (full list format) will now see links reordered. The links moving forward will be listed in the alphabetical order of language code. [https://phabricator.wikimedia.org/T253764] * Later this week, people who are editing a page-section using the mobile visual editor, will notice a new "Edit full page" button. When tapped, you will be able to edit the entire article. This helps when the change you want to make is outside the section you initially opened. [https://phabricator.wikimedia.org/T387175][https://phabricator.wikimedia.org/T409112] * [[mw:Special:MyLanguage/Readers/Reader Experience|The Reader Experience team]] is inviting editors to assess whether dark mode should still be considered "beta" on their wiki, based on their experience of how well it functions on desktop and mobile. If the feature is deemed mature, editors can update the interface messages in <code dir=ltr>MediaWiki:skin-theme-description</code> and <code dir=ltr>MediaWiki:Vector-night-mode-beta-tag</code> to indicate that dark mode is ready and no longer considered beta. * The improved [[mw:Wikimedia_Apps/Team/iOS/Activity_Tab|Activity tab]] which displays user-insights is now available to all users of the Wikipedia iOS app (version 7.9.0 and later). Following earlier A/B testing that showed higher account creation among users with access to the feature, it has been rolled out to 100% of users along with some updates. The Activity tab now shows your edited articles in the timeline, offers editing impact insights like contribution counts and article view trends, and customization options to improve in-app experience for users. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:21}} community-submitted {{PLURAL:21|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, a bug that prevented [[mw:Special:MyLanguage/Extension:DiscussionTools|DiscussionTools]] from working on mobile has now been fixed, restoring full functionality. [https://phabricator.wikimedia.org/T415303] '''Updates for technical contributors''' * The [[m:Special:GlobalWatchlist|Global Watchlist]] lets you view your watchlists from multiple wikis on one page. The [[mw:Special:MyLanguage/Extension:GlobalWatchlist|extension]] that makes this possible continues to improve. The latest upgrade is the inclusion of a [[mw:Extension:GlobalWatchlist#hook|new hook]], <code dir=ltr>ext.globalwatchlist.rebuild</code>, which fires after each watchlist rebuild. This allows you to run gadgets and user scripts for the Special page. [https://phabricator.wikimedia.org/T275159] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.17|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/09|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W09"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೦:೩೩, ೨೪ ಪೆಬ್ರವರಿ ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30119102 --> == <span lang="en" dir="ltr">Tech News: 2026-10</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W10"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/10|Translations]] are available. '''Weekly highlight''' * Wikipedia 25 [[m:Special:MyLanguage/Wikipedia 25/Easter egg experiments|Birthday mode]] is now live on Betawi, Breton, Chinese, Czech, Dutch, English, French, Gorontalo, Indonesian, Italian, Luxembourgish, Madurese, Sicilian, Spanish, Thai, and Vietnamese Wikipedias! This limited-time campaign feature celebrates 25 years of Wikipedia with a birthday mascot, Baby Globe. When turned on, Baby Globe is shown on [[m:Special:MyLanguage/Wikipedia 25/Easter egg experiments/article configuration|~2,500 articles]], waiting to be discovered by readers. Communities can choose to turn Birthday mode on by getting consensus from their community and asking an admin to enable the feature and customize it via [[m:Special:MyLanguage/Wikipedia 25/Easter egg experiments#Community Configuration Demo|community configuration]] on the local wiki. '''Updates for editors''' * [[:m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|Sub-referencing]], a new feature to re-use references with different details has been released to Swedish Wikipedia, Polish Wikipedia and [[:phab:T418209|a couple of other wikis]]. You can [[:m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing#test|try the feature]] on these projects or on testwiki and [https://en.wikipedia.beta.wmcloud.org/wiki/Sub-referencing betawiki]. Learnings from the first pilot wiki German Wikipedia have been [[:m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing/Learnings|published in a report]]. Reach out to the Wikimedia Deutschland team if you are [[:m:Talk:WMDE Technical Wishes/Sub-referencing#Pilot wikis|interested in becoming a pilot wiki]]. * [[mw:Special:MyLanguage/Help:Edit check#Paste check|Paste Check]] will become available at all Wikipedias this week. The feature prompts newcomers who are pasting text they are not likely to have written into VisualEditor to consider whether doing so risks a copyright violation. Paste Check [[mw:Special:MyLanguage/Edit check/Tags|tags]] all edits where it is shown for potential review. Local administrators can configure various aspects of the feature via [[{{#special:EditChecks}}]]. [[mw:Special:MyLanguage/Edit check/Paste Check#A/B Experiment|Research]] across 22 wikis found that Paste Check resulted in an 18% decrease in relative reverted-edits compared to the control group. Translators can [https://translatewiki.net/w/i.php?title=Special%3ATranslate&group=ext-visualeditor-ve-mw-editcheck&filter=&optional=1&action=translate help to localize] this and related features. * The [[mw:Special:MyLanguage/Readers/Reader Experience|Reader Experience team]] will be standardizing the user menu in the top right for all mobile users so that it is closer to the desktop experience. Currently this user menu is only visible to users with Advanced Mobile Controls (AMC) turned on. The only change is that a couple buttons previously in the left-side menu will move to the top right for users who do not have AMC turned on. This change is expected to go out March 9 and seeks to improve the user interface. [https://phabricator.wikimedia.org/T413912] * Starting in the week of March 2, the emails sent out when an email address was added, removed, or changed for an account will switch to a substantially nicer and clearer HTML email from the prior plaintext one. [https://phabricator.wikimedia.org/T410807] * Notifications are currently limited to 2,000 historic entries per user, and extend back to 2013 when the feature was released. This is going to be changed to only store Notifications from the last 5 years, but up to 10,000 of them. This will help with long-term infrastructure health and help to prevent more recent notifications from disappearing too soon. [https://phabricator.wikimedia.org/T383948] * The [[m:Special:GlobalWatchlist|Global Watchlist]] which lets you view your watchlists from multiple wikis on a single page continues to see improvements. The latest update improves label usage experience. The [[mw:Special:MyLanguage/Extension:GlobalWatchlist|extension]] now allows activating the [[mw:Special:MyLanguage/Manual:Language#Fallback languages|language fallback system]] for Wikidata items without labels in the viewed language, and showing those labels in the user’s preferred Wikidata language if no <code dir=ltr>uselang=</code> URL parameter is provided. [https://phabricator.wikimedia.org/T373686][https://phabricator.wikimedia.org/T416111] * The Wikipedia Android team has started a beta test of [[mw:Special:MyLanguage/Readers/Information Retrieval/Phase 1|hybrid search]] on Greek Wikipedia. Hybrid search capabilities can handle both semantic and keyword queries enabling readers to find what they’re looking for directly on Wikipedia more easily. * For security reasons, members of certain user groups are [[m:Special:MyLanguage/Mandatory two-factor authentication for users with some extended rights|required to have two-factor authentication]] (2FA) enabled. Currently, 2FA is required to use the group, but not to be a member of it. Given that this model still has some vulnerabilities, the situation will [[phab:T418580|gradually change in March]]. Members of these groups will be unable to disable last 2FA method on their account, and it will be impossible to add users without 2FA to these groups. Users will still be able to add new authentication methods or remove them, as long as at least one method is continuously enabled. In the second half of March, users without 2FA will be removed from these groups. This applies to: CentralNotice administrators, checkusers, interface administrators, suppressors, Wikidata staff, Wikifunctions staff, WMF Office IT and WMF Trust & Safety. Nothing will change for other users. See the linked task for deployment schedule. [https://phabricator.wikimedia.org/T418580] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the issue preventing users from creating an instance in [https://www.wikibase.cloud/ Wikibase.cloud] has now been fixed. [https://phabricator.wikimedia.org/T416807] '''Updates for technical contributors''' * To help ensure [[mw:Special:MyLanguage/MediaWiki Product Insights/Responsible Reuse|fair use of infrastructure]], over the next month the Wikimedia Foundation will implement global API rate limits across our APIs. In early March, stricter limits will be applied to unidentified requests from outside Toolforge/WMCS and API requests that are made from web browsers. In April, higher limits will be applied to identified traffic. These limits are intentionally set as high as possible to minimise impact on the community. Bots running in Toolforge/WMCS or with the bot user right on any wiki should not be affected for now. However, all developers are advised to follow updated best practices. For more information, see [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits|Wikimedia APIs/Rate limits]]. * The Wikidata Query Service Linked Data Fragment (LDF) endpoint will be decommissioned in February. This endpoint served limited traffic, which was successfully migrated to other data access methods that were better suited to support existing use cases. The hardware used to support the LDF endpoint will be reallocated to support the ongoing backend migration efforts. [https://phabricator.wikimedia.org/T415696] * The new Parsoid parser [[mw:Special:MyLanguage/Parsoid/Parser Unification/Updates|continues to be deployed to additional wikis]], improving platform sustainability and making it easier to introduce new reading and editing features. Parsoid is now the default parser on 488 WMF wikis (268 Wikipedias), now covering more than 10% of all Wikipedia page views. * The process and criteria for [[Special:MyLanguage/Wikimedia Enterprise#Access|requesting exceptional access]] to the high volume feed of the ''Wikimedia Enterprise'' APIs (at no cost for mission-aligned usecases), [[m:Talk:Wikimedia Enterprise#Exceptional access criteria|have now been published]]. This is to provide more thorough and clearer documentation for users. * [https://techblog.wikimedia.org/ Tech Blog], the blog dedicated to the Wikimedia technical community [https://techblog.wikimedia.org/2026/02/24/a-tech-blog-diff/ will be migrating] to [[diffblog:|Diff]], the community news and event blog. The migration should be complete in April 2026, after which new posts will be accepted for publishing. Readers will be able to access posts – old and new – on the landing page at https://diff.wikimedia.org/techblog. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.18|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/10|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W10"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೨೩:೨೧, ೨ ಮಾರ್ಚಿ ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30137798 --> == <span lang="en" dir="ltr">Tech News: 2026-11</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W11"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/11|Translations]] are available. '''Weekly highlight''' * [[m:Special:MyLanguage/Tech/Server switch|All wikis will be read-only]] for a few minutes on Wednesday, 25 March 2026 at [https://zonestamp.toolforge.org/1774450800 15:00 UTC]. This is for the datacenter server switchover backup tests, [[wikitech:Deployments/Yearly calendar|which happen twice a year]]. During the switchover, all Wikimedia website traffic is shifted from one primary data center to the backup data center to test availability and prevent service disruption even in emergencies. * Last week, all wikis had 2 hours of read-only time, and extended unavailability for user-scripts and gadgets. This was due to a security incident which has since been resolved. Work is ongoing to prevent re-occurrences. For current information please see the [[m:Steward's noticeboard#Statement on Meta about today's user script security incident|post on the Stewards' noticeboard]] ([[m:Special:MyLanguage/Wikimedia Foundation/Product and Technology/Product Safety and Integrity/March 2026 User Script Incident|translations]]). '''Updates for editors''' * Users facing multiple blocks on mobile will now see the reasons for each block separately, instead of a generic message. This helps them understand why they are blocked and what steps they can take to resolve the issue. For example, users affected for using common VPNs (such as [[Special:MyLanguage/Apple iCloud Private Relay|iCloud Private Relay]]) will receive clearer guidance on what they need to do to start editing again. [https://phabricator.wikimedia.org/T357118] * Later this week, [[mw:Special:MyLanguage/VisualEditor/Suggestion Mode|Suggestion Mode]] will become available as a beta feature within the visual editor at all Wikipedias. This feature proactively suggests various types of actions that people can consider taking to improve Wikipedia articles, and learn about related guidelines. The feature is locally configurable, and can also be locally expanded with custom Suggestions. Current settings can be seen at [[Special:EditChecks]] and there are [[mw:Special:MyLanguage/Help:Suggestion mode#For administrators %E2%80%93 local customization|instructions for how administrators can customize]] the links to point to local guidelines. The feature is connected to [[mw:Special:MyLanguage/Help:Edit check|Edit check]] which suggests improvements while someone is writing new content. In the future, the Editing team plans to evaluate the feature's impact with newcomers through a controlled experiment. [https://phabricator.wikimedia.org/T404600] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:23}} community-submitted {{PLURAL:23|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the issue where the cursor became misaligned during the use of CodeMirror’s syntax highlighting, which makes wikitext and code easier to read, has now been fixed. This problem specifically affected users who defined a font rule in a custom stylesheet while creating a new topic with DiscussionTools. [https://phabricator.wikimedia.org/T418793] '''Updates for technical contributors''' * API rate limiting update: To help ensure [[mw:Special:MyLanguage/MediaWiki Product Insights/Responsible Reuse|fair use of infrastructure]], global API rate limits will be applied this week to requests without a compliant User-Agent that originate from outside Toolforge/WMCS and to unauthenticated requests made from web browsers. Higher limits will be applied to identified traffic in April. Bots running in Toolforge/WMCS or with the bot user right on any wiki should not be affected for now. However, all developers are advised to follow updated best practices. For more information, see [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits|Wikimedia APIs/Rate limits]]. * The new GraphQL API has been released. The API was developed as a flexible alternative to select features of the Wikidata Query Service (WDQS), to improve developer experience and foster adaptability, and efficient data access. Try it out and [[d:Wikidata:Wikibase GraphQL#Feedback and development|give feedback]]. You can also [https://greatquestion.co/wikimediadeutschland/GraphQLAPI/apply sign up for usability tests]. * The [[m:Special:MyLanguage/Product and Technology Advisory Council/Unsupported Tools Working Group|PTAC Unsupported Tools Working Group]] continued improvements to [[commons:Special:MyLanguage/Commons:Video2commons#|Video2Commons]] in February, with fixes addressing authentication errors, large-file handling, task queue visibility, and clearer upload behavior. Work is still ongoing in some areas, including changes related to deprecated server-side uploads. Read [[m:Special:MyLanguage/Product and Technology Advisory Council/Unsupported Tools Working Group#February 2026|this update]] to learn more. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.19|MediaWiki]] '''In depth''' * The Article Guidance team invites experienced Wikipedia editors from selected [[mw:Special:MyLanguage/Article guidance/Pilot wikis and collaborators#Collaborators|pilot wikis]] and interested contributors from other Wikipedias to fill out this questionnaire which is available in [https://docs.google.com/forms/d/e/1FAIpQLSfmLeVWnxmsCbPoI_UF2jyRcn73WRGWCVPHzerXb4Cz97X_Ag/viewform English], [https://docs.google.com/forms/d/e/1FAIpQLSd6rzr4XXQw8r4024fE3geTPFe13M_6w7Mitj-YJi0sOlWTAw/viewform?usp=header Arabic], [https://docs.google.com/forms/d/e/1FAIpQLSdok3-RfB18lcugYTUMGkpwmqG_8p760Wv4dCXitOXOszjUDw/viewform?usp=header Bengali], [https://docs.google.com/forms/d/e/1FAIpQLSfjTfYp4jEo0akA4B1e-Nfg3QZPCudUjhJzHzzDi6AHyAaMGA/viewform?usp=header Japanese], [https://docs.google.com/forms/d/e/1FAIpQLScteVoI29Aue4xc72dekk-6RYtvmMgQxzMI900UOawrFrSTWg/viewform?usp=header Portuguese], [https://docs.google.com/forms/d/e/1FAIpQLSetdxnYwL3ub2vqA7awCg5hJZPMIYcDPaiTe12rY9h0GYnVlw/viewform?usp=header Persian], and [https://docs.google.com/forms/d/e/1FAIpQLScNvfJF-Ot-4pzA4qAN771_0QDJ4Li19YcUsaTgSKW8Nc7U_Q/viewform?usp=header Turkish]. Your answers will help the team customize guidance for less experienced editors and help them learn community policies and practices while creating an article. Learn more [[mw:Special:MyLanguage/Article guidance|on the project page]]. '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/11|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W11"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೦:೨೨, ೧೦ ಮಾರ್ಚಿ ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30213008 --> == <span lang="en" dir="ltr">Tech News: 2026-12</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W12"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/12|Translations]] are available. '''Updates for editors''' * The [[mw:Special:MyLanguage/Help:Extension:CodeMirror|{{int:codemirror-beta-feature-title}}]] beta feature, also known as [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror 6]], has been used for wikitext syntax highlighting since November 2024. It will be promoted out of beta by May 2026 in order to bring improvements and new [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Features|features]] to all editors who use the standard syntax highlighter. If you have any questions or concerns about promoting the feature out of beta, [[mw:Special:MyLanguage/Help talk:Extension:CodeMirror|please share]]. [https://phabricator.wikimedia.org/T259059] * Some changes to local user groups are performed by stewards on Meta-Wiki and logged there only. Now, interwiki rights changes will be logged both on Meta-Wiki and the wiki of the target user to make it easier to access a full record of user's rights changes on a local wiki. Past log entries for such changes will be backfilled in the coming weeks. [https://phabricator.wikimedia.org/T6055] * On wikis using [[m:Special:MyLanguage/Flagged Revisions|Flagged Revisions]], the number of pending changes shown on [[{{#Special:PendingChanges}}]] previously counted pages which were no longer pending review, because they have been removed from the system without being reviewed, e.g. due to being deleted, moved to a different namespace, or due to wiki configuration changes. The count will be correct now. On some wikis the number shown will be much smaller than before. There should be no change to the list of pages itself. [https://phabricator.wikimedia.org/T413016] * Wikifunctions composition language has been rewritten, resulting in a new version of the language. This change aims to increase service stability by reducing the orchestrator's memory consumption. This rewrite also enables substantial latency reduction, code simplification, and better abstractions, which will open the door to later feature additions. Read more about [[f:Special:MyLanguage/Wikifunctions:Status updates/2026-03-11|the changes]]. * Users can now sort search results alphabetically by page title. The update gives an additional option to finding pages more easily and quickly. Previously, results could be sorted by Edit date, Creation date, or Relevance. To use the new option, open 'Advanced Search' on the search results page and select 'Alphabetically' under 'Sorting Order'. [https://phabricator.wikimedia.org/T403775] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:28}} community-submitted {{PLURAL:28|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the bug that prevented UploadWizard on Wikimedia Commons from importing files from Flickr has now been fixed. [https://phabricator.wikimedia.org/T419263] '''Updates for technical contributors''' * A new special page, [[{{#special:LintTemplateErrors}}]], has been created to list transcluded pages that are flagged as containing lint errors to help users discover them easily. The list is sorted by the number of transclusions with errors. For example: [[{{#special:LintTemplateErrors}}/night-mode-unaware-background-color]]. [https://phabricator.wikimedia.org/T170874] * Users of the [[mw:Special:MyLanguage/Help:Extension:CodeMirror|{{int:codemirror-beta-feature-title}}]] beta feature have been using [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror]] instead of [[mw:Special:MyLanguage/Extension:CodeEditor|CodeEditor]] for syntax highlighting when editing JavaScript, CSS, JSON, Vue and Lua content pages, for some time now. Along with promoting CodeMirror 6 out of beta, the plan is to replace CodeEditor as the standard editor for these content models by May 2026. [[mw:Special:MyLanguage/Help talk:Extension:CodeMirror|Feedback or concerns are welcome]]. [https://phabricator.wikimedia.org/T419332] * The [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror]] JavaScript modules will soon be upgraded to CodeMirror 6. Leading up to the upgrade, loading the <code dir=ltr>ext.CodeMirror</code> or <code dir=ltr>ext.CodeMirror.lib</code> modules from gadgets and user scripts was deprecated in July 2025. The use of the <code dir=ltr>ext.CodeMirror.switch</code> hook was also deprecated in March 2025. Contributors can now make their scripts or gadgets compatible with CodeMirror 6. See the [[mw:Special:MyLanguage/Extension:CodeMirror#Gadgets and user scripts|migration guide]] for more information. [https://phabricator.wikimedia.org/T373720] * The MediaWiki Interfaces team is expanding coverage of REST API module definitions to include [[mw:Special:MyLanguage/API:REST API/Extensions|extension APIs]]. REST API modules are groups of related endpoints that can be independently managed and versioned. Modules now exist for [https://phabricator.wikimedia.org/T414470 GrowthExperiments] and [https://phabricator.wikimedia.org/T419053 Wikifunctions] APIs. As we migrate extension APIs to this structure, documentation will move out of the main MediaWiki OpenAPI spec and REST Sandbox view, and will instead be accessible via module-specific options in the dropdown on the [https://test.wikipedia.org/wiki/Special:RestSandbox REST Sandbox] (i.e., [[{{#Special:RestSandbox}}]], available on all wiki projects). * The [[mw:Special:MyLanguage/Extension:Scribunto|Scribunto]] extension provides different pieces of information about the wiki where the module is being used via the [[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual|mw.site]] library. Starting last week, the library also provides a [[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#mw.site.wikiId|way]] of accessing the [[mw:Special:MyLanguage/Manual:Wiki ID|wiki ID]] that can be used to facilitate cross-wiki module maintenance. [https://phabricator.wikimedia.org/T146616] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.20|MediaWiki]] '''In depth''' * The [[m:Special:MyLanguage/Coolest Tool Award|2026 Coolest Tool Award]] celebrating outstanding community tools, is now open for nominations! Nominate your favorite tool using the [https://wikimediafoundation.limesurvey.net/435684?lang=en nomination survey] form by 23 March 2026. For more information on privacy and data handling, please see the [[foundation:Special:MyLanguage/Legal:Coolest_Tool_Award_2026_Survey_Privacy_Statement|survey privacy statement]]. '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/12|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W12"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೧:೦೫, ೧೭ ಮಾರ್ಚಿ ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30260505 --> == <span lang="en" dir="ltr">Tech News: 2026-13</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W13"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/13|Translations]] are available. '''Weekly highlight''' * Wikimedia site users can now log in without a password using passkeys. This is a secure method supported by fingerprint, facial recognition, or PIN. With this change, all users who opt for passwordless login will find it easier, faster, and more secure to log in to their accounts using any device. The new passkey login option currently appears as an autofill suggestion in the username field. An additional [[phab:T417120|"Log in with passkey" button]] will soon be available for users who have already registered a passkey. This update will improve security and user experience. The [[c:File:Passwordless_login_screencast.webm|screen recording]] demonstrates the passwordless login process step by step. * [[m:Special:MyLanguage/Tech/Server switch|All wikis will be read-only]] for a few minutes on Wednesday, 25 March 2026 at [https://zonestamp.toolforge.org/1774450800 15:00 UTC]. This is for the datacenter server switchover backup tests, [[wikitech:Deployments/Yearly calendar|which happen twice a year]]. During the switchover, all Wikimedia website traffic is shifted from one primary data center to the backup data center to test availability and prevent service disruption even in emergencies. '''Updates for editors''' * Wikimedia site users can now export their notifications older than 5 years using a [[toolforge:echo-chamber|new Toolforge tool]]. This will ensure that users retain their important notifications and avoid them being lost based on the planned change to delete notifications older than 5 years, as previously announced. [https://phabricator.wikimedia.org/T383948] * Wikipedia editors in Indonesian, Thai, Turkish, and Simple English now have access to Special:PersonalDashboard. This is an [[mw:Special:MyLanguage/Moderator Tools/Dashboard|early version of an experience]] that introduces newer editors to patrolling workflows, making it easier for them to move from making edits to participating in more advanced moderation work on their project. [https://phabricator.wikimedia.org/T402647] * The [[Special:Block]] now has two minor interface changes. Administrators can now easily perform indefinite blocks through a dedicated radio button in the expiry section. Also, choosing an indefinite expiry provides a different set of common reasons to select from, which can be changed at: [[MediaWiki:Ipbreason-indef-dropdown]]. [https://phabricator.wikimedia.org/T401823] * Mobile editors [[mw:Special:MyLanguage/Contributors/Account Creation Experiments#Logged-out|at several wikis]] can now see an improved logged-out edit warning, thanks to the recent updates from the Growth team. These changes released last week are part of ongoing efforts and tests to enhance [[mw:Special:MyLanguage/Contributors/Account Creation Experiments|account creation experience on mobile]] and then increase participation. [https://phabricator.wikimedia.org/T408484] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:36}} community-submitted {{PLURAL:36|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the bug that prevented mobile web users from seeing the block information when affected by multiple blocks has been fixed. They can now see messages of all the blocks currently affecting them when they access Wikipedia. '''Updates for technical contributors''' * Images built using Toolforge will soon get the upgraded buildpacks version, bringing support for newer language versions and other upstream improvements and fixes. If you use Toolforge Build Service, review the recent [https://lists.wikimedia.org/hyperkitty/list/cloud-announce@lists.wikimedia.org/thread/EMYTA32EV2V5SQ2JIEOD2CL66YFIZEKV/ cloud-announce email] and update your build configuration as necessary to ensure your tools are compatible. [https://wikitech.wikimedia.org/w/index.php?title=Help:Toolforge/Building_container_images&oldid=2392097#Buildpack_environment_upgrade_process][https://phabricator.wikimedia.org/T380127] * The [https://api.wikimedia.org/wiki/Main_Page API Portal] documentation wiki will shut down in June 2026. API keys created on the API Portal will continue to work normally. api.wikimedia.org endpoints will be deprecated gradually starting in July 2026. Documentation on the API Portal is moving to [[mw:Wikimedia APIs|mediawiki.org]]. Learn more on the [[wikitech:API Portal/Deprecation|project page]]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.21|MediaWiki]] '''In depth''' * [[m:Special:MyLanguage/WMDE Technical Wishes|WMDE Technical Wishes]] is considering improvements to [[m:WMDE Technical Wishes/References/VisualEditor automatic reference names|automatically generated reference names in VisualEditor]]. Please check out the [[m:WMDE Technical Wishes/References/VisualEditor automatic reference names#Proposed solutions|proposed solutions]] and participate in the [[m:Talk:WMDE Technical Wishes/References/VisualEditor automatic reference names#Request for comment|request for comment]]. '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/13|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W13"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೨೨:೨೧, ೨೩ ಮಾರ್ಚಿ ೨೦೨೬ (IST) <!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30268305 --> == <span lang="en" dir="ltr">Tech News: 2026-14</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W14"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/14|Translations]] are available. '''Weekly highlight''' * The Beta version of [[abstract:|Abstract Wikipedia]] a new Wikimedia project which is language-independent, was launched last week. The project allows communities to build Wikipedia articles in their native language, which can be readily accessed by other users in their own languages. The wiki is powered by instructions from Wikifunctions and also based on structured content from Wikidata. [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-03-26|Read more]]. '''Updates for editors''' * The Growth team is running an A/B test to evaluate a clearer, more user-friendly message that promotes account creation on wikis. Currently when logged-out mobile users begin editing, they see a jarring warning message that can feel abrupt and discouraging. This also presents temporary account editing as the default rather than encouraging account creation. The test is running on ten Wikipedias, including Arabic, French, Spanish and German. [[mw:Special:MyLanguage/Contributors/Account Creation Experiments#2. Improve logged-out warning message (T415160)|Read more]]. * The Wikimedia Apps team is inviting feedback on [[mw:Special:MyLanguage/Wikimedia Apps/Team/Future of Editing on the Mobile Apps|how editing should work on the Wikipedia mobile apps]]. The discussion focuses on improving how users access editing tools when they tap "Edit". This is part of a broader effort to convert readers who develop an interest in editing, to access a more user-friendly pathway to start contributing. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:45}} community-submitted {{PLURAL:45|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where citation fetching from the large newspaper archive [https://www.newspapers.com Newspapers.com] was no longer working, due to a block in [[mw:Special:MyLanguage/Citoid|Citoid]] requests, has now been fixed. [https://phabricator.wikimedia.org/T419903] '''Updates for technical contributors''' * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.22|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/14|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W14"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೦:೫೫, ೩೧ ಮಾರ್ಚಿ ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30329462 --> == <span lang="en" dir="ltr">Tech News: 2026-15</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W15"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/15|Translations]] are available. '''Updates for editors''' * The [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|CampaignEvents extension]] now includes a new group goal-setting feature, enabling organizers to set and track event goals such as the number of articles created and participating contributors in real time. Similarly, participants can work toward shared targets and see their collective impact as the event unfolds. The feature is now available on all Wikimedia wikis. Learn more in [[mw:Special:MyLanguage/Help:Extension:CampaignEvents/Registration/Collaborative contributions#Goal setting|the documentation]]. * [[File:Maki-gift-15.svg|12px|link=|class=skin-invert|Wishlist item]] The new [[mw:Special:MyLanguage/Help:Watchlist labels|watchlist labels]] feature (announced in [[m:Special:MyLanguage/Tech/News/2026/07|Tech News 2026-07]]) is now available via VisualEditor, the source editor, and the 'watchstar' (or watch link, for skins that don't have a star icon). Previously it was only possible to assign labels via [[Special:EditWatchlist|EditWatchlist]]. In all three places it is a new field following the expiry field. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:23}} community-submitted {{PLURAL:23|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the issue where talk pages on mobile with Parsoid are unusable after empty section headers, has now been fixed. [https://phabricator.wikimedia.org/T419171] '''Updates for technical contributors''' * The [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|sub-referencing feature]], which lets editors add details to an existing reference without duplicating it, will be gradually rolled out to [[phab:T414094|more wikis]] later this year. Wikis using the [[mw:Special:MyLanguage/Reference Tooltips|Reference Tooltips]] gadget are encouraged to update their version (typically at [[m:MediaWiki:Gadget-ReferenceTooltips.js|MediaWiki:Gadget-ReferenceTooltips.js]] as shown [https://en.wikipedia.org/w/index.php?diff=1344408362 here]) to ensure compatibility. Other reference-related gadgets may also be affected. [https://phabricator.wikimedia.org/T416304] * All Wikinews editions will be closed and switched to read-only mode on 4 May 2026. Content will remain accessible, but no new edits or articles can be added. This closure was approved by the Board of Trustees of the Wikimedia Foundation following extended discussions. [[m:Wikimedia Foundation Board noticeboard#Board of Trustees Approves Closure of Wikinews|Read more]]. * The [[:mw:Special:MyLanguage/API:Action API|Action API]] has had several formats for requested output. One of them, <bdi lang="zxx" dir="ltr"><code><nowiki>format=php</nowiki></code></bdi>, is being removed soon. Please ensure your scripts or bots use the [[mw:Special:MyLanguage/API:Data formats#Output|JSON format]]. This removal should affect very few scripts and bots. [https://phabricator.wikimedia.org/T118538] * The [[Special:NamespaceInfo|Special:NamespaceInfo]] page now includes namespace aliases. For example "WP" for the "Project" ("Wikipedia") namespace on the German Wikipedia. [https://phabricator.wikimedia.org/T381455] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.23|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/15|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W15"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೨೧:೪೯, ೬ ಎಪ್ರಿಲ್ ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30362761 --> == <span lang="en" dir="ltr">Tech News: 2026-16</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W16"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/16|Translations]] are available. '''Weekly highlight''' * Experienced editors are invited to [https://b24e11a4f1.catalyst.wmcloud.org/wiki/Main_Page test] the [[mw:Special:MyLanguage/Article guidance|Article guidance]] feature, designed to help less-experienced editors create well-structured, policy-compliant Wikipedia articles. Testing instructions are [[mw:Special:MyLanguage/Article guidance/Test feature guide|available]]. Also, after reviewing [https://b24e11a4f1.catalyst.wmcloud.org/wiki/Category:Pages_using_article_guidance the outlines], please provide feedback on the [[mw:Talk:Article guidance|project talk page]]. Based on your input, the feature will be refined and transferred to the pilot Wikipedias to translate and adapt. Check out [[c:File:Article Guidance workflow demo - April 2026.webm|the video]] explaining the feature. '''Updates for editors''' * On most wikis, all autoconfirmed users can now use [[Special:ChangeContentModel|Special:ChangeContentModel]] page to [[mw:Special:MyLanguage/Help:ChangeContentModel|create new pages with custom content models]], such as mass message lists, making custom page formats more accessible. Check [[Special:ListGroupRights|Special:ListGroupRights]] for the status of your wiki. [https://phabricator.wikimedia.org/T248294] * The Growth team has launched an [[mw:Special:MyLanguage/Contributors/Account_Creation_Experiments|account creation experiment]] to evaluate whether adding an account creation button to the mobile web header increases new account registrations and encourages more mobile users to contribute to the wikis. The experiment is currently live on Hindi, Indonesian, Bengali, Thai, and Hebrew Wikipedia, and targets 10% of logged-out mobile web users. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:30}} community-submitted {{PLURAL:30|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where VisualEditor could get stuck loading on Windows devices with animations turned off, has now been fixed. [https://phabricator.wikimedia.org/T382856] '''Updates for technical contributors''' * Starting later this week, {{int:group-abusefilter}} who have the [[mw:Special:MyLanguage/Help:Extension:CodeMirror|{{int:codemirror-beta-feature-title}}]] beta feature enabled will have [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror]] instead of [[mw:Special:MyLanguage/Extension:CodeEditor|CodeEditor]] as the editor at [[Special:AbuseFilter|Special:AbuseFilter]]. This is part of the broader effort to make the user experience more consistent across all editors. [https://phabricator.wikimedia.org/T399673][https://phabricator.wikimedia.org/T419332] * Tools and bots that access the [[mw:Special:MyLanguage/Notifications/API|Notifications API]] (<bdi lang="zxx" dir="ltr"><code><nowiki>action=query&meta=notifications</nowiki></code></bdi>) will need to update their OAuth or BotPassword grants to also include access to private notifications. [https://phabricator.wikimedia.org/T421991] * Due to a library upgrade, listings on category pages may be displayed out of order starting on Monday, 20th April. A migration script will be run to correct this, and will take hours to days depending on the size of the wiki (up to a week for English Wikipedia). [https://phabricator.wikimedia.org/T422544] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.24|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/16|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W16"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೨೦:೪೮, ೧೩ ಎಪ್ರಿಲ್ ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30380527 --> == <span lang="en" dir="ltr">Tech News: 2026-17</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W17"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/17|Translations]] are available. '''Weekly highlight''' * After two years of development, [[mw:Special:MyLanguage/Help:Extension:CodeMirror|{{int:codemirror-beta-feature-title}}]], also known as [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror 6]], is to be promoted out of beta on Tuesday, April 21. It brings better code and wikitext readability, reduction in typing errors, and other [[mw:Special:MyLanguage/Help:Extension:CodeMirror|benefits]] to all users of the standard syntax highlighter. A huge thank you to volunteer [https://phabricator.wikimedia.org/p/Bhsd/ Bhsd] who developed many of the new features, including [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Code folding|code folding]], [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Autocompletion|autocompletion]], and [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Linting|linting]]. [https://phabricator.wikimedia.org/T259059] * A major update to the Wikipedia app for iOS is now rolling out, redesigning the interface to align with Apple's latest "Liquid Glass" visual design. [https://apps.apple.com/us/app/wikipedia/id324715238 Download the latest version] and explore the update. '''Updates for editors''' * [[mw:Special:MyLanguage/Readers/Reader Experience/WE3.3.4 Reading lists|Reading lists]] is a feature which allows readers to save articles to a list for reading later. This feature is now in beta on Arabic, French, Indonesian, Vietnamese, and Chinese Wikipedias and by default for all new accounts on all Wikipedias. * An experiment which explores extending [[mw:Special:MyLanguage/Readers/Reader Growth/Mobile page previews|Page Previews to mobile web]] will be launched in the week of April 20 on Arabic, English, French, Italian, Polish, and Vietnamese Wikipedias. Page Previews are pop-ups that display a thumbnail, lead paragraph, and a link to open the full article of a blue link, thereby improving content discovery. The feature is already available on desktop and in the apps. [[m:Special:MyLanguage/List of experiments in Product and Technology#Template|Read more about this experiment and others]]. * On several wikis, logged-in editors who haven't [[mw:Special:MyLanguage/Help:Email confirmation|confirmed their email addresses]] can now see a banner encouraging them to do so. Having the email address confirmed allows a user to restore access to the account if they lose it. [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security#Encouraging users to confirm their email addresses|Learn more]]. [https://phabricator.wikimedia.org/T421366] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:15}} community-submitted {{PLURAL:15|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where editing very large wiki pages in the 2017 wikitext editor caused slow loading, preview and scrolling lag, and performance issues when selecting, cutting, or pasting content, has now been fixed. [https://phabricator.wikimedia.org/T184857] '''Updates for technical contributors''' * As part of the promotion of [[mw:Special:MyLanguage/Help:Extension:CodeMirror|CodeMirror]] from a beta feature, all users will use [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror]] instead of [[mw:Special:MyLanguage/Extension:CodeEditor|CodeEditor]] for syntax highlighting when editing JavaScript, CSS, JSON, Vue and Lua content pages. [https://phabricator.wikimedia.org/T419332] * The <code>mirrors.wikimedia.org</code> service for Debian and Ubuntu users will sunset and stop working on May 15. The resources for the service will be replaced with new and better options. Some users may need to switch to a different server which should take about a minute. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/LJYRIS4WB66HIRCAO4GIDTXCMDVZRBMA/ You can read more]. [https://phabricator.wikimedia.org/T416707] * The <bdi lang="zxx" dir="ltr"><code><nowiki>image</nowiki></code></bdi> and <bdi lang="zxx" dir="ltr"><code><nowiki>oldimage</nowiki></code></bdi> table will be removed from [[wikitech:Help:Wiki Replicas|wikireplicas]]. If your tools or queries access <bdi lang="zxx" dir="ltr"><code><nowiki>image</nowiki></code></bdi> or <bdi lang="zxx" dir="ltr"><code><nowiki>oldimage</nowiki></code></bdi> directly, please update them to use the <bdi lang="zxx" dir="ltr"><code><nowiki>file</nowiki></code></bdi> and <bdi lang="zxx" dir="ltr"><code><nowiki>filerevision</nowiki></code></bdi> table before 28 May. [https://phabricator.wikimedia.org/T28741] * Following the recent implementation of global API rate limits on unidentified traffic, the Wikimedia Foundation will continue efforts to ensure [[mw:Special:MyLanguage/MediaWiki Product Insights/Responsible Reuse|fair use of infrastructure]] by applying global limits to identified API traffic beginning the last week of April. These limits are intentionally set as high as possible to minimise impact on the community. Bots running in Toolforge/WMCS or with the bot user right on any wiki should not be affected for now. However, all developers are advised to follow updated best practices. For more information, see [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits|Wikimedia APIs/Rate limits]] and [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits/FAQ|Frequently Asked Questions]]. * The [[mw:Special:MyLanguage/Attribution API|Attribution API]] is now available as a [[mw:Special:MyLanguage/Wikimedia APIs/Stability policy|beta]]. The API fetches information for crediting Wikimedia articles and media files wherever they are used. Reference documentation is available through the REST Sandbox special page available on all Wikimedia wikis (such as the [https://en.wikipedia.org/w/index.php?api=attribution.v0-beta&title=Special%3ARestSandbox REST sandbox on English Wikipedia]). Share your feedback on the [[mw:Talk:Attribution API|project talk page]]. * There is no new MediaWiki version this week. '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/17|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W17"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೨೦:೩೦, ೨೦ ಎಪ್ರಿಲ್ ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30432763 --> == <span lang="en" dir="ltr">Tech News: 2026-18</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W18"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/18|Translations]] are available. '''Updates for editors''' * There is a change in how new users are autoconfirmed that will improve anti-vandalism protection. Currently, users who have had an account for a few days and made a few edits are automatically added to the [[{{int:grouppage-autoconfirmed/{{CONTENTLANGUAGE}}}}|{{int:group-autoconfirmed}}]] group. This configuration tends to be exploited by some vandals, who create accounts and start to use them only after some time. To mitigate this, the configuration will be updated next week so that – for the purpose of becoming autoconfirmed – the account age will be counted from their first edit, instead of registration date. The numeric value of the age threshold will remain the same. This change will be deployed only to wikis which require at least one edit as part of the autoconfirmation conditions. [https://phabricator.wikimedia.org/T418484] * All Wikipedia users with new accounts and those who activated the "automatically enable most beta features" option in their preference can now use the [[mw:Special:MyLanguage/Readers/Reader Experience/WE3.3.4 Reading lists|reading lists]] beta feature to save articles for later reading. This helps organize reading interests in one place for convenient access. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:30}} community-submitted {{PLURAL:30|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the issue where infobox images have huge padding in Firefox, has been fixed. [https://phabricator.wikimedia.org/T423676] '''Updates for technical contributors''' * As a reminder, the global API rate limits will be applied this week to identified API traffic. This is to help ensure [[mw:MediaWiki Product Insights/Responsible Reuse|fair use of infrastructure]]. Bots running in Toolforge/WMCS or with the bot user right on any wiki should not be affected for now. However, all developers are advised to follow updated best practices. For more information, including the actual rate limits, see [[mw:Wikimedia APIs/Rate limits|Wikimedia APIs/Rate limits]] and [[mw:Wikimedia APIs/Rate limits/FAQ|Frequently Asked Questions]]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.26|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/18|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W18"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೨೩:೩೬, ೨೭ ಎಪ್ರಿಲ್ ೨೦೨೬ (IST) <!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30458046 --> == <span lang="en" dir="ltr">Tech News: 2026-19</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W19"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/19|Translations]] are available. '''Weekly highlight''' * The [[mw:Special:MyLanguage/Article guidance|Article guidance]] team invites experienced editors of [[mw:Special:MyLanguage/Article guidance/Pilot wikis and collaborators|pilot Wikipedias]]—Arabic, Bangla, Japanese, Portuguese, Persian, Turkish, Simple English, Spanish, and French—to help translate and adapt [https://b24e11a4f1.catalyst.wmcloud.org/wiki/Category:Pages_using_article_guidance sample outlines]. These outlines will guide editors in creating clear, well-structured, and policy-compliant articles when using [https://b24e11a4f1.catalyst.wmcloud.org/wiki/Special:NewArticle the feature] once it is launched in May 2026. [[mw:Special:MyLanguage/Article guidance#Adapting a sample outline in a Wikipedia|Simple instructions]] on how to translate and adapt the outlines are available. '''Updates for editors''' * The [[:m:Special:MyLanguage/Product and Technology Advisory Council|Product and Technology Advisory Council]] has published [[:m:Special:MyLanguage/Product and Technology Advisory Council/May 2026 draft PTAC recommendation for feedback|draft recommendations]] on a model that affiliates can follow when contributing to the technical space. Community members are invited to provide feedback on the recommendation until May 8th [[:m:Talk:Product and Technology Advisory Council/May 2026 draft PTAC recommendation for feedback|on the talk page]]. * The number of available thumbnail size preferences in MediaWiki is being reduced to three standardized options—Small (180px), Regular (250px), and Large (400px), as part of ongoing efforts to improve performance and reduce strain on thumbnail services. As a result, existing preferences will be mapped to the nearest new size (for example, smaller selections like 120px or 150px will render at 180px, while larger ones like 300px or 360px will render at 400px). The preferences interface will soon be updated to reflect these changes, and users who wish to opt out or provide feedback can do so. [https://phabricator.wikimedia.org/T424909] * From now on, even when a permission expires automatically, users will receive an Echo notification similar to the standard notification for permission changes. There is a difference between this and [[m:Special:MyLanguage/Global reminder bot|Global reminder bot]] in that the latter reminds users a week ''before'' the rights are due to expire, so that they can renew the rights. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:32}} community-submitted {{PLURAL:32|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the problem where the ULS language selector in [[m:Special:Translate|Special:Translate]] would scroll vertically when it shouldn't, has been resolved. Previously, when users opened the "Translate to English" dropdown and typed certain inputs, the dialog would scroll vertically by a few pixels even when there was enough space to display all results. The dropdown no longer shifts unnecessarily when filtering languages. [https://phabricator.wikimedia.org/T358864] * The [[m:Special:GlobalWatchlist|Global Watchlist]], which lets you view your watchlists from multiple wikis on a single page, continues to improve. For example, watchlists for Wikibase sites such as [[:d:|Wikidata]] now support [[mw:Special:MyLanguage/Extension:EntitySchema|EntitySchema]] elements for better tracking. The Live Updates mode now refreshes the special page every 60 seconds to comply with the updated [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits|global API rate limits]] for improved real-time responsiveness. Additionally, a directionality bug that displayed links as "changes 3" instead of "3 changes" in mixed-direction lists has been fixed. [https://phabricator.wikimedia.org/T415450][https://phabricator.wikimedia.org/T424422][https://phabricator.wikimedia.org/T418091] '''Updates for technical contributors''' * The second phase of [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits|global API rate limits]] has been rolled out to reduce the [[diffblog:2026/03/26/quo-vadis-crawlers-progress-and-whats-next-on-safeguarding-our-infrastructure/|impact of AI crawlers]] and ensure fair, sustainable access to Wikimedia resources, prioritising human and mission-aligned traffic. [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits#Limits|Limits]] have been shifted from per-hour to per-minute, producing smoother traffic patterns and more predictable API load. Community users are not expected to be affected, and no action is required. Early indications show some User-Agent-based requestors are adjusting behaviour, and around 64% of automated API traffic has been identified. Monitoring continues, and Wikimedia Enterprise remains available for commercial support. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.46/wmf.27|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/19|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W19"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೨:೧೩, ೫ ಮೇ ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30498077 --> == <span lang="en" dir="ltr">Tech News: 2026-20</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W20"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/20|Translations]] are available. '''Weekly highlight''' * Community Tech has published [[m:Special:MyLanguage/Community Wishlist/How to write a good wish|new guidance]] explaining how wishes on Community Wishlist are triaged and prioritized. The documentation is intended to help contributors write stronger proposals by clarifying the factors that influence prioritization decisions. Beyond vote counts, the guidance highlights considerations such as potential impact on the community when determining which wishes move forward. '''Updates for editors''' * The Reader Growth team is launching an experiment to test a new [[mw:Special:MyLanguage/Readers/Reader_Growth/Share_Card|Share Card feature]] that allows readers to create visually engaging cards from Wikipedia articles or selected article sections and share them online, with each card linking back to the original article to help expand readership and article discovery. The mobile-only A/B test will be available to a portion of readers on Arabic, Chinese, French, Vietnamese, and English Wikipedia to better understand reading and sharing habits, and is scheduled to begin the week of May 18 and run for four weeks. * The Android and iOS Wikipedia apps recently released the [[mw:Special:MyLanguage/Wikimedia_Apps/Team/25th_Birthday_Reading_Challenge|25-day reading challenge]] into Beta, as part of efforts to drive reader engagement by encouraging users to complete reading milestones. To track their reading streak during the challenge, App users can add a widget featuring Baby Globe to their home screen. The challenge officially begins May 11. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:17}} community-submitted {{PLURAL:17|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where the global preference for enabling syntax highlighting in wikitext could unexpectedly disable itself after being turned on, has now been fixed. [https://phabricator.wikimedia.org/T425286] '''Updates for technical contributors''' * [[File:Octicons-tools.svg|12px|link=|alt=|Advanced item]] The ResourceLoader module <bdi lang="zxx" dir="ltr"><code><nowiki>mediawiki.ui.input</nowiki></code></bdi>, deprecated since [[m:Special:MyLanguage/Tech/News/2023/39|September 2023]], will be removed this week. There is a [[mw:Special:MyLanguage/Codex/Migrating_from_MediaWiki_UI|guide for migrating from MediaWiki UI to Codex]] for any tools that use it. [https://phabricator.wikimedia.org/T420125] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.2|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/20|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W20"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೦:೫೦, ೧೨ ಮೇ ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30524429 --> == <span lang="en" dir="ltr">Tech News: 2026-21</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W21"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/21|Translations]] are available. '''Weekly highlight''' * The Abstract Wikipedia team has identified five potential pilot wikis to assess their interest in adopting abstract articles on their wikis. The pilots are Malayalam, Bengali, Dagbani, Arabic, and Indonesian Wikipedia. The feedback period will be open until May 22. If your community is interested in becoming a pilot, [[m:Talk:Abstract Wikipedia|let us know on Meta]]. '''Updates for editors''' * An experiment to show [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|Reading Lists]] to logged-out readers on mobile web will launch on May 18 across German, Spanish, Italian, Portuguese, Polish, Dutch, Turkish, and Urdu Wikipedias, and will run for one month. The effort supports broader goals of helping readers save and organize articles for later reading, while encouraging habits that could lead to future Wikipedia contributions. * To support a bookmark button in the Reading List beta feature, the "Tools > Action" menu has been updated to display icons, including the watch star indicator that helps editors identify temporarily watched articles. The icons now also match those used on mobile, improving consistency across platforms. The change is currently limited to the actions menu and mainly affects editors with privileged user rights. [https://phabricator.wikimedia.org/T426008] * [[mw:Special:MyLanguage/VisualEditor/Suggestion Mode|Suggestion Mode]] was released as an [[w:en:A/B test|A/B test]] for newcomer editors on the mobile website at [[phab:T421189|~15 Wikipedias]]. The experiment will measure the impact that Suggestion Mode has on the proportion of newcomer mobile web edit sessions that result in constructive (un-reverted) article edits. The experiment will also evaluate the feature's impact on editor retention, and monitor changes in revert and block rates. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue in the Wikipedia Android app where images could sometimes fail to load after opening a recommended reading list notification, has now been fixed. [https://phabricator.wikimedia.org/T418231] '''Updates for technical contributors''' * The [[mw:Special:MyLanguage/Wikidata Platform|Wikidata Platform team]] has published its [[d:Special:MyLanguage/Wikidata:SPARQL query service/WDQS backend update/Backend Replacement|backend replacement recommendation]] and accompanying [[wikitech:Wikidata Query Service/WDQS Architecture re-design|technical architecture]] for the migration of the Wikidata Query Service (WDQS) away from Blazegraph. Feedback is invited until May 25th 2026, especially on potential gaps and impacts on advanced use cases. Wikidata community members and WDQS users are also encouraged to help identify high-impact tools and workflows that may need attention on [[d:Wikidata:SPARQL query service/WDQS backend update/High-Impact Use Cases|this page]]. Feedback can be shared on the [[d:Wikidata talk:SPARQL query service/WDQS backend update|Migration talk page]] or during the [[d:Special:MyLanguage/Wikidata:Blazegraph Migration Office Hours|next office hour]]. See the [[d:Special:MyLanguage/Wikidata:Wikidata Platform team/Newsletter|WDP team newsletter]] for more details. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.3|MediaWiki]] '''In depth''' * On English, French, Japanese, and a few other Wikipedias, there was a [[diffblog:2025/09/02/better-detecting-bots-and-replacing-our-captcha/|trial of hCaptcha]], a third-party bot detection service. The trial showed that hCaptcha effectively detects and deters some bad-faith automated activity, on its own and by giving [[w:en:Wikipedia:Village pump (technical)/Archive 225#Introducing SuggestedInvestigations|checkusers and stewards]] signals to look into. Because the results were positive, hCaptcha will be rolled out across all wikis over the next few weeks. [[mw:Special:MyLanguage/Product Safety and Integrity/Anti-abuse signals/hCaptcha|See the hCaptcha project page]] for technical information about the implementation and privacy protections. [[diffblog:2026/05/04/better-detecting-bots-and-replacing-our-captcha-part-2/|Learn more]]. * The latest Community Tech update is now available, with progress across several Community Wishlist initiatives, including Reading Lists expansion from the mobile app to the website, new language support for "Who Wrote That" and the Personal Dashboard, improvements to 3D rendering and Charts, and upcoming work on talk page sorting, audio playback, and editing workflows. The update also shares current priorities, wishlist status trends, and opportunities for community feedback on future focus areas and the Wikimedia Foundation’s 2026–2027 Annual Plan. [[m:Special:MyLanguage/Community Wishlist/Updates#May 13, 2026: Latest updates from the Community Tech team|Read the full newsletter for details]]. '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/21|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W21"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೧:೫೧, ೧೯ ಮೇ ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30539262 --> == <span lang="en" dir="ltr">Tech News: 2026-22</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W22"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/22|Translations]] are available. '''Weekly highlight''' * Following a [[mw:Special:MyLanguage/Contributors/Account Creation Experiments#LOWM|successful account creation experiment]], an improved logged-out edit warning message will be deployed to all Wikimedia wikis in the first week of June. The change will only affect logged-out users on mobile web who open an editing session. The updated experience is designed to encourage account creation more clearly, while still allowing users to edit with temporary accounts. Results from the experiment showed a significant increase in account creation, with a 27% relative lift among users shown the updated message. As expected, as more people funnel into account creation, temporary accounts decreased by a relative 16%. The experiment did not show any significant changes in constructive edit rates or other monitored contributor metrics. [https://phabricator.wikimedia.org/T424595] '''Updates for editors''' * For security reasons, members of certain user groups are [[m:Special:MyLanguage/Mandatory two-factor authentication for users with some extended rights|required to have two-factor authentication]] (2FA) enabled. Members of these groups will be unable to disable the last 2FA method on their account, and it will be impossible to add users without 2FA to these groups. Users will still be able to add new authentication methods or remove them, as long as at least one method is continuously enabled. In the next few weeks, users without 2FA will be removed from these groups. Notably, this applies to bureaucrats. See the linked tasks for deployment schedules. [https://phabricator.wikimedia.org/T423119][https://phabricator.wikimedia.org/T423120] * [[m:Special:MyLanguage/WMDE Technical Wishes|WMDE Technical Wishes]] will run an [[w:en:A/B testing|A/B test]] on [[:phab:T415904|10 wikis]], testing [[m:WMDE Technical Wishes/References/Reference Previews|potential improvements for Reference Previews]]. The experiment will run for ~2 weeks at the end of May / beginning of June and will affect 10% of desktop readers on the participating wikis. * After two successful experiments, the Reader Growth team is rolling out an [[mw:Special:MyLanguage/Readers/Reader Growth/Image Browsing|Image Browsing]] beta feature for all Wikipedias on mobile on May 25. This means that anyone who has all beta features on by default will start to see this feature, and others can check the box to turn it on in their preferences. The beta feature will include a carousel of all an article's images at the top of the article, with controls for editors to [[mw:Readers/Reader_Growth/Image_Browsing#Phase_2.1_beta_feature|exclude images from the article's carousel or to exclude an article from the feature entirely]]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:30}} community-submitted {{PLURAL:30|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, three dimensional STL files were being rendered incorrectly by the media viewer 3D extension which is now fixed. [https://phabricator.wikimedia.org/T416723] '''Updates for technical contributors''' * The legacy CSS classes <bdi lang="zxx" dir="ltr"><code><nowiki>tleft</nowiki></code></bdi> and <bdi lang="zxx" dir="ltr"><code><nowiki>tright</nowiki></code></bdi> have been replaced with <bdi lang="zxx" dir="ltr"><code><nowiki>floatleft</nowiki></code></bdi> and <bdi lang="zxx" dir="ltr"><code><nowiki>floatright</nowiki></code></bdi> as the former do not work consistently across all MediaWiki platforms, notably mobile web and mobile apps. Projects relying on these classes are encouraged to review related usage and plan for migration. Please note that <bdi lang="zxx" dir="ltr"><code><nowiki>floatleft</nowiki></code></bdi> and <bdi lang="zxx" dir="ltr"><code><nowiki>floatright</nowiki></code></bdi> may also be deprecated in future, although there are currently no plans to do so. [[phab:T426452|Read more]]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.4|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/22|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W22"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೩:೨೨, ೨೬ ಮೇ ೨೦೨೬ (IST) <!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30584502 --> == <span lang="en" dir="ltr">Tech News: 2026-23</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W23"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/23|Translations]] are available. '''Updates for editors''' * The [[mw:Special:MyLanguage/Readers/Reader Experience|Reader Experience team]] is conducting an experiment to show the [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|reading lists]] feature, which is still in development, to logged-out mobile readers to test whether it encourages account creation at a higher rate compared to the watchstar button. The [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists#Experiment timeline|experiment]] was launched on May 18th on German, Spanish, Italian, Portuguese, Polish, Dutch, Turkish, and Urdu wikis, and it will run for a month. * The Wikimedia Apps team released [[mw:Special:MyLanguage/Wikimedia Apps/Team/Explore Feed Refresh/Phase 1|Phase 1]] of the redesigned Home Feed to the Android Beta app. The new Home Feed includes a refreshed "Community" tab and a personalized "For You" tab featuring daily updated reading recommendations. The redesign is part of a broader effort to improve content discovery and create more engaging learning experiences in the Wikipedia apps. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:18}} community-submitted {{PLURAL:18|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where images could fail to load for some suggested edits on [[w:Special:Homepage|Special:Homepage]], leaving the thumbnail stuck in a loading state, has now been fixed. [https://phabricator.wikimedia.org/T424048] '''Updates for technical contributors''' * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.5|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/23|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W23"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೨:೩೮, ೨ ಜೂನ್ ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30613639 --> == <span lang="en" dir="ltr">Tech News: 2026-24</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W24"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/24|Translations]] are available. '''Weekly highlight''' * Wikimedia Enterprise has increased the free usage limits for its API offerings. The monthly request limit for the On-demand API has increased from 5,000 to 50,000 requests, while the Snapshot API limit has increased from 15 to 30 requests per month. In addition, Structured Contents snapshots are now available for free accounts. These changes expand access to Wikimedia Enterprise data for developers, researchers, and organizations using Wikimedia content. [https://enterprise.wikimedia.com/blog/enhanced-free-api] '''Updates for editors''' * The [[mw:Special:MyLanguage/Wikimedia_Apps/Team/Explore Feed Refresh/Phase 1|refreshed Explore Feed]], now called the Home Feed, is rolling out to 50% of users of the Wikipedia Android app. The Home Feed helps readers discover relevant content through two new tabs: ''Community'' and ''For You''. The Community tab provides a scrollable feed of curated content and updates from the broader Wikimedia community and movement, while the ''For You'' tab offers a full-screen, swipeable experience that shows content tailored to a user's interests. The redesign is part of a broader effort to improve discovery and enhance the learning experience in the Wikipedia app. * The [[mw:Special:MyLanguage/Wikimedia Apps/Team/iOS/"Which came first?" Game|Which came first?]] daily trivia game is now available in the beta version of the Wikipedia iOS app in English, German, French, Portuguese, Russian, Spanish, Arabic, Chinese, and Turkish. The game uses historical events from Wikipedia's "On This Day" content and challenges readers to guess which of two events happened first. The game was previously released on Android. Communities interested in making the game available in their languages can [[mw:Special:MyLanguage/Wikimedia_Apps/Team/Games#Game availability by language|read the instructions and requirements]]. * [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|Sub-referencing]], a new MediaWiki feature that allows editors to reuse references with different details, will begin rolling out to Wikimedia wikis following a successful pilot phase. Deployment will start on 8 June for most [[wikitech:Deployments/Train#Wednesday|Group 1 wikis]] and French Wikipedia, with additional Wikipedia language editions receiving the feature over the coming months. Communities are encouraged to prepare by checking for [https://translatewiki.net/w/i.php?title=Special%3ATranslate&group=ext-cite&language=en&action_source=search&filter=%21translated&optional=1&action=translate untranslated Cite extension messages] in their language and reviewing any use of [[mw:Special:MyLanguage/Reference Tooltips|Reference Tooltips]], which may require [[:phab:T416304#11668731|updates]] to support the new functionality. Wikis using [[mw:Special:MyLanguage/Help:Reference Previews|Reference Previews]] do not need to take any action. Communities may also wish to create the ''cite-tracking-category-ref-details'' [[Special:TrackingCategories|tracking category]] as a hidden category using <code><nowiki>__HIDDENCAT__</nowiki></code> (or a dedicated template), and connect it to the corresponding Wikidata item [[d:Q129764848]]. [https://phabricator.wikimedia.org/T425662] * The [[mw:Special:MyLanguage/Readers/Reader Growth/Mobile page previews#Experimentation|Page Previews experiment]] on mobile web has concluded. The team decided not to roll out the feature after the results showed no statistically significant impact on reader retention, as the primary success metric was retention improvement. Page Previews, which are already available on desktop and in the apps, display a thumbnail, lead paragraph, and link to the full article when readers tap a blue link. The experiment tested this experience on mobile web across six Wikipedias. * The [[mw:Special:MyLanguage/Codex/Design/Icons|user interface icon library]] will be [[phab:T399175|updated later this week or next week]]. Most of the ~300 icons have been slightly refined and ~30 new icons have been added. These changes improve the icons to make them more consistent and comprehensible, and provide more visual balance when they are used in groups. * The [[mw:Special:MyLanguage/Universal Language Selector|Universal Language Selector]] (ULS) interface in MediaWiki, which helps users select content in other languages, has been updated. The new version improves speed and accessibility, and users of Wikimedia projects can now pin languages for quicker language switching. The deployment to Wikimedia sites will happen gradually in the coming weeks. You can test it now as a beta feature by selecting [[Special:Preferences#mw-prefsection-betafeatures|beta features]] in your profile preferences and share your feedback on [[mw:Special:MyLanguage/Universal Language Selector/New ULS|the project page]]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:21}} community-submitted {{PLURAL:21|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where the Pageviews Analysis dashboard on pageviews.wmcloud.org stopped updating graph data in May 2026, affecting all users, has been fixed. [https://phabricator.wikimedia.org/T427171] '''Updates for technical contributors''' * The function signature for <bdi lang="zxx" dir="ltr"><code><nowiki>mw.util.addPortletLink()</nowiki></code></bdi> has been simplified. Developers can now pass a configuration object instead of a list of positional parameters when creating portlet links. The previous function signature remains supported for backwards compatibility. For example, instead of: <bdi lang="zxx" dir="ltr"><code><nowiki>mw.util.addPortletLink('p-cactions', '#', 'Stub', 'ca-stubtag', 'Add a stub tag to this page');</nowiki></code></bdi> use <bdi lang="zxx" dir="ltr"><code><nowiki>mw.util.addPortletLink('p-cactions', { href: '#', text: 'Stub', id: 'ca-stubtag', tooltip: 'Add a stub tag to this page' });</nowiki></code></bdi>. Script maintainers are encouraged to review existing uses of <bdi lang="zxx" dir="ltr"><code><nowiki>addPortletLink()</nowiki></code></bdi> and update them where appropriate. This change will be available on all wikis from 11 June. Thanks to community volunteer Gerges for contributing this improvement. [https://phabricator.wikimedia.org/T427945] * '''Community Wishlist discussion''': Product & Technology [[m:Special:MyLanguage/Community Wishlist/Updates#May 20, 2026: Community Tech becomes a program|introduced changes]] meant to increase the number and complexity of wishes fulfilled, including the disbanding of the Community Tech team. They are [[m:Special:MyLanguage/Community Wishlist/Updates|engaging in discussions]] about a [[m:Talk:Community Wishlist#Proposed direction for Wishlist|proposed direction for the wishlist]] from community members. Includes ways to structure annual voting, better tracking of wishes, removing focus areas, and [[m:Special:MyLanguage/Community Wishlist/Updates|staffing updates]]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.6|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/24|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W24"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೨:೫೯, ೯ ಜೂನ್ ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30650573 --> == <span lang="en" dir="ltr">Tech News: 2026-25</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W25"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/25|Translations]] are available. '''Weekly highlight''' * The [[mw:Special:MyLanguage/Readers/Reader Growth|Reader Growth team]] has launched an [[mw:Special:MyLanguage/Readers/Reader Growth/Image Browsing|Image Browsing]] beta feature on the mobile web version of all Wikipedias. The feature shows an image carousel at the top of articles with 3 or more images. Editors can configure this feature with the following controls: to hide a specific image from a page, either use <code>class=notpageimage</code> excluding it from thumbnail previews, or <code>class=noviewer</code> excluding it from MediaViewer. The carousel can also be disabled from a page entirely, with the magic word <code><nowiki>__NOMEDIAVIEWERCAROUSEL__</nowiki></code>. To submit feedback or flag bugs, please visit the [[mw:Talk:Readers/Reader Growth/Image Browsing|project page]]. * [[mw:Special:MyLanguage/Help:Tables#class="wikitable"|Wikitables]] can now be [[mw:Special:MyLanguage/Help:Sortable tables#Forcing the initial sort direction|sorted in descending order]] on the first click by adding <code dir=ltr>data-sort-order="desc"</code> to the header cell. Previously, by default, clicking a column header for the first time sorts it in ascending order. This addition to a Wikitable gives it more control and flexibility, while the default behavior for subsequent clicks remains unchanged. [https://phabricator.wikimedia.org/T398416] '''Updates for editors''' * The [[mw:Special:MyLanguage/Article guidance|Article guidance]] feature is currently being tested with some editors creating new articles on the Simple English, French, and Turkish Wikipedias. The experiment will soon begin on the Arabic and Bangla Wikipedias as well. [[w:simple:Special:NewArticle|This feature]] gives editors community-curated guidance to help them create articles that follow community standards. Experienced editors can continue creating or adapting outlines for specific article types that are commonly created by less experienced contributors. The outlines guide less experienced editors in creating high-quality articles. A quick guide to markups used in outlines can be found on [[mw:Special:MyLanguage/Article guidance/Test feature guide#Markups in outlines|this page]]. [[w:simple:Wikipedia:Article Guidance|Example outlines]] that can be adapted and instructions for how to adapt them are on [[mw:Special:MyLanguage/Article guidance#Adapting a sample outline in a Wikipedia|this section]] of the project page. * Wikis that wish to replace the "indefinitely" button in Special:Block for temporary accounts (for example, wikis that block temporary users only until account expiration) will be able to do so by creating [[MediaWiki:ipb-indefinite-expiry-temporary-account]] with the block duration they want. [https://phabricator.wikimedia.org/T427125] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:41}} community-submitted {{PLURAL:41|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. '''Updates for technical contributors''' * By the end of June, a valid user-agent string will be required for automated dumps downloads from the dumps.wikimedia.org website. Automated requests that provide a generic or empty user-agent will be blocked. This [[phab:T400119|extends enforcement]] of the long standing [[foundation:Special:MyLanguage/Policy:Wikimedia Foundation User-Agent Policy|user-agent policy]]. Access to dumps through Wikimedia Cloud Services will not change. * The roll out of global [[mw:Wikimedia APIs/Rate limits|API rate limits]] is now complete, with limits enforced across all APIs and at the documented levels for all groups. Bots running in Toolforge/WMCS or with the bot user right on any wiki remain exempt. All bots should continue to follow the documented best practices to avoid being rate limited. * The [https://api.wikimedia.org/wiki/Main_Page API Portal wiki] will be read only starting this week (June 15-18). The following week (June 22-25), all API Portal wiki URLs will redirect to [[mw:Wikimedia APIs|Wikimedia APIs on mediawiki.org]]. Learn more on the [[wikitech:API Portal/Deprecation|project page]]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.7|MediaWiki]] '''Meetings and events''' * On June 17th at 6pm UTC the WMF will be holding Discord call focused on a code review. We've heard through the [[mw:Special:MyLanguage/Developer Satisfaction Survey/2026|Developer Satisfaction Survey]] that volunteers are struggling with code review and we'd like to discuss these experiences with the goal of surfacing workable solutions. You can join the call [https://discord.gg/wikipedia?event=1514727511102062664 via the Wikimedia Community Discord server]. * The [[m:Special:MyLanguage/Conferencia Wikimedia de América Latina 2026|Latin American Wikimedia Conference]] will host a regional hackathon that will bring together the Wikimedia movement’s technical community including developers, system administrators, data scientists, and users with extended rights. Interested technical contributors can [https://docs.google.com/forms/d/e/1FAIpQLSf4osJzTHBJjQbYJk7TMVEJjTEQv7IgtsUDfP-o-qTgeRQQxw/viewform apply for a scholarship] to participate until June 21 at midnight (Bolivia time, UTC-4). * Sign up for Wikimania Team Challenges to join this special event. The Team challenges will take place online and in person from July 21 to 22, before Wikimania conference. Everyone is welcome, regardless of skills or Wikimania registration. Teams will work on 10 important challenges supporting the Wikimedia community. For details, visit [[wmania:Special:MyLanguage/2026:Team challenges|the Team Challenges page]] and [https://wikimedia.eventyay.com/wm/teamchallenges/ register there]. Registration closes on June 20th at 11pm UTC. '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/25|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W25"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೨೨:೧೮, ೧೫ ಜೂನ್ ೨೦೨೬ (IST) <!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30689604 --> == <span lang="en" dir="ltr">Tech News: 2026-26</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W26"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/26|Translations]] are available. '''Weekly highlight''' * [[mw:Special:MyLanguage/Growth/Feature summary|Growth features]] are [[phab:T418115|now available at Wikidata]]. This update enables access to Mentorship ([[mw:Special:MyLanguage/Help:Growth/Mentorship|if configured]]), Impact module, the Help Panel, and a simplified Newcomer Homepage (without Suggested Edits). Wikidata administrators are still configuring the features through Community Configuration. '''Updates for editors''' * The special page [[{{#special:RangeCalculator}}]] has been created. It allows users to find an IP range without needing to rely on external tools. Until now, this tool was only available to CheckUsers. [https://phabricator.wikimedia.org/T268429] * [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|Sub-referencing]] is a new MediaWiki feature that allows editors to reuse references with different details. It will be deployed to most small and medium-sized Wikipedia language versions on June 23. The [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing#deployment|FAQ]] lists possible actions to take on your wiki to support the deployment. Check the [[:phab:T414094|rollout plan]] for the next deployment steps. [https://phabricator.wikimedia.org/T428902] * Starting next week, users will get a notification when they are blocked or unblocked from editing, or if this block changes. [https://phabricator.wikimedia.org/T100974] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:32}} community-submitted {{PLURAL:32|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. '''Updates for technical contributors''' * Starting next week, abuse filters that are set to "require CAPTCHA verification" will begin to also affect users with the <code>skipcaptcha</code> right, which includes most autoconfirmed users. Bots are exempted. This change only affects edits that trigger an abuse filter. The <code>skipcaptcha</code> right will continue to exempt users from having to solve CAPTCHAs in the ordinary course of using the wikis. [https://phabricator.wikimedia.org/T402595] * Reference documentation for the [[wikitech:Machine_Learning/LiftWing/API|Lift Wing API]] has moved from the API Portal to the interactive [https://wikitech.wikimedia.org/w/index.php?api=lift-wing&title=Special%3ARestSandbox REST Sandbox]. * The API Portal wiki is now closed. For API documentation, see [[mw:Special:MyLanguage/Wikimedia_APIs|Wikimedia APIs on mediawiki.org]]. All API Portal wiki URLs (https://api.wikimedia.org/wiki/) will redirect to the mediawiki.org page starting June 22. [https://phabricator.wikimedia.org/T427537] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.8|MediaWiki]] '''Meetings and events''' * Join an online call on 25 June at 2:30pm UTC to meet the current Wikimedia interns for [[mw:Google_Summer_of_Code/2026|Google Summer of Code]] and [[mw:Outreachy/Round_32|Outreachy]]. Interns will provide an overview of their projects and a brief demo of their work so far. Attendees are encouraged to [[mw:event:Google_Summer_of_Code/Summer_2026_June_Internship_open_session|share ideas and connections in their community]]. '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/26|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W26"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೧೮:೩೫, ೨೩ ಜೂನ್ ೨೦೨೬ (IST) <!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30722494 --> == <span lang="en" dir="ltr">Tech News: 2026-27</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W27"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/27|Translations]] are available. '''Updates for editors''' * As part of the [[mw:Special:MyLanguage/Contributors/Account Creation Experiments|Account Creation Experiments]], the Growth team tested adding a user account icon in the mobile web header for logged-out users, providing direct access to "Create account" and "Log in" actions. The experiment increased account creation by about 20% without negatively affecting edit quality or constructive edit rates. The feature will now be rolled out to all Wikimedia Foundation wikis on mobile web in the first week of July. [https://phabricator.wikimedia.org/T428220] * After a [[phab:T426248|successful experiment]], logged-in users who did not [[mw:Special:MyLanguage/Help:Email_confirmation|confirm their email address]] when their account was created see a new banner asking them to complete that process. This helps reduce the risk that users get locked out of their account, and makes account email addresses overall more reliable. This is part of the [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security|Account Security]] project. [https://phabricator.wikimedia.org/T428292] * An update to [[Special:Search|Search]] is refining how the <bdi lang="zxx" dir="ltr"><code><nowiki>-prefix:</nowiki></code></bdi> behaves when used to exclude results. Previously, using <bdi lang="zxx" dir="ltr"><code><nowiki>-prefix:</nowiki></code></bdi> with negation could unintentionally broaden search results by adding the namespaces included in the search scope, leading to confusing behavior for users expecting a straightforward exclusion filter. With the update, <bdi lang="zxx" dir="ltr"><code><nowiki>-prefix:</nowiki></code></bdi> will now strictly exclude matching page titles as intended and may display a warning if the relevant namespace has not been explicitly selected. The behavior of <bdi lang="zxx" dir="ltr"><code><nowiki>prefix:</nowiki></code></bdi> without negation however remains unchanged. [https://phabricator.wikimedia.org/T427443] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:33}} community-submitted {{PLURAL:33|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where reviewers using the Page Curation toolbar were not automatically subscribed to talk page discussions they started has now been fixed. Reviewers will now receive notifications when someone replies to those discussions. [https://phabricator.wikimedia.org/T329346] '''Updates for technical contributors''' * Starting June 29th, automated downloads from the dumps.wikimedia.org website will be subject to the [[Foundation:Special:MyLanguage/Policy:Wikimedia Foundation User-Agent Policy|user-agent policy]]. Automated requests that provide a generic or empty user-agent will be blocked. Access to dumps through Wikimedia Cloud Services remains unaffected. This is a follow up to the announcement made in the [[m:Special:MyLanguage/Tech/News/2026/25|2026/25 issue of Tech News]]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.9|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/27|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W27"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೧೭:೧೭, ೨೯ ಜೂನ್ ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30744833 --> == <span lang="en" dir="ltr">Tech News: 2026-28</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W28"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/28|Translations]] are available. '''Updates for editors''' * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:34}} community-submitted {{PLURAL:34|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where the search bar results on Wikidata, showed English results instead of using the correct language fallback for users of language variants, has now been fixed. Search suggestions will now follow the expected language fallback chain. [https://phabricator.wikimedia.org/T429769] '''Updates for technical contributors''' * In preparation for [[m:Special:MyLanguage/Event:Celebrate Women|Celebrate Women campaign]] planned for March 2027, the Wikimedia Foundation’s [[m:Special:MyLanguage/Wikimedia Foundation/Advancement/Community Growth/Content Enablement|Content Enablement team]] has launched a 22-question survey to better understand technical contributions by women+ (anyone who identifies as a woman) across Wikimedia projects. The survey takes approximately 15–20 minutes to complete and will remain open until 20 July 2026. The [[m:Special:MyLanguage/Celebrate Women/Technical contributions survey|questions]] are also available on-wiki for review in advance. * The [[mw:Special:MyLanguage/Extension:Score|Score extension]] now supports rendering music scores as SVG images in addition to PNG, addressing a long-standing [[:phab:T49578|feature request]] and resolving historical image quality issues. Both formats are now provided to clients, with PNG in the <bdi lang="zxx" dir="ltr"><code><nowiki>src</nowiki></code></bdi> attribute and SVG in the <bdi lang="zxx" dir="ltr"><code><nowiki>srcset</nowiki></code></bdi> attribute. * The new [[wikitech:Parsoid|Parsoid]] parser [[mw:Special:MyLanguage/Parsoid/Parser_Unification/Updates|continues to be deployed to additional wikis]], making it easier to introduce new reading and editing features. It was enabled on French Wikipedia, bringing total progress to covering 78.9% of Wikipedia page views. Rollout to English Wikipedia desktop will progress through this week. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.10|MediaWiki]] '''In depth''' * The Wikimedia Hackathon 2026 [[diffblog:2026/06/29/wikimedia-hackathon-2026-building-collaborating-and-shaping-the-future-together/|recap blog post]] is now live. It highlights the projects, sessions, and social activities from this year’s event, and shares initial plans for the 2027 Wikimedia Hackathon. '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/28|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W28"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೧೯:೨೬, ೬ ಜುಲಾಯಿ ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30773578 --> == <span lang="en" dir="ltr">Tech News: 2026-29</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W29"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/29|Translations]] are available. '''Updates for editors''' * [[mw:Special:MyLanguage/Growth/Revise_Tone|Revise Tone]] helps newcomers identify passages in Wikipedia articles that may contain non-encyclopedic language and encourages them to consider revising the tone. The feature was [[w:en:A/B_testing|A/B tested]] on the Arabic, English, French, and Portuguese Wikipedias, where newcomer task completion rates [[mw:Special:MyLanguage/Growth/Revise_Tone#Experiment_Results|increased by 38.7%]] compared to the default Copyedit task, with no decrease in edit quality. The test ended on July 9, and the feature is now available for everyone on these wikis, configurable via Community Configuration. [[phab:T426364|The plan]] is to release Revise Tone to more wikis. * The community configuration that allows [[mw:Special:MyLanguage/Help:Growth/Mentorship#Automated mentor list cleanup|automatic removal of inactive mentors]] based on configurable criteria will be enabled on Thursday 16, [[mw:Special:MyLanguage/Growth/Deployment|on some wikis]] to keep mentor lists up to date. Mentors are experienced contributors who opt in to help new users on-wiki through the [[mw:Special:MyLanguage/Growth/Feature summary|Growth Features]]. Administrators can now prepare the settings via [[w:Special:CommunityConfiguration/Mentorship|Special:CommunityConfiguration/Mentorship]]; they will take effect starting Thursday. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:38}} community-submitted {{PLURAL:38|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where some users of the Wikipedia Android app were logged out immediately after signing in, preventing them from staying logged in and editing pages, has now been fixed. [https://phabricator.wikimedia.org/T316916] '''Updates for technical contributors''' * Editing a page via user scripts or gadgets was causing watchlist labels that the user had assigned to that page to reset. This has now been fixed. [https://phabricator.wikimedia.org/T423778] * To work around a Safari bug (see [[phab:T425211]]), on Parsoid-enabled wikis, wikilink hrefs now use absolute urls instead of protocol-relative urls. REST API output remains unchanged and continue to use protocol-relative urls. Gadgets, user scripts, bots, and CSS might need to be adapted if they relied on the presence of protocol-relative urls in wikilink hrefs. [https://phabricator.wikimedia.org/T431358] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.11|MediaWiki]] '''In depth''' * The Wikimedia Foundation’s Experiment Platform Team has published a blog post reflecting on its first year of structured experimentation. It highlights successful experiments such as Paste Check, Reference Check, and Tone Check, which improved editing outcomes and have been rolled out to more users, as well as experiments that did not lead to product changes. [[diffblog:2026/07/07/moving-the-needle-how-we-test-new-ideas-across-wikimedia-projects|Read more]]. '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/29|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W29"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೨೧:೪೧, ೧೩ ಜುಲಾಯಿ ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30804401 --> == <span lang="en" dir="ltr">Tech News: 2026-30</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W30"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/30|Translations]] are available. '''Updates for editors''' * The [[mw:Special:MyLanguage/Reader/Reader Experience|Reader Experience team]] has incorporated community feedback around the placement of watchstar and watchlist buttons for the [[mw:Special:MyLanguage/Readers/Reader Experience/WE3.3.4 Reading lists|Reading Lists beta feature]], which would allow for saving articles for later reading – a [[m:Special:MyLanguage/Community Wishlist/W102|wishlist item]] to bring the functionality to web. Editors are invited to enable the beta feature to test it out and [[phab:T426453|share their thoughts]]. * [[mw:Special:MyLanguage/VisualEditor/Suggestion Mode|Suggestion Mode]] offers edit suggestions within the VisualEditor for improving Wikipedia articles. [[Special:EditChecks|All suggestions]] are [[mw:Special:MyLanguage/Help:Suggestion mode#For administrators – local customization|community-configurable]]. The [[mw:Special:MyLanguage/Edit check/TextMatch|TextMatch]] feature is a way for volunteers to create custom local suggestions. The feature searches in articles for strings of text, and now includes support for regular expressions. This gives volunteers greater precision and flexibility over the kinds of local suggestions they can create. Note: Suggestions [[mw:Special:MyLanguage/Edit check/Configuration#:~:text=maximumEditcount|can be targeted]] based on the edit count of the person editing as well as other aspects of the page. You can [[mw:Special:MyLanguage/Help:Suggestion mode#Create custom local types of Suggestions|find examples from other communities]] for inspiration, including TextMatches that detect: typos, grammar-errors, potential advertisements, clichés, incorrect dash or hyphen usage, non-specific time keywords, outdated names, and more. Any [[mw:Special:MyLanguage/Talk:VisualEditor/Suggestion Mode|feedback]] is appreciated. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:27}} community-submitted {{PLURAL:27|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where the SVG Translate tool could use an outdated version of a file, causing existing translations to be overwritten when new ones were uploaded, has now [[phab:T430577|been fixed]]. Overall, in the last quarter from April – June 2026 about 337 community tasks were resolved by the Wikimedia Foundation. '''Updates for technical contributors''' * On Parsoid-enabled wikis, Parsoid now renders a maximum of 1,250 images per page. A new tracking category, "media-limit-reached", will be soon made available to identify pages where this limit is reached, making it easier to find content whose media output may have been restricted during rendering. See [[phab:T430854]] for more information and to provide feedback. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.12|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/30|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W30"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೧೧:೧೬, ೨೧ ಜುಲಾಯಿ ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30836091 --> == <span lang="en" dir="ltr">Tech News: 2026-31</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W31"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/31|Translations]] are available. '''Updates for editors''' * [[File:Maki-gift-15.svg|12px|link=|class=skin-invert|Wishlist item]] [[mw:Special:MyLanguage/ContentTranslation|Content Translation]] now supports dark mode, fulfilling a [[m:Community Wishlist/W544|Community Wishlist request]]. This brings the tool in line with the accessibility features available in the Vector 2022 and Minerva skins, helping reduce visual fatigue for users translating content. [https://phabricator.wikimedia.org/T367077] * DiscussionTools' source mode and the 2017 wikitext editor will now offer autocomplete for links (<bdi lang="zxx" dir="ltr"><code><nowiki>[[</nowiki></code></bdi>), templates (<bdi lang="zxx" dir="ltr"><code><nowiki>{{</nowiki></code></bdi>), HTML and parser tags (<bdi lang="zxx" dir="ltr"><code><nowiki><</nowiki></code></bdi>), and magic words (<bdi lang="zxx" dir="ltr"><code><nowiki>__</nowiki></code></bdi>), making it quicker and easier to insert links, templates, and other wiki markup while editing. [https://phabricator.wikimedia.org/T432400] * The [[mw:Special:MyLanguage/Readers/Reader Growth/Mobile page previews|Readers Growth team]] has concluded its experiment with mobile page previews and will not roll out the feature. Page Previews are a pop-up bottom sheet that appears when readers tap a blue link, showing a thumbnail, lead paragraph, and an option to open the article. The experiment showed flat retention and negative indicator metrics, suggesting that mobile web readers preferred navigating directly to linked articles rather than using page previews. * The Reader Experience team has seen encouraging early results from the [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|Reading Lists feature]], with 93% of participating users reporting that it was useful. Reading Lists help active readers save articles for future reading and support their learning goals on Wikimedia projects. The team plans further improvements before expanding the feature to more users. * The [[mw:Special:MyLanguage/Wikimedia Apps/Team/Explore Feed Refresh|Explore Feed Refresh]] initiative was tested with new and casual Wikipedia app readers. The refreshed feed helps readers discover new and relevant content. After a 10.5% increase in engagement with the feed, Wikimedia Apps team has decided to scale the Home Feed redesign to iOS with the learnings from the Android release applied. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:23}} community-submitted {{PLURAL:23|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where subject names in the Article Guidance feature were displayed with incorrect capitalization on French Wikipedia, has now been fixed. Subject names will now follow the correct capitalization rules for the language. [https://phabricator.wikimedia.org/T427201] '''Updates for technical contributors''' * After running several [[mw:Special:MyLanguage/Contributors/Account Creation Experiments|Account Creation Experiments]] to improve registration completion rates, a new version of the username field on [[Special:CreateAccount|Create Account]] has been rolled out. It includes [[:c:File:Create account - July 2026 updates.png|a popover summarizing the username policy]] to provide clearer guidance during account creation. As part of this change, the messages <bdi lang="zxx" dir="ltr"><code><nowiki>createacct-helpusername</nowiki></code></bdi> and <bdi lang="zxx" dir="ltr"><code><nowiki>createacct-username-help</nowiki></code></bdi> that several communities have configured will no longer be used. If communities want to customize the guidance shown in the new popover, they can instead edit the following messages: <bdi lang="zxx" dir="ltr"><code><nowiki>createacct-username-policy-popover-bullet1</nowiki></code></bdi>, <bdi lang="zxx" dir="ltr"><code><nowiki>createacct-username-policy-popover-bullet2</nowiki></code></bdi>, and <bdi lang="zxx" dir="ltr"><code><nowiki>createacct-username-policy-popover-bullet3</nowiki></code></bdi>. [https://phabricator.wikimedia.org/T430604] * Later this week, the [[mw:Special:MyLanguage/Help:Extension:CodeMirror|CodeMirror syntax highlighter]] will offer [[w:en:Theme (computing)|themes]]. The themes can be picked from a dropdown menu in the full [[mw:Special:MyLanguage/Help:Extension:CodeMirror#CodeMirror preferences|CodeMirror preferences]] dialog. For wikitext, available themes are default, colorblind-friendly (previously the colorblind preference option on [[Special:Preferences#mw-prefsection-editing]]) and no-highlighting. For code languages (i.e., CSS/JavaScript/JSON/Vue/Lua), there are several themes available. These same themes will eventually be available for wikitext, too. [https://phabricator.wikimedia.org/T163533] * From now on, wikis can restrict editing in the "User" namespace to only the page owner and certain user groups. [[mw:Special:MyLanguage/Manual:$wgRestrictUserPageEditing|Read the configuration documentation]] to learn more. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.14|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/31|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W31"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೦:೧೯, ೨೮ ಜುಲಾಯಿ ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30856308 --> == <span lang="en" dir="ltr">Tech News: 2026-32</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W32"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/32|Translations]] are available. '''Updates for editors''' * The [[mw:Special:MyLanguage/Readers/Reader Experience|Reader Experience team]] has developed a [https://82db7c8d4b.catalyst.wmcloud.org/w/index.php?title=Regent%27s_Park&uselang=de patch demo] that wraps the page toolbar onto two lines when there is not enough horizontal space for all the buttons. This aims to reduce crowding in the Vector 2022 toolbar, which can occur on some language Wikipedias at certain screen widths. [https://phabricator.wikimedia.org/T429518] * The Reader Experience team is planning to launch [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|Reading Lists]], a [[m:Special:MyLanguage/Community Wishlist Survey 2021/Mobile and apps/Have Apps reading lists available on Destop/Mobile|Community Wishlist item]], which is currently available to try in beta, as a full feature in September. Before then, volunteer translator help is needed for [https://translatewiki.net/w/i.php?title=Special%3ATranslate&group=ext-readinglists&filter=&action=translate string translations] into a number of languages. The feature supports reading and learning goals on Wikipedia. * Next week, the table of contents on Wikimedia Commons file pages will be improved by consolidating the file page table of contents with the page table of contents. This will make it easier to understand a file page’s structure, navigate to specific sections, and share links to individual sections. [https://phabricator.wikimedia.org/T332644] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:24}} community-submitted {{PLURAL:24|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where some [[w:TIFF|TIFF]] images failed to load after clicking their thumbnail, causing a broken image to be displayed instead of the full-size image, has now been fixed. [https://phabricator.wikimedia.org/T429326] '''Updates for technical contributors''' * The variable and function selector in AbuseFilter has been updated to support search and autocomplete. It will allow filter maintainers to find the desired variable or function more quickly. [https://phabricator.wikimedia.org/T323698] * The MJPEG and VP8 formats are removed from the video player. The MP4 format (MPEG-4 Part 2) is added instead, which provides higher quality videos to older iPhone devices. It may take a few weeks to retroactively update all existing videos. The default format for modern devices stays the same (VP9/WebM). [https://phabricator.wikimedia.org/T358266] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.15|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/32|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W32"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೧:೧೬, ೪ ಆಗೋಸ್ಟು ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30872536 --> == <span lang="en" dir="ltr">Tech News: 2026-33</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W33"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/33|Translations]] are available. '''Updates for editors''' * [[File:Maki-gift-15.svg|12px|link=|class=skin-invert|Wishlist item]] A new ChartWizard is [[c:Special:ChartWizard/Data:Example.Pie.chart|now available on Wikimedia Commons]] for users interested in creating charts from their own data. The wizard makes the [[mw:Special:MyLanguage/Extension:Chart|Chart extension]] more beginner-friendly by allowing editors to create charts, such as bar and pie charts, without needing to use JSON. Users can still switch to the JSON editor if they prefer. Feedback on the new tool is welcome on the [[m:Talk:Community Wishlist/W414|wish talk page]]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:19}} community-submitted {{PLURAL:19|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where the Wikipedia iOS app’s Picture of the Day widget displayed the same image every day instead of updating daily, has now been fixed. [https://phabricator.wikimedia.org/T430692] '''Updates for technical contributors''' * [[mw:Special:MyLanguage/Extension:Math|Math formula]] SVG images will soon be generated in the browser instead of on the server. MathML continues to be generated on the server and renders in the browser without JavaScript. Wikibooks will see this change on 12 August, Wikisource on 19 August and Wikipedia from 20-27 August. You can try this by selecting "{{int:Mw-math-mathjax}}" in your preferences. This change is part of [[mw:Special:MyLanguage/RESTBase/deprecation|deprecating RESTBase]] and [[phab:T431372|deprecating Mathoid]]. [https://phabricator.wikimedia.org/T271001] * Category pages will soon support sorting entries by the time they are added to a category. This will make it easier to find recently or long-standing categorized pages. It will also improve workflows for maintenance categories such as deletion backlogs and other time-based review tasks. You can use <bdi lang="zxx" dir="ltr"><code><nowiki>cldsort=timestamp</nowiki></code></bdi> URL argument in category view to sort the entries. [https://phabricator.wikimedia.org/T433768] * [[mw:Special:MyLanguage/Extension:Gadgets|Gadgets]] and user scripts on Wikimedia wikis may now use [[phab:T395347|ES2018 features]] and [[phab:T419142|ES2019 features]] in JavaScript code. Previously, the platform only allowed up to ES2017. MediaWiki validates the source code to protect functionality from syntax errors and to ensure scripts are valid in all [[mw:Special:MyLanguage/Compatibility#Browser_support_matrix|supported browsers]]. [https://phabricator.wikimedia.org/T419142] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.16|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/33|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W33"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೨:೧೫, ೧೧ ಆಗೋಸ್ಟು ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30901051 --> == <span lang="en" dir="ltr">Tech News: 2026-34</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W34"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/34|Translations]] are available. '''Weekly highlight''' * The [[mw:Special:MyLanguage/Help:Extension:CampaignEvents/Registration/Worklist|Worklist feature]] for the Event Registration tool is now live on all Wikimedia wikis. With Worklist, event organizers can add the articles their event will focus on directly to the event page. The Worklist also powers [[mw:Special:MyLanguage/Help:Extension:CampaignEvents/Registration/Worklist#How Event Pathways uses the worklist|Event Pathways]] which notifies other editors of the upcoming or ongoing event when they edit an article featured in the event's Worklist. This is the minimum viable version (MVP), and feedback is welcome. Organizers are encouraged to try the feature. A hands-on [[m:Special:MyLanguage/Event:Worklist Setup Workshop: Get Your Event Ready|Worklist Setup Workshop]] will take place on 18 August at 16:00 UTC and 19 August at 11:00 UTC. '''Updates for editors''' * [[Special:ShortPages]] displays short pages by their size, but in many cases it gets filled with disambiguations and soft redirects, making it harder to find the short articles themselves. Starting this weekend, you will be able to choose not to include an article in the special page by adding the magic word <bdi lang="zxx" dir="ltr"><code><nowiki>__EXPECTSHORTPAGE__</nowiki></code></bdi>. [https://phabricator.wikimedia.org/T433203] * One new wiki has been created: a {{int:project-localized-name-group-wikipedia/en}} in [[d:Q3436680|Bole]] ([[w:bol:|<bdi lang="zxx" dir="ltr"><code><nowiki>w:bol:</nowiki></code></bdi>]]) [https://phabricator.wikimedia.org/T429921] * Starting the week of August 17, the page toolbar will wrap onto two lines when there is not enough horizontal space for all the buttons. This is a [[phab:T429518|fully merged patch from the Reader Experience team]] which aims to reduce crowding in the Vector 2022 toolbar, that may occur on some language Wikipedias at certain screen widths. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:16}} community-submitted {{PLURAL:16|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, uploading large files to Wikimedia Commons has become more stable and less prone to failure following some fixes related to the “Could not acquire lock” upload error. [https://phabricator.wikimedia.org/T386640] '''Updates for technical contributors''' * Debian Bullseye will reach the end of its Long Term Support on 31 August 2026. [[phab:T434103|Some Cloud VPS projects]] still have instances running Debian Bullseye. Maintainers of those projects are encouraged to migrate to Debian Bookworm or Debian Trixie. A [[wikitech:Help:Cloud VPS instance operating system migration|migration guide]] is available to help with the process, and users may also want to consider whether their workload is better suited to Toolforge. If you need help or cannot complete the migration by 31 August, please contact the Cloud VPS admins as soon as possible. [[listarchive:list/cloud-announce@lists.wikimedia.org/thread/RVIPQSYLKMSL5M46JP6NEJVGVE6I2RXQ/|Read more]]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.16|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/34|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W34"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೨:೩೩, ೧೮ ಆಗೋಸ್ಟು ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30922806 --> == <span lang="en" dir="ltr">Tech News: 2026-35</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W35"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/35|Translations]] are available. '''Updates for editors''' * The [[Special:CreateAccount|Special:CreateAccount]] page has been simplified as part of ongoing work to modernize the account creation experience. The panel showing project statistics no longer appears next to the form on desktop and mobile web. Multiple account creation experiments show that a simpler form helps newcomers complete registration. [https://phabricator.wikimedia.org/T433783] * In order to improve page performance, images now load when they are viewed. This means images lower down an article will not load if a reader never scrolls to that part of the page, which may affect some image-related metrics. [https://phabricator.wikimedia.org/T148047] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:42}} community-submitted {{PLURAL:42|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where image thumbnails in Abstract Wikipedia could fail to display after the corresponding file was moved on Wikimedia Commons, has now been fixed. Thumbnails will now update correctly when files are moved. [https://phabricator.wikimedia.org/T433448] '''Updates for technical contributors''' * User Info card is a feature that helps patrollers see information about user accounts. So far, it has been available only in places such as page history, logs and recent changes. Now, it's possible to [[mw:Special:MyLanguage/Help:Extension:CheckUser#User_Info_card_in_page_content|place it in the page content]] as well, using the <bdi lang="zxx" dir="ltr"><code><nowiki>{{#uic:}}</nowiki></code></bdi> parser function. It can be particularly useful in templates like [[:en:Template:Userlinks|<bdi lang="zxx" dir="ltr"><code><nowiki>{{Userlinks}}</nowiki></code></bdi>]] (or their specialized variants), as it will make it easier to see the context about a user on various noticeboard pages. The card will be displayed only to users who have it enabled in their [[Special:Preferences#mw-input-wpcheckuser-userinfocard-enable|preferences]]. [https://phabricator.wikimedia.org/T424466] * Due to user security and privacy risks, we have disabled access to <bdi lang="zxx" dir="ltr"><code><nowiki>Special:MyPage</nowiki></code></bdi> URLs when specifically using <bdi lang="zxx" dir="ltr"><code><nowiki>action=raw</nowiki></code></bdi>. If you are impacted by this, consider whether you can use an alternative approach. <bdi lang="zxx" dir="ltr"><code><nowiki>Special:MyPage</nowiki></code></bdi> URLs can still be accessed and used without <bdi lang="zxx" dir="ltr"><code><nowiki>action=raw</nowiki></code></bdi>. Specified user page URLs (e.g. <bdi lang="zxx" dir="ltr"><code><nowiki>User:Myusername</nowiki></code></bdi>) can still be used with <bdi lang="zxx" dir="ltr"><code><nowiki>action=raw</nowiki></code></bdi>. [https://phabricator.wikimedia.org/T120386] * Due to an update, the thumbnailing software has been improved. This includes upgrading <bdi lang="zxx" dir="ltr"><code><nowiki>librsvg</nowiki></code></bdi> to 2.60 and <bdi lang="zxx" dir="ltr"><code><nowiki>ImageMagick</nowiki></code></bdi> to 7, as well as resolving a number of long-standing thumbnailing bugs like rendering errors. [https://phabricator.wikimedia.org/T419815#12222841] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.17|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/35|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W35"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೨:೧೫, ೨೫ ಆಗೋಸ್ಟು ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30961208 --> == <span lang="en" dir="ltr">Tech News: 2026-36</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W36"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/36|Translations]] are available. '''Weekly highlight''' * A new format for the Community Wishlist is open for feedback. You can [[m:Special:MyLanguage/Community Wishlist/Community Wishlist 2027|read the proposed ideas on Meta]]. This new process plans to improve how wishes are triaged, voted on, and prioritized in a way that is transparent and balanced across project families and language editions. This consultation is open for two weeks. '''Updates for editors''' * The latest release of the Wikipedia Android app includes updates to the Saved feature, bringing the app’s saving experience closer to iOS and Web. The update redesigns the Saved tab with an “All articles” view, removes the default “Saved” reading list, renames reading lists to “Collections,” and modernizes the article-saving experience. [https://phabricator.wikimedia.org/T420788] * The [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|Reading Lists]] feature was enabled for all logged-in users on Bengali, Chinese, Czech and Vietnamese Wikipedias on August 25, after several months as a beta feature. Reading Lists will be available to all logged-in users on Arabic, French and Indonesian Wikipedias on September 1, followed by English Wikipedia on September 14, and all other Wikipedia wikis on September 28. * At the end of the month, some logged-out readers on Bengali, Czech, Persian, English, and Polish Wikipedias using the Minerva skin on mobile will see an [[mw:Special:MyLanguage/Readers/Reader_Growth/Minimal_Minerva|updated navigation bar]] in an [[w:A/B test|A/B test]]. The test will compare the current navigation bar with a new version designed to make it easier to find information more quickly. The goal is to determine whether these changes encourage readers to return more often. This experiment will not change the experience for logged-in readers and/or editors. * Editors who maintain redirects, templates, and categories used on redirect pages now have improved ways for finding and curating redirects. Previously, redirects pages could not be searched. Two new search keywords, <bdi lang="zxx" dir="ltr"><code><nowiki>onlyredirects:</nowiki></code></bdi> and <bdi lang="zxx" dir="ltr"><code><nowiki>withredirects:</nowiki></code></bdi>, now allow redirects to be searched directly and can be combined with existing keywords such as <bdi lang="zxx" dir="ltr"><code><nowiki>incategory:</nowiki></code></bdi>, <bdi lang="zxx" dir="ltr"><code><nowiki>intitle:</nowiki></code></bdi>, and <bdi lang="zxx" dir="ltr"><code><nowiki>insource:</nowiki></code></bdi>. [https://phabricator.wikimedia.org/T204089] * The ISBN lookup tools for generating citations were recently not working because of external service problems. Developers are working on solutions. [https://phabricator.wikimedia.org/T435179] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:30}} community-submitted {{PLURAL:30|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where searching for pages by category using <bdi lang="zxx" dir="ltr"><code><nowiki>deepcat</nowiki></code></bdi> could return no results or unrelated results has now been fixed. [https://phabricator.wikimedia.org/T414859] '''Updates for technical contributors''' * The domain of URLs for thumbnails is changing from upload.wikimedia.org to thumb.wikimedia.org. The old URLs will continue to work for the foreseeable future but MediaWiki will advertise the new domain instead. URLs to other types of media such as original files, videos and transcodes will still be served from upload.wikimedia.org. [https://phabricator.wikimedia.org/T427465] * The Wikimedia [https://www.mediawiki.org/w/index.php?api=wmf-math%2Fv1&title=Special%3ARestSandbox Math API] is now deprecated. These endpoints will be fully sunset by the end of September 2026. Developers who call these endpoints should transition to alternative math rendering solutions, such as the native [https://developer.mozilla.org/en-US/docs/Web/MathML MathML] or [https://www.mathjax.org/ MathJax]. Third-party MediaWiki installations that utilize the Math extension for formula rendering are required to upgrade to v1.43+ to avoid disruption of service. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.18|MediaWiki]] '''In depth''' * Read more about [[mw:Special:MyLanguage/Edit_check/TextMatch|TextMatch]] in a Diff post titled, [[diffblog:2026/08/28/custom-edit-suggestions-for-every-wiki-how-communities-are-shaping-suggestion-mode-with-textmatch/|Custom edit suggestions for every wiki: How communities are shaping Suggestion Mode with TextMatch]]. '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/36|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W36"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೨:೨೩, ೧ ಸಪ್ಟಂಬರ್ ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30990659 --> == <span lang="en" dir="ltr">Tech News: 2026-37</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W37"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/37|Translations]] are available. '''Updates for editors''' * [[mw:Special:MyLanguage/Help:Growth/Tools/Add_a_link|Add a Link]] has been upgraded for English Wikipedia users with improved detection of links that have different capitalization. This will help reduce ambiguous suggestions caused by differences in capitalization in article titles, including articles about cultural goods. A second phase of improvements is planned, which will also prepare the feature for release in other languages. [https://phabricator.wikimedia.org/T435526#12240876] [https://phabricator.wikimedia.org/T434259] * The [[mw:Special:MyLanguage/Article_guidance|Article guidance]] feature will be enabled by default for junior editors on Simple English and Turkish Wikipedia starting 10 September 2026 following [[mw:Special:MyLanguage/Article_guidance/Updates#Summary_of_experiment_result|an experiment]]. Junior editors with 0 to 99 edits will automatically see the feature when they click a red link or use the "[[tr:Vikipedi:Madde_sihirbazı|Madde oluşturto]]" option on Turkish Wikipedia to create a new article. The change is intended to help junior editors create higher-quality articles that meet each Wikipedia’s standards. [[phab:maniphest/query/z3tcTjmLMxk5/#R|Additional improvements]] will continue based on the experiment results and community feedback. * The [https://pageviews.wmcloud.org Pageviews Analysis] tool which allows users to compare pageviews across multiple pages, turns 10 years old this year and several new features have been added. They include [[toolforge:wikinav|WikiNav]] which provides insights into how readers of Wikipedia explore the content, editing stats in [https://pageviews.wmcloud.org/siteviews?range=latest-30&sites=en.wikipedia.org Siteviews], the ability to [https://pageviews.wmcloud.org/massviews?source=wikiproject&project=en.wikipedia.org lookup articles belonging to a WikiProject], and support for dark mode. [https://phabricator.wikimedia.org/T378549] * A [[mw:Special:MyLanguage/Readers/Reader_Growth/Minimal_Minerva|visually simplified Minerva]] navigation bar is being tested for logged-out readers using mobile web on the Bengali, Czech, English, Farsi, and Polish Wikipedias. The experiment aims to determine whether simplifying the navigation improves reader retention. The test will run from August 31 to September 28, and no action is required from users. * [[m:Special:MyLanguage/WMDE Technical Wishes|WMDE Technical Wishes]] is working on improving [[en:Wikipedia:VisualEditor/Named references|auto-generated reference names in VisualEditor]]. Editors will only notice a slight change starting this week. When adding automatic reference names the numbering will start at <bdi lang="zxx" dir="ltr"><code><nowiki>:1</nowiki></code></bdi> instead of <bdi lang="zxx" dir="ltr"><code><nowiki>:0</nowiki></code></bdi>. Read more on the [[m:WMDE Technical Wishes/References/VisualEditor automatic reference names|project page]]. [https://gerrit.wikimedia.org/r/c/VisualEditor/VisualEditor/+/1332704] * All wikis will be [[m:Special:MyLanguage/Tech/Server switch|read-only for a few minutes]] on September 23. This is planned at 14:00 UTC. More information will be published in Tech News and will also be posted on individual wikis in the coming weeks. [https://phabricator.wikimedia.org/T433363] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:25}} community-submitted {{PLURAL:25|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where [[mw:Special:MyLanguage/Parsoid|Parsoid]] could mishandle nested nowiki tags, causing content to be lost and displaying unwanted text has now been fixed. [https://phabricator.wikimedia.org/T435116] '''Updates for technical contributors''' * Interface administrators can configure gadgets from [[MediaWiki:Gadgets-definition]]. The definition format has been updated and no longer requires the <bdi lang="zxx" dir="ltr"><code><nowiki>ResourceLoader</nowiki></code></bdi> option, as gadgets are always loaded through <bdi lang="zxx" dir="ltr"><code><nowiki>ResourceLoader</nowiki></code></bdi>. This simplifies gadget configuration by removing an option that is no longer necessary, making gadget definitions easier for administrators. [https://phabricator.wikimedia.org/T298199] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.19|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/37|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W37"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೦೦:೧೪, ೮ ಸಪ್ಟಂಬರ್ ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31008437 --> == <span lang="en" dir="ltr">Tech News: 2026-38</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W38"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/38|Translations]] are available. '''Weekly highlight''' * The Future Audiences team has started a [[en:Special:MyLanguage/Wikipedia:Village pump (proposals)#New proposed experiment to let readers know about “Google preferred sources”|discussion on English Wikipedia]] about a proposed new experiment to show a temporary notice about the new [https://blog.google/products-and-platforms/products/search/original-high-quality-content-search/ Google Preferred Sources] feature to Wikipedia readers coming from Google. The experiment is to test whether this notice makes visitors come back to Wikipedia more often. Preferred Sources feature lets users choose websites they trust so Google can highlight content from those sources more prominently in Search and AI experiences. We are interested in testing this on other languages that Google supports and would welcome assistance with starting conversations on other wikis. If interested, please reach out to Future Audiences on the [[m:Special:MyLanguage/Future Audiences/Preferred sources|talk page]]. '''Updates for editors''' * The chat platform Discord is releasing a new self-service framework that websites can use to specify how their links should look when shared on Discord. The Future Audiences team is planning to start using this new framework to improve how Wikipedia links look when shared on Discord, giving better attribution and credit to contributors. The link appearance and behavior won't change in the first phase of this project as we want to first collect some baseline data to assess the impact of future changes. However, if community members who are active on Discord spot any issues, they can reach out on [[phab:tag/future-audiences/|Phabricator]] or [[m:Special:MyLanguage/Future Audiences|Metawiki]]. * The Reader Growth team will be running an experiment to test whether [[mw:Special:MyLanguage/Readers/Reader_Growth/Compact Lead|compacting article lead sections on mobiles]] with the addition of a "read more" button improves reader retention. The test will begin on September 17 on Arabic, Spanish, French, Indonesian, Italian, Japanese, Portuguese, Vietnamese, and Chinese Wikipedias and will run for four weeks. * All wikis will be [[m:Special:MyLanguage/Tech/Server switch|read-only for a few minutes]] on September 23. This is planned at 14:00 UTC. More information will be published in Tech News and will also be posted on individual wikis in the coming week. [https://phabricator.wikimedia.org/T433363] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:28}} community-submitted {{PLURAL:28|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where [https://wikistats.wmcloud.org/ Wikistats] for Wikipedias was returning an HTTP 500 error and could not be reached, has now been fixed. [https://phabricator.wikimedia.org/T435959] '''Updates for technical contributors''' * Developers who maintain a tool that queries the Wikimedia Commons links tables need to update their code to connect to the new x4 database cluster. The links tables have been moved from the s4 cluster to x4, and will no longer receive updates on s4. The page and redirect tables remain available on both clusters. A wiki replica for the x4 cluster will be set up afterwards. The change is being made because the s4 cluster has grown too large to operate efficiently. You can [[wikitech:Special:MyLanguage/News/2026 Commons links tables database split|read more]]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.20|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/38|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W38"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> ೨೧:೦೦, ೧೪ ಸಪ್ಟಂಬರ್ ೨೦೨೬ (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31039826 --> == <span lang="en" dir="ltr">Tech News: 2026-39</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W39"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/39|Translations]] are available. '''Weekly highlight''' * [[m:Special:MyLanguage/Tech/Server switch|All wikis will be read-only]] for a few minutes on Wednesday, 23 September 2026 at [https://zonestamp.toolforge.org/1790172000 14:00 UTC]. This is for the datacenter server switchover backup tests, [[wikitech:Special:MyLanguage/Deployments/Yearly calendar|which happen twice a year]]. During the switchover, all Wikimedia website traffic is shifted from one primary data center to the backup data center to test availability and prevent service disruption even in emergencies. [https://phabricator.wikimedia.org/T433363] '''Updates for editors''' * The Growth team tested a new post-edit notice designed to [[mw:Special:MyLanguage/Contributors/Account Creation Experiments#4. Encourage Temporary Accounts to Register|encourage Temporary Account holders to register for a permanent account]]. The new notice replaced multiple dialogs and a simultaneous welcome notification with a single message highlighting the benefits of creating an account. The experiment increased permanent account creation from 1.94% to 3.66%, an 87% relative increase. The change will now be released to all wikis. [https://phabricator.wikimedia.org/T433551] * For Wikipedia editors using the [[Special:Preferences#mw-prefsection-betafeatures|"Suggestion mode" Beta Feature]], there is a [[Special:Preferences#mw-input-wpvisualeditor-editcheck-experimental|new opt-in user preference]] for showing "experimental" edit checks and suggestions. These types are listed at [[Special:EditChecks#experimental-checks|Special:EditChecks]], and are intended for early developer-testing and for gathering feedback from experienced users. Administrators can change the [[mw:Special:MyLanguage/Edit check/Configuration|configuration details]] for each suggestion as usual. Administrators can also [[mw:Special:MyLanguage/Help:Suggestion mode#Experimental Suggestions|use this feature]] to help test their community's ideas for locally created checks and suggestions. Experimental types will have a more distinct visual style later this week. [[mw:Talk:VisualEditor/Suggestion Mode|Feedback is welcome]]. * The [[m:CEE Technical Village Pump|CEE Technical Village Pump]] has been launched as a space for technical discussions and collaboration among Wikimedia communities in Central and Eastern Europe. * A new tool, [[mw:Special:MyLanguage/Language Onboarding and Development/Starter kit|Starter Kit]], is now available for new and small language Wikipedia communities. It brings together guided tasks, tools, and resources to help communities get started, monitor their progress, and collaborate with the broader Wikimedia community. Starter Kit is hosted on Wikimedia Toolforge and is designed for Wikipedias with fewer than 50,000 articles. Learn more about how Starter Kit works and how communities have been using it in [[diffblog:2026/09/18/introducing-starter-kit-for-new-and-small-language-wikipedias/|this Diff blog post]]. * The Reader Growth team is launching a retest of the [[mw:Special:MyLanguage/Readers/Reader Growth/Image Browsing|image carousel experiment]]. The retest will use three new versions of the design, updated based on community feedback. The team will assess results and determine with communities whether or not to proceed with the feature. The experiment will begin the week of September 28 and will run on Arabic, Bengali, Chinese, Czech, English, Farsi, French, German, Indonesian, Japanese, Polish, Portuguese, Spanish, Swedish, and Vietnamese Wikipedias. * After successful rollouts to Arabic, Bengali, Chinese, Czech, English, French, Indonesian, and Vietnamese Wikipedias, the [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|Reading Lists feature]] from the Reader Experience team will be available to all logged-in users on all Wikipedia wikis starting September 28. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:28}} community-submitted {{PLURAL:28|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where the mentor status script repeatedly updated mentors’ status even when nothing had changed, creating unnecessary Recent Changes entries, has now been fixed. [https://phabricator.wikimedia.org/T436659] '''Updates for technical contributors''' * The <bdi lang="zxx" dir="ltr"><code><nowiki>abusefilters</nowiki></code></bdi> list query API, used to retrieve specific details about active or historical abuse filters configured on a wiki, has been updated to support the <bdi lang="zxx" dir="ltr"><code><nowiki>formatversion=2</nowiki></code></bdi> configuration parameter, thereby leading to breaking changes to the API response. All users who maintain user-scripts or other code need to check if they use the <bdi lang="zxx" dir="ltr"><code><nowiki>abusefilters</nowiki></code></bdi> list query API, and respond to any breaking changes. [https://phabricator.wikimedia.org/T435828] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.21|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/39|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W39"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 17:26, 27 ಸಪ್ಟಂಬರ್ 2026 (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31085309 --> == <span lang="en" dir="ltr">Tech News: 2026-40</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W40"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/40|Translations]] are available. '''Updates for editors''' * Users of default skins on desktop and mobile web (Vector 2022 and Minerva respectively) will now be informed if the search suggestions displayed as they type into Search come from page redirects. Previously, users could get confused when the top search suggestions did not match exactly what they had typed. The new redirect notice clarifies that these suggestions are not random, but related to the search. The suggested pages may be redirects to the most relevant destination articles being searched for. [https://phabricator.wikimedia.org/T303013] * Logged-out Wikipedia users on mobile web will begin to see a bookmark button for saving articles to their [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|reading lists]] instead of the current Watchstar button. When clicked, the bookmark button prompts users to log in or create an account to save an article for later. An earlier experiment found that the bookmark icon was four times more likely than the Watchstar button to encourage logged-out users to create an account. This change is part of efforts to encourage more readers to become account holders and use features that help them save and return to content. [https://phabricator.wikimedia.org/T438769] * An experiment will begin on September 29 on Spanish, Arabic, English, and French Wikipedias to simplify the experience users encounter immediately after account creation. The test will explore whether removing friction from the current Welcome Survey helps new users understand what to do next more easily. The experiment will run through the end of October. [https://phabricator.wikimedia.org/T430058] * The [[m:Special:MyLanguage/Product and Technology Advisory Council|Product and Technology Advisory Council]] has put out a call for the community to suggest topics that it should consider and discuss with the Wikimedia Foundation. Editors and technical contributors are invited to add topics to [[m:Talk:Product and Technology Advisory Council|the council's talk page]]. * Later this week, it will be possible for communities to configure [[mw:Special:MyLanguage/Help:Edit check|Edit Checks and Suggestions]] so that they are [[mw:Special:MyLanguage/Edit check/Configuration#extraNamespaces|shown within additional namespaces]], such as a <bdi lang="zxx" dir="ltr"><code><nowiki>Draft:</nowiki></code></bdi> namespace. [[mw:Talk:VisualEditor/Suggestion Mode|Feedback is welcome]]. * A bug in the [[m:Special:GlobalWatchlist|Global Watchlist]] is causing the page to fail to load for users that have unseen changes on Wikimedia Commons. Developers are working on a fix. Until then, affected users can follow the workarounds described in the [[mw:Special:MyLanguage/Extension:GlobalWatchlist#GlobalWatchlist temporarily broken for users with Wikimedia Commons|relevant]] help section. * New magic words <bdi lang="zxx" dir="ltr"><code><nowiki>{{CATEGORYSORT:TIMESTAMP}}</nowiki></code></bdi> and <bdi lang="zxx" dir="ltr"><code><nowiki>{{CATEGORYSORT:RTIMESTAMP}}</nowiki></code></bdi> are now available for use. They are able to change the default sorting of categories to be based on timestamp of categorization. [https://phabricator.wikimedia.org/T433768] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:20}} community-submitted {{PLURAL:20|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the issue where [https://wikistats.wmcloud.org/ Wikistats] for Wikipedias was not reachable has now been fixed. [https://phabricator.wikimedia.org/T435959] '''Updates for technical contributors''' * The datacenter switchover, scheduled on September 23, has been postponed. [[diffblog:2025/03/12/hear-that-the-wikis-go-silent-twice-a-year/|The equinox exercise]] revealed capacity issues, preventing the switch of all services to the other datacenter. The process has been paused, prioritizing investigating that issue, to ensure that we continue to be able to serve our users reliably. A new exercise will be scheduled. Meanwhile, all traffic and edits continue to work as usual. * On September 23, a power loss briefly affected all wikis, creating intermittent issues on both reading and editing modes. This also affected Gerrit. This is unrelated to the datacenter switchover postponement. [https://www.wikimediastatus.net/incidents/9fm19t8qykk8] * [[mw:Special:MyLanguage/Help:Extension:Produnto|Produnto]] has been deployed to mediawiki.org and [[phab:T421436|some Indic language wikis]]. We want to hear your feedback on this experimental product. Produnto allows users to use Lua modules hosted in [[gitlab:repos/lua|Wikimedia's GitLab]]. It simplifies the sharing of Lua code between wikis. Instead of copying each individual Lua module from one wiki to another, users will be able to easily share packages across all wikis. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.22|MediaWiki]] '''Meetings and events''' * A [[m:Event:Cross-wiki Code Collaboration Workshop|Cross-wiki code collaboration workshop]] will be held online on October 2 at 12:30 UTC, bringing together South Asian technical contributors to learn about Produnto and begin piloting it on Hindi, Punjabi, Odia, Telugu, and Malayalam Wikipedias. Produnto is a package manager for deploying Lua modules hosted on GitLab to Wikimedia wikis, and was recently deployed on some pilot wikis. '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/40|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W40"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 16:18, 28 ಸಪ್ಟಂಬರ್ 2026 (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31092225 --> == <span lang="en" dir="ltr">Tech News: 2026-41</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W41"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/41|Translations]] are available. '''Weekly highlight''' * The process for this year’s Community Wishlist [[m:Special:MyLanguage/Community Wishlist/Community Wishlist 2027#Updated Community Wishlist Process 2027/2028|has been published]], incorporating community feedback. The wish submission process will [[m:Special:MyLanguage/Community Wishlist/FAQ#What is the deadline for submitting wishes?|end on November 8]]. This year, [[m:Special:MyLanguage/Community Wishlist/Community Wishlist 2027/Working group|a working group (open for volunteering)]] that includes community members familiar with the technical aspect of our wikis alongside Wikimedia Foundation staff, will take care of the [[m:Special:MyLanguage/Community Wishlist/FAQ#What is triage?|triage process]]. The triage is expected to be completed by late November. Votes for wishes will start in January. '''Updates for editors''' * Editors using the [[mw:Special:MyLanguage/VisualEditor|visual editor]] will now see a warning when they paste text that is likely to have initially been copied from one of five external generative AI chatbots into Wikipedia. This feature is known as [[mw:Special:MyLanguage/Edit check/LLM Paste Check|LLM Paste Check]]. It is a type of [[mw:Special:MyLanguage/Edit check|Edit Check]] that is community configurable. The check looks for markers in the copied HTML and is not using content watermark detection. Edits will also [[mw:Special:MyLanguage/Edit check/LLM Paste Check#Edit tags|be tagged]] so that patrollers can review them more closely. The feature helps newcomers add content that respects Wikipedia’s policies and makes it easier for experienced editors to identify problematic edits. Communities with local policies about LLM usage can [[mw:Special:MyLanguage/Edit check/LLM Paste Check#Configuration|adjust the wording and policy that is linked]]. The team [[listarchive:list/translators-l@lists.wikimedia.org/message/EVHKWJ4IERZELMPIWNH3XUVUSQV5KOO4/|apologizes]] that this was rolled out without a delay for translations. * Editors can now easily [[mw:Special:MyLanguage/Wikimedia Apps/Team/Future of Editing on the Mobile Apps|access the web visual editor directly from the iOS and Android apps]]. When opening the editor, users will be given a choice between visual editing and source editing. If they choose visual editing, they will be sent to a mobile web window in their phone's browser. After completing their edit, a banner will give them the option to return to the app. This enables readers to make quick contributions while casually reading. * Users of the Wikipedia Android and iOS apps will now see a one-time account creation prompt after they have used the app for two consecutive weeks. This prompt explains the benefits of having an account. It is intended to help more casual readers become logged-in users who return to the apps regularly. [https://phabricator.wikimedia.org/T434847] * Editors on [[wmnoc:conf/dblists/group1.dblist|group1 wikis]], including Wikiquote, Wikibooks, Wikiversity, Wikivoyage, and Wikisource, will no longer see notifications on [[mw:Special:MyLanguage/Help:Recent changes|Recent Changes]] and [[mw:Special:MyLanguage/Help: Watching pages|Watchlist]] when a link to another language version of a page is added, removed, or changed in its Wikidata item. This change will begin on October 5 at 07:00 UTC as a two-week trial to reduce high-volume, low-value notifications and make important changes easier to identify. Editors who rely on these notifications can read more on the [[m:Wikidata For Wikimedia Projects/Clearer Wikidata Edit Summaries/Hide Language Link edits|project page]] and share feedback or concerns on the [[m:Talk:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|talk page]]. [https://phabricator.wikimedia.org/T439415] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:36}} community-submitted {{PLURAL:36|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where mentors who removed themselves from the mentorship program could still have mentees assigned to them and receive questions, has now been fixed. Mentees will now be reassigned when a mentor leaves the program. [https://phabricator.wikimedia.org/T418194] '''Updates for technical contributors''' * Wikimedia Brasil has published its [[m:Special:MyLanguage/Wikimedia Brasil/Arcabouço de Boas Práticas de Desenvolvimento|Development Best Practices Framework]] (ABPD). It is a guide for staff, contractors and volunteers building technical tools and projects. It covers the project lifecycle, security, accessibility, personal data protection and responsible AI use, and explains how movement-wide guidelines were adapted to a local context. They encourage other affiliates to reuse it and adapt it. Read more in the [[wmfblog:2026/09/26/wikimedia-brasils-development-best-practices-framework-technical-sustainability-as-an-organizational-responsibility|Diff post]]. * A new, canonical base URL for Wikimedia APIs will soon be introduced. The new canonical route follows a <bdi lang="zxx" dir="ltr"><code><nowiki>{projectName}/api/</nowiki></code></bdi> pattern and will act as an alternative path for current REST APIs (for example: <bdi lang="zxx" dir="ltr"><code><nowiki>{projectName}/w/rest.php/</nowiki></code></bdi>). Both versions will be callable for all existing APIs, but the new structure will be the preferred path for newly created API modules. This change will be non-breaking for most users. The existing pathways will remain available for all existing endpoint requests. However, some endpoints may return URLs following the new pattern in response bodies. Changes will be available on test wiki first, with the rollout expected to cover all wikis by the end of October. [https://phabricator.wikimedia.org/T433535] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.23|MediaWiki]]. '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/41|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W41"/> </div> 00:21, 6 ಅಕ್ಟೋಬರ್ 2026 (IST) <!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31098825 --> l2x0txl2ga9gxhoyfauxc8zvgynh77f ಟೆಂಪ್ಲೇಟ್:Crw 10 25299 373875 355281 2026-04-18T13:28:15Z en>Primefac 0 Primefac moved page [[Template:Crw]] to [[Template:National women's cricket team]]: expand name for clarity 373875 wikitext text/x-wiki #REDIRECT [[Template:National women's cricket team]] {{Redirect category shell| {{R from move}} }} r17dl9qe7tw7hbp5spmyt7o44lh1vtx 373876 373875 2026-10-28T05:55:28Z ChiK 1136 1 revision imported from [[:en:Template:Crw]] 373875 wikitext text/x-wiki #REDIRECT [[Template:National women's cricket team]] {{Redirect category shell| {{R from move}} }} r17dl9qe7tw7hbp5spmyt7o44lh1vtx ಮೋಡ್ಯೂಲ್:TuluvasLivingandCultureHeritageTopicsTable 828 28163 373842 367176 2026-10-28T05:23:54Z A826 4610 + update table Last updated: 2026-10-28 05:20:38 373842 Scribunto text/plain --[[ Module:TuluvasLivingandCultureHeritageTopicsTable Usage: {{#invoke:TuluvasLivingandCultureHeritageTopicsTable|table}} This module generates language availability tables and sitelinks for English, Kannada, and Tulu Wikipedias. ]] local p = {} -- Define the languages to display in the table local languages = { {code = 'en', name = 'English', wiki = 'enwiki'}, {code = 'kn', name = 'ಕನ್ನಡ', wiki = 'knwiki'}, {code = 'tcy', name = 'ತುಳು', wiki = 'tcywiki'} } --[[ Module:WikiLovesTuluvasLivingAndCulturalHeritage Table: Wiki Loves Tuluvas Living and Cultural Heritage Automatically generated from Wikipedia categories Last updated: 2026-10-28 05:20:38 ]] local topics = { -- Tulu Cinema from Category:Tulu cinema {"Tulu cinema", "Q7852417", "Tulu Cinema", "Tulu cinema", "ತುಳು ಸಿನಿಮಾ", "ತುಳು ಸಿನೆಮಾ"}, {"Cinema of South India", "Q7567541", "Tulu Cinema", "Cinema of South India", "", ""}, {"Ekka Saka", "Q19571574", "Tulu Cinema", "Ekka Saka", "", ""}, {"List of highest-grossing South Indian films", "Q105638942", "Tulu Cinema", "List of highest-grossing South Indian films", "", ""}, {"List of Tulu-language films", "Q21010883", "Tulu Cinema", "List of Tulu-language films", "", ""}, -- People (Udupi) from Category:People from Udupi {"B.V. Acharya", "Q66442367", "People (Udupi)", "B.V. Acharya", "ಬಿ.ವಿ ಆಚಾರ್ಯ", ""}, {"Prahlad Acharya", "Q7237720", "People (Udupi)", "Prahlad Acharya", "", ""}, {"V. S. Acharya", "Q7906213", "People (Udupi)", "V. S. Acharya", "ವಿ. ಎಸ್. ಆಚಾರ್ಯ", "ವಿ. ಎಸ್. ಆಚಾರ್ಯ"}, {"N. M. Adyanthaya", "Q6951702", "People (Udupi)", "N. M. Adyanthaya", "", ""}, {"Pruthvi Ambaar", "Q95810821", "People (Udupi)", "Pruthvi Ambaar", "ಪೃಥ್ವಿ ಅಂಬಾರ್", "ಪೃಥ್ವಿ ಅಂಬಾರ್"}, {"H. S. Ballal", "Q5628543", "People (Udupi)", "H. S. Ballal", "ಎಚ್. ಎಸ್. ಬಲ್ಲಾಳ್", ""}, {"K. Raghupati Bhat", "Q6323875", "People (Udupi)", "K. Raghupati Bhat", "", ""}, {"Adline Castelino", "Q85943901", "People (Udupi)", "Adline Castelino", "", ""}, {"Meera Chandrasekhar", "Q20810631", "People (Udupi)", "Meera Chandrasekhar", "ಮೀರಾ ಚಂದ್ರಶೇಖರ್", ""}, {"Oscar Fernandes", "Q1453956", "People (Udupi)", "Oscar Fernandes", "ಆಸ್ಕರ್ ಫೆರ್ನಾಂಡಿಸ್", "ಆಸ್ಕರ್ ಫೆರ್ನಾಂಡಿಸ್"}, {"Bannanje Govindacharya", "Q4856866", "People (Udupi)", "Bannanje Govindacharya", "ಬನ್ನಂಜೆ ಗೋವಿಂದಾಚಾರ್ಯ", "ಬನ್ನಂಜೆ ಗೋವಿಂದಾಚಾರ್ಯ"}, {"Nik Gugger", "Q18132152", "People (Udupi)", "Nik Gugger", "", ""}, {"Harini (Kannada actress)", "Q15723133", "People (Udupi)", "Harini (Kannada actress)", "ಹರಿಣಿ", "ಹರಿಣಿ(ನಟಿ)"}, {"Ranjani Hebbar", "Q20880402", "People (Udupi)", "Ranjani Hebbar", "", ""}, {"B. M. Hegde", "Q4883664", "People (Udupi)", "B. M. Hegde", "ಬಿ.ಎಮ್.ಹೆಗ್ಡೆ", ""}, {"Khedinji Kanthappa Hegde", "Q6401191", "People (Udupi)", "Khedinji Kanthappa Hegde", "", ""}, {"Inna Rammohan Rao", "Q130265916", "People (Udupi)", "Inna Rammohan Rao", "", ""}, {"Udupi Jayaram", "Q100234492", "People (Udupi)", "Udupi Jayaram", "ಉಡುಪಿ ಜಯರಾಮ್", ""}, {"M. V. Kamath", "Q3877603", "People (Udupi)", "M. V. Kamath", "ಎಮ್. ವಿ. ಕಾಮತ್", "ಎಂ.ವಿ.ಕಾಮತ್"}, {"K. R. Karanth", "Q6323819", "People (Udupi)", "K. R. Karanth", "", ""}, {"Ganesh Karnik", "Q5520835", "People (Udupi)", "Ganesh Karnik", "", ""}, {"Santosh Kumar Gulwadi", "Q51091201", "People (Udupi)", "Santosh Kumar Gulwadi", "ಸಂತೋಷ ಕುಮಾರ್ ಗುಲ್ವಾಡಿ", ""}, {"Manorama Madhwaraj", "Q6751416", "People (Udupi)", "Manorama Madhwaraj", "", ""}, {"Lalaji Mendon", "Q6480170", "People (Udupi)", "Lalaji Mendon", "", ""}, {"Prabhu Mundkur", "Q65944580", "People (Udupi)", "Prabhu Mundkur", "", ""}, {"Ramdas Pai", "Q7289318", "People (Udupi)", "Ramdas Pai", "ರಾಮದಾಸ ಮಾಧವ ಪೈ", ""}, {"T. M. A. Pai", "Q7668481", "People (Udupi)", "T. M. A. Pai", "ಟಿ.ಎಮ್.ಎ.ಪೈ", "ಟಿ. ಎಮ್. ಎ. ಪೈ"}, {"Vinaya Prasad", "Q3595283", "People (Udupi)", "Vinaya Prasad", "ವಿನಯಾ ಪ್ರಸಾದ್", "ವಿನಯಾ ಪ್ರಸಾದ್"}, {"Ramchandra P. N.", "Q7289286", "People (Udupi)", "Ramchandra P. N.", "", ""}, {"Arun Shenoy", "Q16217614", "People (Udupi)", "Arun Shenoy", "", ""}, {"Nakul Shenoy", "Q35829956", "People (Udupi)", "Nakul Shenoy", "", ""}, {"P. Ranganath Shenoy", "Q7117489", "People (Udupi)", "P. Ranganath Shenoy", "", ""}, {"B. R. Shetty", "Q4834167", "People (Udupi)", "B. R. Shetty", "ಬಿ. ಆರ್. ಶೆಟ್ಟಿ", "ಬಾವಗುತ್ತು ರಘುರಾಮ ಶೆಟ್ಟಿ"}, {"B. Vithal Shetty", "Q4834247", "People (Udupi)", "B. Vithal Shetty", "", ""}, {"I. M. Jayarama Shetty", "Q5968029", "People (Udupi)", "I. M. Jayarama Shetty", "", "ಐ. ಎಮ್. ಜಯರಾಮ ಶೆಟ್ಟಿ"}, {"Kalmanje Jagannatha Shetty", "Q6354026", "People (Udupi)", "Kalmanje Jagannatha Shetty", "", ""}, {"Rakshit Shetty", "Q16239340", "People (Udupi)", "Rakshit Shetty", "ರಕ್ಷಿತ್ ಶೆಟ್ಟಿ", "ರಕ್ಷಿತ್ ಶೆಟ್ಟಿ"}, {"V. P. Shetty", "Q7906168", "People (Udupi)", "V. P. Shetty", "", ""}, {"Vinay Kumar Sorake", "Q7931379", "People (Udupi)", "Vinay Kumar Sorake", "", ""}, {"Gundibail Sunderam", "Q5618639", "People (Udupi)", "Gundibail Sunderam", "", ""}, {"Vishwesha Tirtha", "Q4112616", "People (Udupi)", "Vishwesha Tirtha", "ವಿಶ್ವೇಶ ತೀರ್ಥ", ""}, {"Archana Udupa", "Q4785561", "People (Udupi)", "Archana Udupa", "ಅರ್ಚನಾ ಉಡುಪ", ""}, {"H. V. K. Udupa", "Q66441101", "People (Udupi)", "H. V. K. Udupa", "", ""}, {"K. N. Udupa", "Q20687457", "People (Udupi)", "K. N. Udupa", "", ""}, {"Vadiraj", "Q140332589", "People (Udupi)", "Vadiraj", "", ""}, {"Vaidehi (Kannada writer)", "Q7908699", "People (Udupi)", "Vaidehi (Kannada writer)", "ವೈದೇಹಿ", "ವೈದೇಹಿ"}, {"B. Vittalacharya", "Q3714731", "People (Udupi)", "B. Vittalacharya", "ಬಿ.ವಿಠ್ಠಲಾಚಾರ್ಯ", ""}, -- Transport from Category:Transport in Dakshina Kannada district {"Kabaka Puttur railway station", "Q63360791", "Transport", "Kabaka Puttur railway station", "", ""}, -- District from Category:Dakshina Kannada district {"Mangaluru District", "Q950571", "District", "Mangaluru District", "ದಕ್ಷಿಣ ಕನ್ನಡ", "ದಕ್ಷಿಣ ಕನ್ನಡ ಜಿಲ್ಲೆ"}, {"Bantval Assembly constituency", "Q55435116", "District", "Bantval Assembly constituency", "", ""}, {"Belthangady Assembly constituency", "Q17017113", "District", "Belthangady Assembly constituency", "", ""}, {"Dakshina Kannada Lok Sabha constituency", "Q5121423", "District", "Dakshina Kannada Lok Sabha constituency", "ದಕ್ಷಿಣ ಕನ್ನಡ (ಲೋಕ ಸಭೆ ಚುನಾವಣಾ ಕ್ಷೇತ್ರ)", ""}, {"Dharmasthala mass burial case", "Q135471372", "District", "Dharmasthala mass burial case", "", ""}, {"Kambala", "Q6356259", "District", "Kambala", "ಕಂಬಳ", "ಕಂಬುಲ"}, {"Mangalore City Assembly constituency", "Q124655666", "District", "Mangalore City Assembly constituency", "", ""}, {"Mangalore City North Assembly constituency", "Q28173545", "District", "Mangalore City North Assembly constituency", "", ""}, {"Mangalore Lok Sabha constituency", "Q6748709", "District", "Mangalore Lok Sabha constituency", "", ""}, {"Moodabidri Assembly constituency", "Q55435115", "District", "Moodabidri Assembly constituency", "", ""}, {"Panemangalore Assembly constituency", "Q124795470", "District", "Panemangalore Assembly constituency", "", ""}, {"Pattanaje", "Q31830233", "District", "Pattanaje", "ಪತ್ತನಾಜೆ", "ಪತ್ತನಾಜೆ"}, {"Kanara", "Q3010684", "District", "Kanara", "ಕೆನರಾ", ""}, {"Pili Yesa", "Q5935713", "District", "Pili Yesa", "ಹುಲಿವೇಷ", "ಪಿಲಿ ಏಸ"}, {"Puttur Assembly constituency", "Q55435117", "District", "Puttur Assembly constituency", "", ""}, {"Siddavesa", "Q31830689", "District", "Siddavesa", "ಸಿದ್ಧವೇಷ", "ಸಿದ್ದವೇಸ ನಲಿಕೆ"}, {"Soujanya rape and murder case", "Q141693449", "District", "Soujanya rape and murder case", "", ""}, {"South Kanara (North) Lok Sabha constituency", "Q48727343", "District", "South Kanara (North) Lok Sabha constituency", "", ""}, {"South Kanara (South) Lok Sabha constituency", "Q48727364", "District", "South Kanara (South) Lok Sabha constituency", "", ""}, {"St. Joseph Church, Belman", "Q60741501", "District", "St. Joseph Church, Belman", "", ""}, {"Sullia Assembly constituency", "Q55435118", "District", "Sullia Assembly constituency", "", ""}, {"Surathkal Assembly constituency", "Q124655639", "District", "Surathkal Assembly constituency", "", ""}, {"Tulu language", "Q34251", "District", "Tulu language", "ತುಳು", "ತುಳು ಬಾಸೆ"}, {"Udupi Assembly constituency", "Q55435028", "District", "Udupi Assembly constituency", "", ""}, {"Ullal Assembly constituency", "Q124655657", "District", "Ullal Assembly constituency", "", ""}, {"Ullal City Municipal Council", "Q28154562", "District", "Ullal City Municipal Council", "", ""}, {"Vittal Assembly constituency", "Q117705790", "District", "Vittal Assembly constituency", "", ""}, -- Museums from Category:Museums in Mangalore {"Aloyseum", "Q85741013", "Museums", "Aloyseum", "ಅಲೋಸಿಯಮ್", ""}, {"Srimanthi Bhai Memorial Government Museum", "Q85802848", "Museums", "Srimanthi Bhai Memorial Government Museum", "ಶ್ರೀಮಂತಿ ಭಾಯಿ ಸ್ಮಾರಕ ಸರ್ಕಾರಿ ವಸ್ತುಸಂಗ್ರಹಾಲಯ", ""}, -- Buildings & Structures from Category:Buildings and structures in Mangalore {"Centre for Entrepreneurship Opportunities and Learning", "Q85751277", "Buildings & Structures", "Centre for Entrepreneurship Opportunities and Learning", "", ""}, {"Light House Hill", "Q17068827", "Buildings & Structures", "Light House Hill", "", ""}, {"Mangala Stadium", "Q6748660", "Buildings & Structures", "Mangala Stadium", "ಮಂಗಳ ಕ್ರೀಡಾಂಗಣ", ""}, {"Mangalore Central railway station", "Q4855803", "Buildings & Structures", "Mangalore Central railway station", "ಮಂಗಳೂರು ಸೆಂಟ್ರಲ್ ರೈಲ್ವೆ ನಿಲ್ದಾಣ", ""}, {"Mangalore International Airport", "Q290527", "Buildings & Structures", "Mangalore International Airport", "ಮಂಗಳೂರು ಅಂತಾರಾಷ್ಟ್ರೀಯ ವಿಮಾನ ನಿಲ್ದಾಣ", ""}, {"Mangalore Junction railway station", "Q16894563", "Buildings & Structures", "Mangalore Junction railway station", "ಮಂಗಳೂರು ಜಂಕ್ಷನ್ ರೈಲು ನಿಲ್ದಾಣ", ""}, {"Netravati Bridge", "Q24912217", "Buildings & Structures", "Netravati Bridge", "", ""}, {"Pandava Caves", "Q15040933", "Buildings & Structures", "Pandava Caves", "ಪಾಂಡವರ ಗುಹೆಗಳು", ""}, {"List of tallest buildings in Mangaluru", "Q19893328", "Buildings & Structures", "List of tallest buildings in Mangaluru", "", ""}, {"TMA Pai International Convention Centre", "Q28154322", "Buildings & Structures", "TMA Pai International Convention Centre", "", ""}, {"Town Hall, Mangaluru", "Q28154431", "Buildings & Structures", "Town Hall, Mangaluru", "", ""}, {"U S Mallya Indoor Stadium", "Q60760744", "Buildings & Structures", "U S Mallya Indoor Stadium", "ಯು ಎಸ್ ಮಲ್ಯ ಒಳಾಂಗಣ ಕ್ರೀಡಾಂಗಣ", ""}, -- Tourist Attractions from Category:Tourist attractions in Dakshina Kannada district {"Bandaje Falls", "Q4854332", "Tourist Attractions", "Bandaje Falls", "ಬಂಡಾಜೆ ಜಲಪಾತ", ""}, {"Manjusha Museum", "Q6750466", "Tourist Attractions", "Manjusha Museum", "ಮಂಜುಷಾ ವಸ್ತು ಸಂಗ್ರಹಾಲಯ", ""}, -- Temples from Category:Hindu temples in Udupi district {"Ambalapady Mahakali Temple", "Q4740978", "Temples", "Ambalapady Mahakali Temple", "ಅಂಬಲಪಾಡಿ ಮಹಾಕಾಳಿ ಲಕ್ಷ್ಮೀಜನಾರ್ಧನ ದೇವಾಲಯ", ""}, {"Anantheshwara Temple, Udupi", "Q19899058", "Temples", "Anantheshwara Temple, Udupi", "ಅನಂತೇಶ್ವರ ದೇವಸ್ಥಾನ, ಉಡುಪಿ", ""}, {"Balekudru Shreematha", "Q4850689", "Temples", "Balekudru Shreematha", "", ""}, {"Gude Mahalingeswara Temple", "Q24943431", "Temples", "Gude Mahalingeswara Temple", "", ""}, {"Guru Narasimha Temple, Saligrama", "Q5620424", "Temples", "Guru Narasimha Temple, Saligrama", "ಗುರು ನರಸಿಂಹ ದೇವಸ್ಥಾನ, ಸಾಲಿಗ್ರಾಮ", ""}, {"Kollur Mookambika Temple", "Q3595863", "Temples", "Kollur Mookambika Temple", "ಕೊಲ್ಲೂರು ಮೂಕಾಂಬಿಕಾ ದೇವಸ್ಥಾನ", ""}, {"Maranakatte", "Q6754766", "Temples", "Maranakatte", "ಮಾರಣಕಟ್ಟೆ - ಬ್ರಹ್ಮಲಿಂಗೇಶ್ವರ", ""}, {"Mundkur", "Q5952313", "Temples", "Mundkur", "ಮುಂಡ್ಕೂರು", "ಮುಂಡ್ಕೂರು"}, {"Saarvajanika Nagabrahmastana Moodanidambooru, Bannanje", "Q7395703", "Temples", "Saarvajanika Nagabrahmastana Moodanidambooru, Bannanje", "", ""}, {"Sri Maha Vishnumoorthy Temple, Karval, Yerlapady", "Q7586148", "Temples", "Sri Maha Vishnumoorthy Temple, Karval, Yerlapady", "", ""}, {"Sri Venkataramana Temple, Karkala", "Q7124020", "Temples", "Sri Venkataramana Temple, Karkala", "ವೆಂಕಟರಮಣ ದೇವಸ್ಥಾನ, ಕಾರ್ಕಳ", ""}, {"Sri Vinayaka Temple, Guddattu", "Q60617898", "Temples", "Sri Vinayaka Temple, Guddattu", "ಶ್ರೀ ವಿನಾಯಕ ದೇವಸ್ಥಾನ, ಗುಡ್ಡೆಟ್ಟು", ""}, {"Sri Vishweshwara Temple, Yellur", "Q8052015", "Temples", "Sri Vishweshwara Temple, Yellur", "ಶ್ರೀ ವಿಶ್ವೇಶ್ವರ ದೇವಸ್ಥಾನ, ಎಲ್ಲೂರು", ""}, {"List of Hindu temples in Tulu Nadu", "Q6642825", "Temples", "List of Hindu temples in Tulu Nadu", "", ""}, {"Udupi Sri Krishna Matha", "Q2044395", "Temples", "Udupi Sri Krishna Matha", "ಕೃಷ್ಣ ಮಠ", "ಕೃಷ್ಣ ಮಠ"}, -- Buildings & Structures from Category:Buildings and structures in Udupi district {"Ajjarakadu Mahatma Gandhi District Stadium", "Q24748065", "Buildings & Structures", "Ajjarakadu Mahatma Gandhi District Stadium", "", ""}, {"Chaturmukha Basadi, Karkala", "Q22952213", "Buildings & Structures", "Chaturmukha Basadi, Karkala", "ಚತುರ್ಮುಖ ಬಸದಿ, ಕಾರ್ಕಳ", "ಚತುರ್ಮುಖ ಬಸದಿ, ಕಾರ್ಕಳ"}, {"Our Lady of Lourdes Church, Kanajar", "Q24931711", "Buildings & Structures", "Our Lady of Lourdes Church, Kanajar", "", ""}, {"Our Lady of the Miracles Cathedral, Kallianpur (Milagres Cathedral)", "Q15253371", "Buildings & Structures", "Our Lady of the Miracles Cathedral, Kallianpur (Milagres Cathedral)", "", ""}, {"Suralu Mud Palace", "Q136436365", "Buildings & Structures", "Suralu Mud Palace", "", ""}, {"Udupi Power Plant", "Q11990788", "Buildings & Structures", "Udupi Power Plant", "", ""}, -- Geography from Category:Dakshina Kannada district geography stubs {"102 Nekkilady", "Q4546414", "Geography", "102 Nekkilady", "೧೦೨ ನೆಕ್ಕಿಲಡಿ", ""}, {"Aithoor", "Q4699314", "Geography", "Aithoor", "ಐತ್ತೂರು", ""}, {"Aivarnadu", "Q4699367", "Geography", "Aivarnadu", "", ""}, {"Aivathoklu", "Q4699371", "Geography", "Aivathoklu", "", ""}, {"Ajjavara", "Q4699863", "Geography", "Ajjavara", "ಅಜ್ಜಾವರ", ""}, {"Ajjibettu", "Q4699876", "Geography", "Ajjibettu", "ಅಜ್ಜಿಬೆಟ್ಟು", ""}, {"Aletty", "Q4716527", "Geography", "Aletty", "ಅಲೆಟ್ಟಿ", "ಅಲೆಟ್ಟಿ"}, {"Alike", "Q4726612", "Geography", "Alike", "ಅಳಿಕೆ", ""}, {"Amtady", "Q4748878", "Geography", "Amtady", "", ""}, {"Aramboor", "Q4784003", "Geography", "Aramboor", "", ""}, {"Aranthodu", "Q4784155", "Geography", "Aranthodu", "", ""}, {"Aryapu (Rural)", "Q4802665", "Geography", "Aryapu (Rural)", "", ""}, {"Attur-kemral", "Q4818747", "Geography", "Attur-kemral", "", ""}, {"Baikampady", "Q4843250", "Geography", "Baikampady", "ಬೈಕಂಪಾಡಿ", ""}, {"Bajal", "Q627069", "Geography", "Bajal", "ಬಜಾಲ್", ""}, {"Bajathuru", "Q4848854", "Geography", "Bajathuru", "", ""}, {"Balkunje", "Q10737568", "Geography", "Balkunje", "", ""}, {"Balthila", "Q4852673", "Geography", "Balthila", "", ""}, {"Bellare, Dakshina Kannada", "Q4883495", "Geography", "Bellare, Dakshina Kannada", "ಬೆಳ್ಳಾರೆ", ""}, {"Boloor, Mangalore", "Q85748087", "Geography", "Boloor, Mangalore", "", ""}, {"Charmadi Ghat", "Q5086410", "Geography", "Charmadi Ghat", "ಚಾರ್ಮಾಡಿ ಘಾಟಿ", ""}, {"Devaragundi", "Q16919384", "Geography", "Devaragundi", "", ""}, {"Doddathota", "Q5287757", "Geography", "Doddathota", "ದೊಡ್ಡತೋಟ", ""}, {"Doddikatta", "Q5287772", "Geography", "Doddikatta", "", ""}, {"Ernody", "Q5394845", "Geography", "Ernody", "", ""}, {"Golthamajal", "Q5580983", "Geography", "Golthamajal", "", ""}, {"Gurupura River", "Q5620539", "Geography", "Gurupura River", "ಗುರುಪುರ ನದಿ", "ಗುರುಪುರ ಸುದೆ"}, {"Guthigaru", "Q5621744", "Geography", "Guthigaru", "", ""}, {"Hirebandadi", "Q5769581", "Geography", "Hirebandadi", "", ""}, {"Ilanthila", "Q5997147", "Geography", "Ilanthila", "", ""}, {"Inoli", "Q17056571", "Geography", "Inoli", "", ""}, {"Ira, Dakshina Kannada", "Q6065918", "Geography", "Ira, Dakshina Kannada", "", ""}, {"Jalsoor", "Q6126987", "Geography", "Jalsoor", "", ""}, {"Kabaka Puttur", "Q6343783", "Geography", "Kabaka Puttur", "", ""}, {"Kadandale", "Q6345146", "Geography", "Kadandale", "", ""}, {"Kakkinje", "Q6349531", "Geography", "Kakkinje", "ಕಕ್ಕಿಂಜೆ", ""}, {"Kalladka", "Q6353482", "Geography", "Kalladka", "ಕಲ್ಲಡ್ಕ", "ಕಲ್ಲಡ್ಕ"}, {"Kalmanja village", "Q16897869", "Geography", "Kalmanja village", "", ""}, {"Kaniyuru", "Q2725645", "Geography", "Kaniyuru", "ಕಾಣಿಯೂರು", ""}, {"Kannur, Dakshina Kannada", "Q3812794", "Geography", "Kannur, Dakshina Kannada", "ಕಣ್ಣೂರು, ದಕ್ಷಿಣ ಕನ್ನಡ", ""}, {"Kanyana", "Q6365834", "Geography", "Kanyana", "", ""}, {"Katipalla", "Q6377627", "Geography", "Katipalla", "ಕಾಟಿಪಳ್ಳ", ""}, {"Kayarthadka", "Q140196754", "Geography", "Kayarthadka", "", ""}, {"Kepu", "Q6393257", "Geography", "Kepu", "", ""}, {"Keyyur", "Q6398562", "Geography", "Keyyur", "", ""}, {"Kinnipadavu", "Q124349043", "Geography", "Kinnipadavu", "ಕಿನ್ನಿಪದವು", ""}, {"Kinnya", "Q6414147", "Geography", "Kinnya", "ಕಿನ್ಯ", ""}, {"Kodangallu", "Q6425213", "Geography", "Kodangallu", "", ""}, {"Kodimbala", "Q6425332", "Geography", "Kodimbala", "", ""}, {"Koila", "Q10780717", "Geography", "Koila", "", ""}, {"Kokradi", "Q6426858", "Geography", "Kokradi", "", ""}, {"Kolnadu", "Q6427431", "Geography", "Kolnadu", "", ""}, {"Kolthige", "Q6427911", "Geography", "Kolthige", "ಕೊಳ್ತಿಗೆ ಗ್ರಾಮ", "ಕೊಳ್ತಿಗೆ"}, {"Koluvail", "Q6427948", "Geography", "Koluvail", "", ""}, {"Kotekar", "Q6433924", "Geography", "Kotekar", "ಕೋಟೆಕಾರ್", ""}, {"Kotekara", "Q2234630", "Geography", "Kotekara", "ಕೋಟೆಕಾರು", ""}, {"Kumaradhara River", "Q3827648", "Geography", "Kumaradhara River", "ಕುಮಾರಧಾರ ನದಿ", "ಕುಮಾರಧಾರೆ ಸುದೆ"}, {"Kunchadka", "Q97261392", "Geography", "Kunchadka", "ಕುಂಚಡ್ಕ", "ಕುಂಚಡ್ಕ"}, {"Kurnad", "Q6372796", "Geography", "Kurnad", "", ""}, {"Kuvettu", "Q6448789", "Geography", "Kuvettu", "", ""}, {"Laila, Dakshina Kannada", "Q6473838", "Geography", "Laila, Dakshina Kannada", "", ""}, {"Madanthyar", "Q6728881", "Geography", "Madanthyar", "ಮಡಂತ್ಯಾರು", ""}, {"Manchi", "Q6747597", "Geography", "Manchi", "", ""}, {"Mandekolu", "Q6747944", "Geography", "Mandekolu", "ಮಂಡೆಕೋಲು", "ಮಂಡೆಕೋಲು"}, {"Mani, Karnataka", "Q6749387", "Geography", "Mani, Karnataka", "", "ಮಾಣಿ"}, {"Mannagudda", "Q85783664", "Geography", "Mannagudda", "", ""}, {"Marody", "Q24931708", "Geography", "Marody", "", ""}, {"Maryhill, Mangaluru", "Q17072289", "Geography", "Maryhill, Mangaluru", "ಮೇರಿಹಿಲ್ ಮಂಗಳೂರು", ""}, {"Mithur", "Q6881730", "Geography", "Mithur", "", ""}, {"Muchur", "Q6931115", "Geography", "Muchur", "", ""}, {"Mudushedde", "Q2558117", "Geography", "Mudushedde", "ಮೂಡುಶೆಡ್ಡೆ", ""}, {"Munnur", "Q2558083", "Geography", "Munnur", "", ""}, {"Munnuru", "Q6936808", "Geography", "Munnuru", "", ""}, {"Naravi", "Q6965454", "Geography", "Naravi", "", "ನಾರಾವಿ"}, {"Narikombu", "Q6965928", "Geography", "Narikombu", "", ""}, {"Narimogru", "Q6965957", "Geography", "Narimogru", "", ""}, {"Naringana", "Q6965970", "Geography", "Naringana", "", ""}, {"Nelliyadi", "Q6990200", "Geography", "Nelliyadi", "", ""}, {"Neriya", "Q6996406", "Geography", "Neriya", "", ""}, {"Nettanigemudnoor", "Q7000440", "Geography", "Nettanigemudnoor", "", ""}, {"Odadadka", "Q7077219", "Geography", "Odadadka", "", ""}, {"Olamogru", "Q7083073", "Geography", "Olamogru", "", ""}, {"Omzoor", "Q7090814", "Geography", "Omzoor", "", ""}, {"Padmanoor", "Q7123858", "Geography", "Padmanoor", "", ""}, {"Padu Kody", "Q7123967", "Geography", "Padu Kody", "", ""}, {"Pajiradka", "Q7125310", "Geography", "Pajiradka", "", ""}, {"Panemangalore, Karnataka", "Q7130798", "Geography", "Panemangalore, Karnataka", "ಪಾಣೆಮಂಗಳೂರು", ""}, {"Pavanje", "Q7155531", "Geography", "Pavanje", "", ""}, {"Phajeer", "Q7180203", "Geography", "Phajeer", "", ""}, {"Polali", "Q7208866", "Geography", "Polali", "ಪೊಳಲಿ", "ಪೊಳಲಿ"}, {"Pudu, Dakshina Kannada", "Q12127219", "Geography", "Pudu, Dakshina Kannada", "", ""}, {"Pumpwell", "Q28405187", "Geography", "Pumpwell", "", ""}, {"Punaroor", "Q7259909", "Geography", "Punaroor", "", ""}, {"Punjalkatte", "Q7260361", "Geography", "Punjalkatte", "", ""}, {"Puttur taluk", "Q7262501", "Geography", "Puttur taluk", "", ""}, {"Sajipamuda", "Q7402662", "Geography", "Sajipamuda", "", ""}, {"Sampaje", "Q7410078", "Geography", "Sampaje", "ಸಂಪಾಜೆ", "ಸಂಪಾಜೆ"}, {"Sarapady", "Q7423159", "Geography", "Sarapady", "", ""}, {"Shiradi", "Q7498222", "Geography", "Shiradi", "", "ಶಿರಾಡಿ"}, {"Shirthady", "Q17089910", "Geography", "Shirthady", "", ""}, {"Sullia taluk", "Q7636363", "Geography", "Sullia taluk", "", ""}, {"Surya Sadashiva Temple", "Q7647371", "Geography", "Surya Sadashiva Temple", "ಸದಾಶಿವ ರುದ್ರ ದೇವಸ್ಥಾನ ಸುರ್ಯ", "ಶ್ರೀ ಸದಾಶಿವರುದ್ರ ದೇವಸ್ತಾನ, ಸುರ್ಯ"}, {"Talipady", "Q7679535", "Geography", "Talipady", "", ""}, {"Thokur", "Q7786669", "Geography", "Thokur", "", ""}, {"Thokur-62", "Q2229183", "Geography", "Thokur-62", "", ""}, {"Thumbe", "Q2738770", "Geography", "Thumbe", "ತುಂಬೆ", ""}, {"Tokur, India", "Q7813748", "Geography", "Tokur, India", "", "ತೋಕೂರು"}, {"Ubaradka Mittur", "Q119084449", "Geography", "Ubaradka Mittur", "", ""}, {"Uchila, Dakshina Kannada district", "Q16726700", "Geography", "Uchila, Dakshina Kannada district", "", ""}, {"Ullal beach", "Q28154811", "Geography", "Ullal beach", "ಉಳ್ಳಾಲ ಕಡಲತೀರ", ""}, {"Ullal City Municipal Council", "Q28154562", "Geography", "Ullal City Municipal Council", "", ""}, {"Veerakamba", "Q7918151", "Geography", "Veerakamba", "", ""}, {"Vittal Assembly constituency", "Q117705790", "Geography", "Vittal Assembly constituency", "", ""}, {"Vittalpadanur", "Q7937274", "Geography", "Vittalpadanur", "", ""}, {"Yedamangala railway station", "Q63355710", "Geography", "Yedamangala railway station", "", ""}, {"Yedapadavu", "Q8051061", "Geography", "Yedapadavu", "", ""}, -- Geography from Category:Udupi district geography stubs {"33 Shiroor", "Q4635213", "Geography", "33 Shiroor", "", ""}, {"34 Kudi", "Q4635384", "Geography", "34 Kudi", "", ""}, {"38 Kalthur", "Q4635980", "Geography", "38 Kalthur", "", ""}, {"41 Shiroor", "Q4637615", "Geography", "41 Shiroor", "", ""}, {"52 Heroor", "Q4640219", "Geography", "52 Heroor", "", ""}, {"92 Heroor", "Q4645819", "Geography", "92 Heroor", "", ""}, {"108 Kalthur", "Q4546766", "Geography", "108 Kalthur", "", ""}, {"Achalady", "Q4673432", "Geography", "Achalady", "ಅಚ್ಲಾಡಿ", ""}, {"Adamaru", "Q4680117", "Geography", "Adamaru", "", ""}, {"Ajekar", "Q4699704", "Geography", "Ajekar", "ಅಜೆಕಾರು", ""}, {"Ajri, India", "Q8000871", "Geography", "Ajri, India", "", ""}, {"Asodu", "Q10735796", "Geography", "Asodu", "", ""}, {"Attur, Udupi", "Q48727839", "Geography", "Attur, Udupi", "", ""}, {"Badagabettu", "Q4840507", "Geography", "Badagabettu", "", ""}, {"Badakere", "Q10737092", "Geography", "Badakere", "", ""}, {"Bankerkatta", "Q85745300", "Geography", "Bankerkatta", "", ""}, {"Beejadi", "Q4879814", "Geography", "Beejadi", "", ""}, {"Belve", "Q119039024", "Geography", "Belve", "", ""}, {"Benegal", "Q109448189", "Geography", "Benegal", "", ""}, {"Bijoor", "Q4907244", "Geography", "Bijoor", "", ""}, {"Bommarabettu", "Q4940875", "Geography", "Bommarabettu", "", ""}, {"Chakra River", "Q605465", "Geography", "Chakra River", "ಚಕ್ರ ನದಿ", ""}, {"Cherkady", "Q5091998", "Geography", "Cherkady", "", ""}, {"Devalkunda", "Q118950524", "Geography", "Devalkunda", "", ""}, {"Eedu", "Q5347031", "Geography", "Eedu", "", ""}, {"Gantihole", "Q24946418", "Geography", "Gantihole", "", ""}, {"Gavali, Udupi", "Q5527984", "Geography", "Gavali, Udupi", "ಗಾವಳಿ, ಉಡುಪಿ", ""}, {"Golihole", "Q10762145", "Geography", "Golihole", "", ""}, {"Greater Udupi", "Q5600795", "Geography", "Greater Udupi", "", ""}, {"Gujjadi", "Q10763056", "Geography", "Gujjadi", "", ""}, {"Hadavu", "Q10764596", "Geography", "Hadavu", "ಹಡವು", ""}, {"Hallihole", "Q108803611", "Geography", "Hallihole", "", ""}, {"Hejamadi", "Q5701222", "Geography", "Hejamadi", "ಹೆಜಮಾಡಿ", ""}, {"Hemmadi", "Q5712318", "Geography", "Hemmadi", "ಹೆಮ್ಮಾಡಿ", ""}, {"Heranjal", "Q10766772", "Geography", "Heranjal", "", ""}, {"Herga", "Q5738368", "Geography", "Herga", "", ""}, {"Heskathoor", "Q10766862", "Geography", "Heskathoor", "", ""}, {"Hirgana", "Q15947931", "Geography", "Hirgana", "", ""}, {"Hiriadka", "Q17055077", "Geography", "Hiriadka", "ಹಿರಿಯಡ್ಕ", "ಹಿರಿಯಡ್ಕ"}, {"Hoode Beach", "Q108749459", "Geography", "Hoode Beach", "", ""}, {"Hoovinakere", "Q5898852", "Geography", "Hoovinakere", "", ""}, {"Hosadu", "Q119039316", "Geography", "Hosadu", "", ""}, {"Innanje", "Q6035256", "Geography", "Innanje", "", ""}, {"Jadkal", "Q109340345", "Geography", "Jadkal", "", ""}, {"Japthi", "Q119398398", "Geography", "Japthi", "", ""}, {"Kadike Beach", "Q108649544", "Geography", "Kadike Beach", "", ""}, {"Kalthodu", "Q10775882", "Geography", "Kalthodu", "", ""}, {"Kamalashile", "Q16897903", "Geography", "Kamalashile", "", ""}, {"Kambadakone", "Q107313441", "Geography", "Kambadakone", "", ""}, {"Kavrady", "Q6379340", "Geography", "Kavrady", "", ""}, {"Kedaka River", "Q6382515", "Geography", "Kedaka River", "ಕೇದಕ ನದಿ", ""}, {"Kedoor", "Q10778534", "Geography", "Kedoor", "", ""}, {"Kemmannu", "Q6386968", "Geography", "Kemmannu", "ಕೆಮ್ಮಣ್ಣು", ""}, {"Kemundel", "Q6387181", "Geography", "Kemundel", "", ""}, {"Kenchanoor", "Q10778786", "Geography", "Kenchanoor", "", ""}, {"Keradi", "Q115805711", "Geography", "Keradi", "", ""}, {"Kirimanjeshwar", "Q6415294", "Geography", "Kirimanjeshwar", "", ""}, {"Kodavoor", "Q6425247", "Geography", "Kodavoor", "ಕೊಡವೂರು", ""}, {"Kodi, India", "Q6425275", "Geography", "Kodi, India", "", ""}, {"Kodibettu", "Q6425311", "Geography", "Kodibettu", "", ""}, {"Kollur, Udupi district", "Q6427407", "Geography", "Kollur, Udupi district", "ಕೊಲ್ಲೂರು", "ಕೊಲ್ಲೂರು"}, {"Koosalli Waterfalls", "Q16976126", "Geography", "Koosalli Waterfalls", "ಕೋಸಳ್ಳಿ ಜಲಪಾತ", ""}, {"Kotathattu", "Q6433893", "Geography", "Kotathattu", "", ""}, {"Kote, Karnataka", "Q6433776", "Geography", "Kote, Karnataka", "ಕೋಟೆ, ಕರ್ನಾಟಕ", ""}, {"Koteshwara", "Q3310789", "Geography", "Koteshwara", "ಕೋಟೇಶ್ವರ", "ಶ್ರೀ ಕ್ಷೇತ್ರ ಕೋಟೇಶ್ವರ"}, {"Kubja River", "Q6441277", "Geography", "Kubja River", "", ""}, {"Kukkikatte", "Q15240716", "Geography", "Kukkikatte", "", ""}, {"Kukkundoor", "Q6442506", "Geography", "Kukkundoor", "", ""}, {"Kundabarandadi", "Q10782261", "Geography", "Kundabarandadi", "", ""}, {"Kunjarugiri", "Q6444820", "Geography", "Kunjarugiri", "ದುರ್ಗಾದೇವಿ ದೇವಸ್ಥಾನ ಕುಂಜಾರುಗಿರಿ", ""}, {"Kuthpady", "Q6448443", "Geography", "Kuthpady", "", ""}, {"Mallar, Karnataka", "Q2625388", "Geography", "Mallar, Karnataka", "", ""}, {"Manoor, Karnataka", "Q6751294", "Geography", "Manoor, Karnataka", "", ""}, {"Marpalli", "Q141605841", "Geography", "Marpalli", "", ""}, {"Miyar", "Q6884400", "Geography", "Miyar", "", ""}, {"Molahalli", "Q10794364", "Geography", "Molahalli", "", ""}, {"Mudoor", "Q10795118", "Geography", "Mudoor", "", ""}, {"Mulur", "Q2552515", "Geography", "Mulur", "", ""}, {"Munder, Udupi", "Q109466875", "Geography", "Munder, Udupi", "", ""}, {"Nadsal", "Q6957978", "Geography", "Nadsal", "", ""}, {"Nagodi", "Q16878465", "Geography", "Nagodi", "", ""}, {"Nandanavana", "Q6963185", "Geography", "Nandanavana", "", ""}, {"Nandicoor", "Q15260940", "Geography", "Nandicoor", "ನಂದಿಕೂರು", "ನಂದಿಕೂರು"}, {"Navunda", "Q17078451", "Geography", "Navunda", "ನಾವುಂದ", ""}, {"Padubidri", "Q7123984", "Geography", "Padubidri", "ಪಡುಬಿದ್ರಿ", "ಪಡುಬಿದ್ರಿ"}, {"Pajaka", "Q7125277", "Geography", "Pajaka", "ಪಾಜಕ", ""}, {"Pangala", "Q7130899", "Geography", "Pangala", "ಪಾಂಗಾಳ", ""}, {"Parappady", "Q7135754", "Geography", "Parappady", "", ""}, {"Santhoor", "Q38249618", "Geography", "Santhoor", "", ""}, {"Seetha River", "Q24930508", "Geography", "Seetha River", "ಸೀತಾ ನದಿ", ""}, {"Shankaranarayana", "Q7488718", "Geography", "Shankaranarayana", "ಶಂಕರನಾರಾಯಣ", ""}, {"Shiroor", "Q7498948", "Geography", "Shiroor", "", ""}, {"Shirva, India", "Q7499005", "Geography", "Shirva, India", "", ""}, {"Siddapura, Udupi", "Q7508043", "Geography", "Siddapura, Udupi", "", ""}, {"Souparnika River", "Q3322775", "Geography", "Souparnika River", "ಸೌಪರ್ಣಿಕ ನದಿ", ""}, {"Taggarse", "Q107143870", "Geography", "Taggarse", "", ""}, {"Tenkanidyoor", "Q7699901", "Geography", "Tenkanidyoor", "", "ತೆಂಕನಿಡಿಯೂರು"}, {"Thekkatte", "Q119039488", "Geography", "Thekkatte", "", ""}, {"Thopanangadi", "Q7796008", "Geography", "Thopanangadi", "", ""}, {"Tonse East", "Q7821662", "Geography", "Tonse East", "", ""}, {"Tonse West", "Q7821664", "Geography", "Tonse West", "", ""}, {"Trasi", "Q7835753", "Geography", "Trasi", "ತ್ರಾಸಿ", ""}, {"Uchila, Udupi district", "Q7876725", "Geography", "Uchila, Udupi district", "", "ಉಚ್ಚಿಲ, ಉಡುಪಿ ಜಿಲ್ಲೆ"}, {"Udupi Power Plant", "Q11990788", "Geography", "Udupi Power Plant", "", ""}, {"Uliargoli", "Q7878951", "Geography", "Uliargoli", "", ""}, {"Ulloor (Karnataka)", "Q119084376", "Geography", "Ulloor (Karnataka)", "", ""}, {"Uppoor", "Q7899162", "Geography", "Uppoor", "", ""}, {"Uppunda", "Q7899192", "Geography", "Uppunda", "ಉಪ್ಪುಂದ", ""}, {"Vandse", "Q7914556", "Geography", "Vandse", "", ""}, {"Varahi River", "Q7915411", "Geography", "Varahi River", "ವಾರಾಹಿ ನದಿ", "ವಾರಾಹಿ ತುದೆ"}, {"Varamballi", "Q7915424", "Geography", "Varamballi", "", ""}, {"Varanga", "Q48723757", "Geography", "Varanga", "", ""}, {"Yedthare", "Q8051095", "Geography", "Yedthare", "", ""}, {"Yellur, Udupi", "Q8052014", "Geography", "Yellur, Udupi", "", ""}, {"Yenagudde", "Q2552537", "Geography", "Yenagudde", "", ""}, {"Yennehole", "Q8052378", "Geography", "Yennehole", "", ""}, -- Birds from Category:ಪಕ್ಕಿಲು {"ಇಟ್ಟಿರಿ", "Q752398", "Birds", "Red-wattled lapwing", "ಕೆಂಪು ಟಿಟ್ಟಿಭ", "ಇಟ್ಟಿರಿ"}, {"ಓಂಗಿಲೆ", "Q26773", "Birds", "Hornbill", "ಮಂಗಟ್ಟೆ", "ಓಂಗಿಲೆ"}, {"ಕಕ್ಕೆ", "Q43365", "Birds", "Corvus", "ಕಾಗೆ", "ಕಕ್ಕೆ"}, {"ಕಾಡ್ ಕೋರಿ", "Q222951", "Birds", "Junglefowl", "ಕಾಡುಕೋಳಿ", "ಕಾಡ್ ಕೋರಿ"}, {"ಕುಂಡಕೋರಿ", "Q862825", "Birds", "White-breasted waterhen", "ಹುಂಡು ಕೋಳಿ", "ಕುಂಡಕೋರಿ"}, {"ಕುಪ್ಪುಲು", "Q767112", "Birds", "Greater coucal", "ಕೆಂಬೂತ-ಘನ", "ಕುಪ್ಪುಲು"}, {"ಕೆತ್ತಿ ಕಲುವೆ", "Q31830071", "Birds", "", "", "ಕೆತ್ತಿ ಕಲುವೆ"}, {"ಕೇಂಕನ್", "Q27074582", "Birds", "Red-necked spurfowl", "", "ಕೇಂಕನ್"}, {"ಕೊಕ್ಕರೆ", "Q312272", "Birds", "Egretta", "", "ಕೊಕ್ಕರೆ"}, {"ಕೊಟ್ಟು ಕೊಡ್ತಲೆ", "Q188854", "Birds", "Bulbul", "ಪಿಕಳಾರ", "ಕೊಟ್ಟು ಕೊಡ್ತಲೆ"}, {"ಕೋಗಿಲೆ", "Q26381", "Birds", "Cuckoo", "ಕೋಗಿಲೆ", "ಕೋಗಿಲೆ"}, {"ಕೋರಿ", "Q780", "Birds", "Chicken", "ಕೋಳಿ", "ಕೋರಿ"}, {"ಕೋರಿ ಸುಕ್ಕ", "", "Birds", "", "", ""}, {"ಕೋರಿಕಟ್ಟ", "Q319771", "Birds", "Cockfighting", "ಕೋಳಿ ಅಂಕ", "ಕೋರಿಕಟ್ಟ"}, {"ಗಿಡಿ", "Q374141", "Birds", "Tawny eagle", "", "ಗಿಡಿ"}, {"ಗುರ್ಬಿ", "Q28922", "Birds", "Old World sparrow", "", "ಗುರ್ಬಿ"}, {"ಗೂಮೆ", "Q25222", "Birds", "Owl", "ಗೂಬೆ", "ಗೂಮೆ"}, {"ಪಕ್ಕಿ", "Q5113", "Birds", "Bird", "ಪಕ್ಷಿ", "ಪಕ್ಕಿ"}, {"ಪೆರಡೆ", "Q31830322", "Birds", "", "", "ಪೆರಡೆ"}, {"ಬೊಲ್ಲರ ಮಾನಿಗ", "Q266761", "Birds", "Oriental magpie-robin", "ಮಡಿವಾಳ (ಹಕ್ಕಿ)", "ಬೊಲ್ಲರ ಮಾನಿಗ"}, {"ಮಯಿರ್", "Q61865", "Birds", "Indian peafowl", "", "ಮಯಿರ್"}, {"ಮರ ಕೊಡಪೆ", "Q25439", "Birds", "Woodpecker", "ಮರಕುಟಿಕ", "ಮರ ಕೊಡಪೆ"}, {"ಹಮ್ಮಿಂಗ್ ಬರ್ಡ್", "Q43624", "Birds", "Hummingbird", "ಹಮ್ಮಿಂಗ್ ಬರ್ಡ್", "ಹಮ್ಮಿಂಗ್ ಬರ್ಡ್"}, -- Trees from Category:ಮರೊಕುಲ್ {"ಅಡ್ಕಬಾರೆ", "Q25627246", "Trees", "", "ಅಡ್ಕಬಾರೆ", "ಅಡ್ಕಬಾರೆ"}, {"ಅರ್ತಿ", "Q36146", "Trees", "Fig", "ಅಂಜೂರ", "ಅರ್ತಿ"}, {"ಅಶೋಕ ಮರ", "Q757356", "Trees", "Saraca asoca", "ಅಶೋಕ ವೃಕ್ಷ", "ಅಶೋಕ ಮರ"}, {"ಆಂಡಿಪುನಾರ್", "Q13114481", "Trees", "Carallia brachiata", "ಅಂಡಿಪುನಾರ್", "ಆಂಡಿಪುನಾರ್"}, {"ಆಟಿ ಅಮಾಸೆ", "Q31829593", "Trees", "Aatida Amaase", "ಆಟಿ ಅಮಾವಾಸ್ಯೆ", "ಆಟಿ ಅಮಾಸೆ"}, {"ಇಜಿನ್‌ದ ಮರ", "Q370239", "Trees", "Cinnamomum verum", "", "ಇಜಿನ್‌ದ ಮರ"}, {"ಕಂಗ್", "Q31829694", "Trees", "", "", "ಕಂಗ್"}, {"ತಾರಿ", "Q31830007", "Trees", "", "", "ತಾರಿ"}, {"ತಾರೆದ ಮರ", "Q31830010", "Trees", "", "ತೆಂಗಿನಮರ", "ತಾರೆದ ಮರ"}, {"ದಡ್ಡಲ್ ಮರ", "Q2718249", "Trees", "Careya arborea", "ಕವಲು ಮರ", "ದಡ್ಡಲ್ ಮರ"}, {"ದೂಪದ ಮರ", "Q2576684", "Trees", "Vateria indica", "ಧೂಪದ ಮರ", "ದೂಪದ ಮರ"}, {"ನಾನಿಲ್ ಮರ", "Q97272056", "Trees", "", "", "ನಾನಿಲ್ ಮರ"}, {"ನೆಲ್ಲಿಕಾಯಿ", "Q310050", "Trees", "Phyllanthus emblica", "ನೆಲ್ಲಿ", "ನೆಲ್ಲಿಕಾಯಿ"}, {"ಪಾಲೆ ಮರ", "Q135307", "Trees", "Alstonia scholaris", "ಹಾಲೆ ಮರ", "ಪಾಲೆ ಮರ"}, {"ಪೆಜಕಾಯಿ", "Q3595140", "Trees", "Artocarpus hirsutus", "ಹೆಬ್ಬಲಸು", "ಪೆಜಕಾಯಿ"}, {"ಪೊಂಗರೆ ಮರ", "Q715744", "Trees", "Erythrina variegata", "ಹಾಲವಾಣ", "ಪೊಂಗರೆ ಮರ"}, {"ಬೀಜದ ಮರ", "Q31830429", "Trees", "", "", "ಬೀಜದ ಮರ"}, {"ಬೆದ್‍ರ್", "Q35922", "Trees", "Bambuseae", "", "ಬೆದ್‍ರ್"}, {"ಮಂತ್ ಪುಳಿ", "Q18187249", "Trees", "Garcinia gummi-gutta", "ಉಪ್ಪಾಗೆ", "ಮಂತ್ ಪುಳಿ"}, {"ಮರ ತೇವ್", "Q31830533", "Trees", "", "", "ಮರ ತೇವ್"}, {"ರೆಂಜೆ", "Q2088434", "Trees", "Mimusops elengi", "ರಂಜ", "ರೆಂಜೆ"}, {"ಶ್ರೀಗಂಧ", "Q210858", "Trees", "Santalum album", "ಶ್ರೀಗಂಧ", "ಶ್ರೀಗಂಧ"}, {"ಸೊರಗೆ", "Q31830699", "Trees", "", "", "ಸೊರಗೆ"}, -- Folk Worship from Category:ಭೂತಾರಾಧನೆ {"ಅಕ್ಕೆರಸು ಸಿರಿ", "", "Folk Worship", "", "", ""}, {"ಅಗೆಲ್", "Q31829547", "Folk Worship", "", "", "ಅಗೆಲ್"}, {"ಅಣಿ", "Q31829559", "Folk Worship", "", "", "ಅಣಿ"}, {"ಅರ್ದಲ", "Q65452681", "Folk Worship", "", "", "ಅರ್ದಲ"}, {"ಉಲ್ಲಾಕುಳು", "Q31829642", "Folk Worship", "", "", "ಉಲ್ಲಾಕುಳು"}, {"ಕಲ್ಲುರ್ಟಿ", "Q31829766", "Folk Worship", "", "ಕಲ್ಲುರ್ಟಿ", "ಕಲ್ಲುರ್ಟಿ"}, {"ಕಾಪು ಪಿಲಿಕೋಲೊ", "Q31829779", "Folk Worship", "", "", "ಕಾಪು ಪಿಲಿಕೋಲೊ"}, {"ಕಾರ್ನಿಕೊದ ದೈವೊಲು", "Q12060940", "Folk Worship", "Kallil Temple", "", "ಕಾರ್ನಿಕೊದ ದೈವೊಲು"}, {"ಕುರವ ದೈವ", "Q97271761", "Folk Worship", "", "", "ಕುರವ ದೈವ"}, {"ಕೊಂತಿ ಪೂಜೆ", "Q97271832", "Folk Worship", "", "", "ಕೊಂತಿ ಪೂಜೆ"}, {"ಕೊರಗತನಿಯೆ", "Q31829849", "Folk Worship", "", "ಕೊರಗತನಿಯ", "ಕೊರಗತನಿಯೆ"}, {"ಕೊರತಿ ದೈವ", "Q31829858", "Folk Worship", "", "ಕೊರತಿ ದೈವ", "ಕೊರತಿ ದೈವ"}, {"ಕೋರ್ದಬ್ಬು", "Q65452595", "Folk Worship", "", "", "ಕೋರ್ದಬ್ಬು"}, {"ಗಗ್ಗರ", "Q65452670", "Folk Worship", "", "ಗಗ್ಗರ", "ಗಗ್ಗರ"}, {"ಗಗ್ಗರದೆಚ್ಚಿ", "Q97271899", "Folk Worship", "", "", "ಗಗ್ಗರದೆಚ್ಚಿ"}, {"ಜುಮಾದಿ", "Q16290343", "Folk Worship", "Jumadi", "ಜುಮಾದಿ", "ಜುಮಾದಿ"}, {"ತನ್ನಿಮಾನಿಗ", "Q97271994", "Folk Worship", "", "", "ತನ್ನಿಮಾನಿಗ"}, {"ಪಂಜುರ್ಲಿ", "Q136645746", "Folk Worship", "Panjurli", "", "ಪಂಜುರ್ಲಿ"}, {"ಪನಿಯಾರ", "Q97272123", "Folk Worship", "", "", "ಪನಿಯಾರ"}, {"ಭೂತ ಕೋಲ", "Q4902233", "Folk Worship", "Buta Kola", "ಭೂತಕೋಲ", "ಭೂತ ಕೋಲ"}, {"ಮಾಯಂದಾಲ್ ದೈವೊ", "Q25626738", "Folk Worship", "", "ಮಾಯಂದಾಲ್ ದೈವ", "ಮಾಯಂದಾಲ್ ದೈವೊ"}, {"ಮೂಕಾಂಬಿ ಗುಳಿಗ", "Q97272406", "Folk Worship", "", "", "ಮೂಕಾಂಬಿ ಗುಳಿಗ"}, {"ರುದ್ರಾಂಡಿ", "", "Folk Worship", "", "", ""}, {"ಲೆಕ್ಕೆಸಿರಿ", "Q89444381", "Folk Worship", "", "ಲೆಕ್ಕೆಸಿರಿ", "ಲೆಕ್ಕೆಸಿರಿ"}, {"ಶಿರಾಡಿ ದೈವ", "Q134960053", "Folk Worship", "", "", "ಶಿರಾಡಿ ದೈವ"}, {"ಶ್ರೀ ಕ್ಷೇತ್ರ ಪಣೋಲಿಬೈಲ್", "Q31792312", "Folk Worship", "", "ಶ್ರೀ ಕ್ಷೇತ್ರ ಪಣೋಲಿಬೈಲು", "ಶ್ರೀ ಕ್ಷೇತ್ರ ಪಣೋಲಿಬೈಲ್"}, -- Tulu Folklore from Category:ತುಳು_ಜಾನಪದ {"ಅಗಸ್ಟ್ ಮೆನ್ನರ್", "Q65452688", "Tulu Folklore", "", "ಅಗಸ್ಟ್ ಮೆನ್ನರ್", "ಅಗಸ್ಟ್ ಮೆನ್ನರ್"}, {"ಅಗೆಲ್", "Q31829547", "Tulu Folklore", "", "", "ಅಗೆಲ್"}, {"ಅಜ್ಜಿಕತೆ", "Q31829550", "Tulu Folklore", "", "", "ಅಜ್ಜಿಕತೆ"}, {"ಅಣಿ", "Q31829559", "Tulu Folklore", "", "", "ಅಣಿ"}, {"ಅಪ್ಪೆ", "Q7560", "Tulu Folklore", "Mother", "ತಾಯಿ", "ಅಪ್ಪೆ"}, {"ಅಮಾಸೆ", "Q2641660", "Tulu Folklore", "Amavasya", "ಅಮಾವಾಸ್ಯೆ", "ಅಮಾಸೆ"}, {"ಅರಸಾಯ", "Q65452716", "Tulu Folklore", "", "", "ಅರಸಾಯ"}, {"ಆಟಿ", "Q65452742", "Tulu Folklore", "", "", "ಆಟಿ"}, {"ಆಟಿ ಕುಲ್ಲುನು", "Q31829596", "Tulu Folklore", "", "", "ಆಟಿ ಕುಲ್ಲುನು"}, {"ಆಟಿಕಳೆಂಜೆ", "Q4662783", "Tulu Folklore", "Aati kalenja", "ಆಟಿ ಕಳೆಂಜ", "ಆಟಿಕಳೆಂಜೆ"}, {"ಆಟಿಕುಲ್ಲುನೆ", "", "Tulu Folklore", "", "", ""}, {"ಆಟಿತಪ್ಪು", "", "Tulu Folklore", "", "", ""}, {"ಆಟಿದ ಸಮ್ಮನೊ", "Q65452544", "Tulu Folklore", "", "", "ಆಟಿದ ಸಮ್ಮನೊ"}, {"ಇನ್ಸುಲಿನ್ ದಯಿ", "Q3029378", "Tulu Folklore", "Chamaecostus cuspidatus", "", "ಇನ್ಸುಲಿನ್ ದಯಿ"}, {"ಇರನ ಅಮಾಸೆ", "Q31829613", "Tulu Folklore", "", "", "ಇರನ ಅಮಾಸೆ"}, {"ಎರುಕೋಲ", "", "Tulu Folklore", "", "", ""}, {"ಓ ಬೇಲೆಪದೊ", "Q31830769", "Tulu Folklore", "", "", "ಓ ಬೇಲೆಪದೊ"}, {"ಕಡ್ಯ", "Q65452487", "Tulu Folklore", "", "", "ಕಡ್ಯ"}, {"ಕದ್ರಿ ಕಂಬುಲ", "Q31829725", "Tulu Folklore", "", "", "ಕದ್ರಿ ಕಂಬುಲ"}, {"ಕಬತ್ತಾರ್", "", "Tulu Folklore", "", "", ""}, {"ಕರ್ಂಗೋಲು", "Q31829748", "Tulu Folklore", "", "", "ಕರ್ಂಗೋಲು"}, {"ಕು. ಶಿ ಹರಿದಾಸ ಭಟ್", "Q128231314", "Tulu Folklore", "", "", "ಕು. ಶಿ ಹರಿದಾಸ ಭಟ್"}, {"ಕುಟ್ಟಿ ಪೂಜೆ", "Q97271741", "Tulu Folklore", "", "", "ಕುಟ್ಟಿ ಪೂಜೆ"}, {"ಕುಟ್ಟಿದೊಣ್ಣೆ", "Q1254757", "Tulu Folklore", "Gillidanda", "ಚಿನ್ನಿ ದಾಂಡು", "ಕುಟ್ಟಿದೊಣ್ಣೆ"}, {"ಕುದ್ಪೆ", "Q65452417", "Tulu Folklore", "", "", "ಕುದ್ಪೆ"}, {"ಕುಲೆ", "Q31829812", "Tulu Folklore", "", "", "ಕುಲೆ"}, {"ಕುಲೆ ಮದಿಮೆ", "Q31829819", "Tulu Folklore", "", "", "ಕುಲೆ ಮದಿಮೆ"}, {"ಕೂರಿ", "Q65452369", "Tulu Folklore", "", "", "ಕೂರಿ"}, {"ಕೆ.ಅಭಯ್‍ ಕುಮಾರ್", "Q25628206", "Tulu Folklore", "", "ಕೆ.ಆಭಯ್ ಕುಮಾರ್", "ಕೆ.ಅಭಯ್‍ ಕುಮಾರ್"}, {"ಕೆಡ್ಡಸ", "Q6382557", "Tulu Folklore", "Keddaso", "ಕೆಡ್ಡಸ", "ಕೆಡ್ಡಸ"}, {"ಕೈ ಪತ್ತಾವುನೆ", "Q31829836", "Tulu Folklore", "", "", "ಕೈ ಪತ್ತಾವುನೆ"}, {"ಕೈಬಿತ್ತ್", "", "Tulu Folklore", "", "", ""}, {"ಕೊರಗ", "Q6431329", "Tulu Folklore", "Koraga people", "ಕೊರಗ", "ಕೊರಗ"}, {"ಕೋಲೊ", "Q31829859", "Tulu Folklore", "", "", "ಕೋಲೊ"}, {"ಗಟ್ಟಿ", "Q31829867", "Tulu Folklore", "", "", "ಗಟ್ಟಿ"}, {"ಗಾದೆ ಗೊಂಚಿಲ್", "Q31829881", "Tulu Folklore", "", "", "ಗಾದೆ ಗೊಂಚಿಲ್"}, {"ಗಾದೆಲು", "Q35102", "Tulu Folklore", "Proverb", "ಗಾದೆ", "ಗಾದೆಲು"}, {"ಚೆನ್ನು ನಲಿಕೆ", "Q31829923", "Tulu Folklore", "Chennu Nalike", "ಚೆನ್ನು ಕುಣಿತ", "ಚೆನ್ನು ನಲಿಕೆ"}, {"ಚೆನ್ನೆಮಣೆ", "Q3611616", "Tulu Folklore", "Ali Guli Mane", "ಚೆನ್ನೆಮಣೆ", "ಚೆನ್ನೆಮಣೆ"}, {"ಜುಬುಲಿ", "Q65403350", "Tulu Folklore", "", "ಕುಂಟೆ ಬಿಲ್ಲೆ", "ಜುಬುಲಿ"}, {"ಜೋಕುಲೆ ಕಬಿತೆ", "Q31830751", "Tulu Folklore", "", "", "ಜೋಕುಲೆ ಕಬಿತೆ"}, {"ತಂಬಿಲ", "Q31829973", "Tulu Folklore", "", "", "ತಂಬಿಲ"}, {"ತರ್ಂಬುಚ್ಛಿ", "Q31829993", "Tulu Folklore", "", "", "ತರ್ಂಬುಚ್ಛಿ"}, {"ತಾರಾನಾಥ ವರ್ಕಾಡಿ", "Q31830003", "Tulu Folklore", "", "", "ತಾರಾನಾಥ ವರ್ಕಾಡಿ"}, {"ತಾಳಮದ್ದಲೆ", "Q7678735", "Tulu Folklore", "Tala-Maddale", "ತಾಳಮದ್ದಳೆ", "ತಾಳಮದ್ದಲೆ"}, {"ತಾಸೆ", "Q31830015", "Tulu Folklore", "", "", "ತಾಸೆ"}, {"ತುಳು ತಿಂಗೊಲು", "Q7852416", "Tulu Folklore", "Tulu calendar", "ತುಳು ಕ್ಯಾಲೆಂಡರ್", "ತುಳು ತಿಂಗೊಲು"}, {"ತುಳು ಭಾಷೆಗ್ ಬಾಸೆಲ್ ಮಿಶನರಿಳೆನ ಕೊಡುಗೆ", "Q31830041", "Tulu Folklore", "", "", "ತುಳು ಭಾಷೆಗ್ ಬಾಸೆಲ್ ಮಿಶನರಿಳೆನ ಕೊಡುಗೆ"}, {"ತುಳು ಯಕ್ಷಗಾನ", "Q31830045", "Tulu Folklore", "", "", "ತುಳು ಯಕ್ಷಗಾನ"}, {"ತುಳುತ ಗಾದೆಲು", "Q31830051", "Tulu Folklore", "", "", "ತುಳುತ ಗಾದೆಲು"}, {"ತುಳುತ ಪಾಡ್ದಾನೊ", "Q31830052", "Tulu Folklore", "", "", "ತುಳುತ ಪಾಡ್ದಾನೊ"}, {"ತುಳುನಾಡ ಗೊಬ್ಬುಲು", "Q31830059", "Tulu Folklore", "", "", "ತುಳುನಾಡ ಗೊಬ್ಬುಲು"}, {"ತುಳುನಾಡ್ದ ಐತಿಹ್ಯೊಲು", "Q31830065", "Tulu Folklore", "", "", "ತುಳುನಾಡ್ದ ಐತಿಹ್ಯೊಲು"}, {"ತುಳುನಾಡ್ದ ಗೊಬ್ಬುಲು", "Q31830069", "Tulu Folklore", "", "", "ತುಳುನಾಡ್ದ ಗೊಬ್ಬುಲು"}, {"ತುಳುನಾಡ್‌ದ ಮೊಗೇರೆ‌ರ್", "Q31830081", "Tulu Folklore", "", "", "ತುಳುನಾಡ್‌ದ ಮೊಗೇರೆ‌ರ್"}, {"ತುಳುನಾಡ್‍ದ ದೇವತಾರಾಧನೆ", "Q31830085", "Tulu Folklore", "", "", "ತುಳುನಾಡ್‍ದ ದೇವತಾರಾಧನೆ"}, {"ದೇವಿ ಮಹಾತ್ಮೆ", "Q31830164", "Tulu Folklore", "", "", "ದೇವಿ ಮಹಾತ್ಮೆ"}, {"ದೈವಾರಾಧನೆ", "Q31830156", "Tulu Folklore", "", "", "ದೈವಾರಾಧನೆ"}, {"ನರ್ಸಣ್ಣೆ", "Q31830178", "Tulu Folklore", "", "", "ನರ್ಸಣ್ಣೆ"}, {"ನಲಿಕೆದಕುಲು", "Q31830768", "Tulu Folklore", "", "", "ನಲಿಕೆದಕುಲು"}, {"ನೂಲಮದಿಮೆ", "Q31830208", "Tulu Folklore", "", "", "ನೂಲಮದಿಮೆ"}, {"ನೋಲಿಸರೊ", "Q31830215", "Tulu Folklore", "", "", "ನೋಲಿಸರೊ"}, {"ಪಗ್ಗು", "Q31830224", "Tulu Folklore", "", "", "ಪಗ್ಗು"}, {"ಪಗ್ಗು ಪದಿನೆನ್ಮ", "Q97272100", "Tulu Folklore", "", "", "ಪಗ್ಗು ಪದಿನೆನ್ಮ"}, {"ಪನಿಯಾರ", "Q97272123", "Tulu Folklore", "", "", "ಪನಿಯಾರ"}, {"ಪಾಡ್ದನ", "Q31830262", "Tulu Folklore", "", "ಪಾಡ್ಡನ", "ಪಾಡ್ದನ"}, {"ಪಿಶಾಚಿ", "Q45529", "Tulu Folklore", "Ghost", "", "ಪಿಶಾಚಿ"}, {"ಪೂವರಿ", "Q97272168", "Tulu Folklore", "", "", "ಪೂವರಿ"}, {"ಪೆಲಕಾಯಿ", "Q45757", "Tulu Folklore", "Jackfruit", "ಹಲಸು", "ಪೆಲಕಾಯಿ"}, {"ಪೊಕ್ಕು", "Q97272188", "Tulu Folklore", "", "", "ಪೊಕ್ಕು"}, {"ಪೊಸಪ್ಪೆ ದೈವ", "Q31830350", "Tulu Folklore", "", "", "ಪೊಸಪ್ಪೆ ದೈವ"}, {"ಬಚ್ಚಂಗಾಯಿ", "Q17507129", "Tulu Folklore", "Watermelon", "ಕಲ್ಲಂಗಡಿ", "ಬಚ್ಚಂಗಾಯಿ"}, {"ಮಂಡಲ", "Q3011594", "Tulu Folklore", "Daboia", "", "ಮಂಡಲ"}, {"ಮಾಂಕಾಳಿ ನಲಿಕೆ", "Q31792147", "Tulu Folklore", "", "ಮಾಂಕಾಳಿ ಕುಣಿತ", "ಮಾಂಕಾಳಿ ನಲಿಕೆ"}, {"ಮಾಯಿದ ಪುರ್ಸೆರ್", "Q139502745", "Tulu Folklore", "", "ಮಾಯಿದ ಪುರುಷೆ", "ಮಾಯಿದ ಪುರ್ಸೆರ್"}, {"ಮಿಜಾರು ಅಣ್ಣಪ್ಪ", "Q135427578", "Tulu Folklore", "", "", "ಮಿಜಾರು ಅಣ್ಣಪ್ಪ"}, {"ಮೂಕಾಂಬಿ ಗುಳಿಗ", "Q97272406", "Tulu Folklore", "", "", "ಮೂಕಾಂಬಿ ಗುಳಿಗ"}, {"ಯಕ್ಷಗಾನ", "Q1584013", "Tulu Folklore", "Yakshagana", "ಯಕ್ಷಗಾನ", "ಯಕ್ಷಗಾನ"}, {"ಲಗೋರಿ", "Q97272441", "Tulu Folklore", "", "", "ಲಗೋರಿ"}, {"ವಾದ್ಯೊಲು", "Q31830623", "Tulu Folklore", "", "", "ವಾದ್ಯೊಲು"}, {"ವೀಳ್ಯೊಶಾಸ್ತ್ರ", "Q157512", "Tulu Folklore", "Engagement", "ನಿಶ್ಚಿತಾರ್ಥ", "ವೀಳ್ಯೊಶಾಸ್ತ್ರ"}, {"ಸಂದ್ ಬೂರು", "Q2157164", "Tulu Folklore", "Cissus quadrangularis", "ಮಂಗರವಳ್ಳಿ", "ಸಂದ್ ಬೂರು"}, {"ಸಿರಿ ಕಾವ್ಯ ಲೋಕ", "Q97272528", "Tulu Folklore", "", "", "ಸಿರಿ ಕಾವ್ಯ ಲೋಕ"}, } -- Function to get sitelink for a given QID and wiki local sitelinkCache = {} local function getSitelink(qid, wiki) if not qid or not wiki then return nil end local cacheKey = qid .. '_' .. wiki if sitelinkCache[cacheKey] ~= nil then return sitelinkCache[cacheKey] end -- Try to get the entity from Wikidata local success, entity = pcall(mw.wikibase.getEntityObject, qid) if not success or not entity then sitelinkCache[cacheKey] = nil return nil end local sitelink = entity:getSitelink(wiki) sitelinkCache[cacheKey] = sitelink return sitelink end -- Function to create the navigation bar with jump links to each category local function createNavigation() -- Group topics by category to get unique category names local categories = {} for _, topic in ipairs(topics) do local cat = topic[3] or 'General' if not categories[cat] then categories[cat] = true end end -- Sort category names local sortedCats = {} for cat in pairs(categories) do table.insert(sortedCats, cat) end table.sort(sortedCats) local nav = { '<div style="margin: 1em 0; padding: 0.5em; background: #f8f9fa; border: 1px solid #a2a9b1; border-radius: 4px;">', '<strong>Jump to section:</strong> ' } local links = {} for _, cat in ipairs(sortedCats) do local anchor = 'section-' .. cat:gsub(' ', '_'):gsub('[%(%)]', '') links[#links + 1] = '[[' .. '#' .. anchor .. '|' .. cat .. ']]' end nav[#nav + 1] = table.concat(links, ' | ') nav[#nav + 1] = '</div>' return table.concat(nav) end -- Function to create the table header local function createTableHeader() local header = { '{| class="wikitable sortable" style="width: 100%;"', '! №', '! style="width: 25%;" | Content name', '! style="width: 15%;" | Category', } -- Add language columns for _, lang in ipairs(languages) do local title = ' title="' .. lang.name .. ' Wikipedia"' header[#header + 1] = '!' .. title .. ' | ' .. lang.name end header[#header + 1] = '! Wikidata' return table.concat(header, '\n') end -- Function to create a table row for a topic with sitelinks local function createTopicRow(index, topic) local title = topic[1] local qid = topic[2] local category = topic[3] or 'General' local enSitelink = topic[4] or '' local knSitelink = topic[5] or '' local tcySitelink = topic[6] or '' -- Build the row local row = { '\n|-', '| ' .. index, '| ' .. title, '| ' .. category, } -- Display sitelinks for each language -- English if enSitelink and enSitelink ~= '' then row[#row + 1] = '| style="background: #d4f4d4; text-align: center;" | [[:en:' .. enSitelink .. '|' .. enSitelink .. ']]' else row[#row + 1] = '| style="background: #ffe0e0; text-align: center;" | −' end -- Kannada if knSitelink and knSitelink ~= '' then row[#row + 1] = '| style="background: #d4f4d4; text-align: center;" | [[:kn:' .. knSitelink .. '|' .. knSitelink .. ']]' else row[#row + 1] = '| style="background: #ffe0e0; text-align: center;" | −' end -- Tulu if tcySitelink and tcySitelink ~= '' then row[#row + 1] = '| style="background: #d4f4d4; text-align: center;" | [[:tcy:' .. tcySitelink .. '|' .. tcySitelink .. ']]' else row[#row + 1] = '| style="background: #ffe0e0; text-align: center;" | −' end row[#row + 1] = '| [[d:' .. qid .. '|' .. qid .. ']]' return table.concat(row, '\n') end -- Function to create the table footer with statistics local function createTableFooter(topics) local totalTopics = #topics if totalTopics == 0 then return '\n|-\n| colspan="7" style="text-align: center;" | No topics available' end -- Calculate column statistics local colStats = {} for i = 1, #languages do colStats[i] = {exists = 0, missing = 0} end for _, topic in ipairs(topics) do -- Check English if topic[4] and topic[4] ~= '' then colStats[1].exists = colStats[1].exists + 1 else colStats[1].missing = colStats[1].missing + 1 end -- Check Kannada if topic[5] and topic[5] ~= '' then colStats[2].exists = colStats[2].exists + 1 else colStats[2].missing = colStats[2].missing + 1 end -- Check Tulu if topic[6] and topic[6] ~= '' then colStats[3].exists = colStats[3].exists + 1 else colStats[3].missing = colStats[3].missing + 1 end end -- Create footer row local footer = { '\n|- class="sortbottom" style="font-weight: bold; background: #f0f0f0;"', '| colspan="3" | Total articles', } for i = 1, #languages do footer[#footer + 1] = '| style="text-align: center;" | ' .. colStats[i].exists .. ' / ' .. totalTopics end footer[#footer + 1] = '|' return table.concat(footer, '\n') end -- Function to render a single category table local function renderCategoryTable(categoryName, categoryTopics, startIndex) local result = {} -- Add section anchor local anchor = 'section-' .. categoryName:gsub(' ', '_'):gsub('[%(%)]', '') result[#result + 1] = '<div id="' .. anchor .. '"></div>' -- Add category header result[#result + 1] = '\n=== ' .. categoryName .. ' ===\n' -- Add data source info for the category result[#result + 1] = '<div style="font-size: 90%; color: #555; margin-bottom: 0.5em;">Total: ' .. #categoryTopics .. ' articles</div>' -- Start the table result[#result + 1] = createTableHeader() -- Add topic rows local currentIndex = startIndex for _, topic in ipairs(categoryTopics) do result[#result + 1] = createTopicRow(currentIndex, topic) currentIndex = currentIndex + 1 end -- Add footer result[#result + 1] = createTableFooter(categoryTopics) -- Close the table result[#result + 1] = '\n|}\n' return table.concat(result, '\n') end -- Main function to render the complete table function p.table(frame) local result = {} -- Group topics by category local categories = {} for _, topic in ipairs(topics) do local cat = topic[3] or 'General' if not categories[cat] then categories[cat] = {} end table.insert(categories[cat], topic) end -- Sort category names local sortedCats = {} for cat in pairs(categories) do table.insert(sortedCats, cat) end table.sort(sortedCats) -- Add data source info result[#result + 1] = [=[ <div style="margin-bottom: 1em; padding: 0.5em; background: #e8f4f8; border: 1px solid #a2a9b1; border-radius: 4px; font-size: 90%;"> <strong>Data sources:</strong> <ul> <li>Articles from Tuluva cuisine, Culture of Tuluvas, Birds, Buildings & Structures, District, Folk Worship, Geography, Museums, Temples, Tourist Attractions, Transport, Trees, Tulu Cinema, Tulu Folklore</li> <li>Update to sitelinks from Wikidata can be done through editing [[Module:TuluvasLivingandCultureHeritageTopicsTable]] or by placing a request to [[User_talk:A826]]</li> <li style="background: #d4f4d4; padding: 2px 4px;">Green = article exists in that language</li> <li style="background: #ffe0e0; padding: 2px 4px;">Red = article does not exist</li> </ul> </div> ]=] -- Add navigation result[#result + 1] = createNavigation() -- Render each category table local startIndex = 1 for _, cat in ipairs(sortedCats) do result[#result + 1] = renderCategoryTable(cat, categories[cat], startIndex) startIndex = startIndex + #categories[cat] end return table.concat(result, '\n') end return p m3nvi3x85auyxbo277d0i8b8h8qe1wk ವಿಕಿಪೀಡಿಯ:ತಾಂತ್ರಿಕ ಸುದ್ದಿ 4 28314 373846 373831 2026-10-28T05:44:40Z ChiK 1136 Removing 3 threads, will be on [[ವಿಕಿಪೀಡಿಯ:ತಾಂತ್ರಿಕ_ಸುದ್ದಿ/ಆರ್ಕೈವ್ 9]] (using [[w:tcy:User:ChiK/Archiver|ಆರ್ಕೈವರ್]]) 373846 wikitext text/x-wiki {{Archives}}{{User:MiszaBot/config | algo = old(30d) | archive = ವಿಕಿಪೀಡಿಯ:ತಾಂತ್ರಿಕ ಸುದ್ದಿ/ಆರ್ಕೈವ್ %(counter)d | counter = 9 | maxarchivesize = 150K | archiveheader = {{Archive}} | minthreadstoarchive = 1 | minthreadsleft = 3 }}ಇವರೊಲೆಗ್ [[m:Tech/News|ತಾಂತ್ರಿಕ ಸುದ್ದಿಲೆನ್]] ತೂಲೆ, ಬುಕ್ಕೊ ಚಂದಾದಾರಿಕೆಗ್ ಸೈನ್-ಅಪ್ ಮಲ್ಪುಲೆ. {{[[Template:Latest tech news|ಇಂಚಿಪೊದ ತಾಂತ್ರಿಕ ಸುದ್ದಿ]]}} ಟೆಂಪ್ಲೇಟ್‍ನ್‍ಲಾ ತೂಲೆ. [[Category:ವಿಕಿಪೀಡಿಯ ಸುದ್ದಿ|ತಾಂತ್ರಿಕ]] == <span lang="en" dir="ltr">Tech News: 2026-42</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W42"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/42|Translations]] are available. '''Weekly highlight''' * Starting October 13, wikis can change the default pattern for [[:en:Wikipedia:VisualEditor/Named references|auto-generated reference names in VisualEditor]] (currently <syntaxhighlight lang="wikitext" inline><ref name=":1" /></syntaxhighlight>). They will be able to use human-readable, content-based reference names that are more helpful to contributors using the source editor (e.g. <syntaxhighlight lang="wikitext" inline><ref name="Miller2026-1" /></syntaxhighlight>). VisualEditor reference name patterns can be defined using MediaWiki system messages, JSON, templates and modules ([[:mw:Special:MyLanguage/Help:Cite/VisualEditor reference names|more information]]). Admins can enable these changes via [[Special:CommunityConfiguration/Cite-VisualEditor-Autonames|community configuration]]. This is a [[:m:Special:MyLanguage/Community_Wishlist/W17|community wish]] implemented by [[:m:Special:MyLanguage/WMDE Technical Wishes|WMDE Technical Wishes]]. [https://phabricator.wikimedia.org/T436255] * [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|Sub-referencing]] is a new MediaWiki feature that allows editors to reuse references with different details. It will be deployed to English Wikipedia on October 14 and to remaining Wikimedia Foundation wikis by end of October (likely October 21). The [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing#deployment|FAQ]] lists possible actions to take on your wiki to support the deployment. This is a [[:m:WMDE Technical Wishes/Sub-referencing/History|long-standing community wish]] implemented by [[:m:Special:MyLanguage/WMDE Technical Wishes|WMDE Technical Wishes]]. [https://phabricator.wikimedia.org/T440243][https://phabricator.wikimedia.org/T440304] '''Updates for editors''' * [[mw:Special:MyLanguage/Moderator Tools|Moderator Tools]] will be removing the list view of the Watchlist and defaulting everyone to the changelog view. Previously, there were two versions of how the Watchlist is shown to mobile web users: the list view, where editors could see watched articles in a list format, and the changelog view, where editors could see changes to watched articles in a log format, controlled by a user's Advanced Mobile Control settings. This has created issues for code-base maintenance: two different displays means two sets of code to manage. By defaulting to the changelog view, we are simplifying the codebase and avoiding the likelihood of missing bugs. * The Wikipedia Android app is testing a way to listen to article introductions in the “For you” feed. A text-to-speech model reads the existing article text aloud without rewriting it or adding any content. The 30-day experiment will begin in the Wikipedia Beta app during the third week of September, then move to the regular Wikipedia Android app in October for a limited group of eligible users. A small portion of app users (those with English feeds and at least one topic interest) will have access to the feature. This experiment is part of broader efforts to give app readers options in how they consume content in order to deepen engagement and user retention. [[mw:Special:MyLanguage/Readers/Listening to Wikipedia/Phase 1|Learn more]] and [[mw:Talk:Readers/Listening to Wikipedia|share feedback]]. * [[mw:Special:MyLanguage/Help:Extension:CodeMirror|CodeMirror syntax highlighting]] was [[phab:T288161|enabled]] by default for all logged out and newly registered users on the English Wikipedia on September 14. With no signs of adverse effects, the same change is being proposed to be made globally across all wikis in a few weeks. If you have concerns or feedback, or if your wiki would like to opt out, [[mw:Special:MyLanguage/Help talk:Extension:CodeMirror#Enabling CodeMirror by default on all WMF wikis for newbies|please see the help page]]. [https://phabricator.wikimedia.org/T440077] * [[d:Wikidata:Usability_and_usefulness/Item_editing_experience/Mobile_editing_of_statements|Wikidata mobile statement editing]] of all datatypes will be officially launched on October 13, when it will be removed from Wikidata [[d:Special:Preferences#mw-prefsection-betafeatures|beta features]] and become available to all editors. Users can [[d:Wikidata_talk:Usability_and_usefulness/Item_editing_experience/Mobile_editing_of_statements|report bugs and share feedback]]. * Last week, language link changes were removed from [[Special:RecentChanges|Recent Changes]] and [[Special:Watchlist|Watchlist]] feeds on Wikivoyage, Wikisource, Wikiversity, Wikiquote and Wiktionary. As no adverse effects have been observed, the [[m:Wikidata_For_Wikimedia_Projects|Wikidata For Wikimedia Projects]] plans to roll out this change globally to all Wikipedias. This is scheduled for October 13 at 07:00 UTC, after which editors will no longer see when a link to ''another'' language version of a page is added, removed, or changed in its Wikidata item. Editors who rely on these notifications can read more on the [[m:Wikidata For Wikimedia Projects/Clearer Wikidata Edit Summaries/Hide Language Link edits|project page]] and share feedback or ask to opt out their wiki on the [[m:Talk:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|talk page]]. [https://phabricator.wikimedia.org/T440698] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:28}} community-submitted {{PLURAL:28|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where accidentally touching the graph while scrolling on the Pageviews tool on mobile could unintentionally zoom in has now been fixed. Click-and-drag zoom is now disabled on touch devices. [https://phabricator.wikimedia.org/T440075] '''Updates for technical contributors''' * There are three major changes coming to dumps: the legacy content dumps [https://lists.wikimedia.org/hyperkitty/list/xmldatadumps-l@lists.wikimedia.org/thread/E6D5EU4PMSTSOI2J7A46HJ3YW2W554CS/ deprecated in January 2026] will now be sunset, the replacement [https://wikitech.wikimedia.org/wiki/MediaWiki_Content_File_Exports MediaWiki Content File Exports] will be delayed to implement a “safety buffer”, and they are now also available as 7zip-compressed files. Users will need to switch the URL they download their dump from. For more information, timeline and migration instructions, see [https://wikitech.wikimedia.org/wiki/Legacy_content_dumps_sunset Legacy content dumps sunset]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.24|MediaWiki]] '''In depth''' * The Wikimedia Foundation discovered unauthorized activity by OpenAI agents on Wikimedia projects, including edits to wikis, attempts to exploit a public note-taking tool, and heavy automated traffic. [[diffblog:2026/10/05/openai-rogue-agent-activities-found-on-wikimedia-projects/|Read the blog post on Diff]] for more details about the activity and the Foundation’s response. '''Meetings and events''' * Save the date for the next Wikimedia Hackathon! We’ll be meeting in lovely Tirana, Albania for the [https://www.mediawiki.org/wiki/Wikimedia%20Hackathon%202027 2027 Wikimedia Hackathon] from April 9–11, 2027. Scholarship and staff sponsorship applications are currently being [https://pretix.eu/wikimedia/Hackathon-2027/ accepted through Pretix] and will close on October 30, 2026. General registration will open in January 2027. '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/42|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W42"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 13:09, 13 ಅಕ್ಟೋಬರ್ 2026 (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31142468 --> == <span lang="en" dir="ltr">Tech News: 2026-43</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W43"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/43|Translations]] are available. '''Updates for editors''' * To measure the impact of incorporating some [[mw:Special:MyLanguage/Readers/Reader_Growth/Image_Browsing#November 2025: Ideas and feedback|community-requested features]] on logged-out reader retention, a test for [[mw:Special:MyLanguage/Readers/Reader_Growth/Image_Browsing|Image Carousel]] will be pushed to logged-out readers. With the Image Carousel feature, readers browse community-uploaded images, selected by editors as relevant to specific articles. The test starts on November 20. * An experimental notice will be pushed to 0.5% of logged-out mobile readers who come to English Wikipedia from Google, asking them to add Wikipedia as a [https://blog.google/products-and-platforms/products/search/preferred-sources/ Google Preferred Source]. The test is to see if this notice increases reader retention and encourages people who use Google Search to visit Wikipedia more often. It will run from October 15–29 and will be assessed for its impact on retention and referrals. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:26}} community-submitted {{PLURAL:26|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where [[quarry:|Quarry]] returned an “Access denied” error when users tried to run SQL queries, preventing queries from running normally, has now been fixed. [https://phabricator.wikimedia.org/T440966] '''Updates for technical contributors''' * [[File:Cog-icon-grey.svg|12px|link=|class=skin-invert|Advanced item]] Due to a long-standing bug, applications that use the [[mw:Special:MyLanguage/OAuth/For_Developers|OAuth 2]] client credentials flow to act on their owners’ behalf are treated as if they are logged out. This will be fixed for new applications registered on or after Monday, October 19. Some affected applications need to re-register. [https://phabricator.wikimedia.org/T420297] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.48/wmf.1|MediaWiki]] '''Meetings and events''' * A proposal to hold the Wikimedia Hackathon every three years, with regional hackathons in between, [[mw:Wikimedia Hackathon/Community Proposal 2026|has been shared]]. It explores making the event more accessible to technical communities in different regions. Share your feedback on the proposal’s [[mw:Talk:Wikimedia Hackathon/Community Proposal 2026|talk page]] before November 6. '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/43|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W43"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:07, 19 ಅಕ್ಟೋಬರ್ 2026 (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31178499 --> == <span lang="en" dir="ltr">Tech News: 2026-44</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W44"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/44|Translations]] are available. '''Weekly highlight''' * An experiment launched on September 29 is testing [[mw:Special:MyLanguage/Readers/Reader_Experience/Reading_recommendations|article recommendations]] for new account holders who also identify as readers. By suggesting articles to read, similar to recommendations in the Wikipedia app for logged-in readers, the experiment aims to encourage new account holders to read and return to the website regularly, with the goal of increasing internal referrals by 1%. See the related [[m:Community Wishlist/W505|Community Wishlist]] proposal. * Several Wikimedia services were taken offline last week because of a [https://www.php.net/archive/2026.php#2026-10-20-1 security vulnerability in PHP]. This is because they need to be updated before they are safe to put back online. This is not a problem just for the Wikimedia movement but affects a lot of websites. You can follow updates on [[wikitech:Incidents/2026-10-21 PHP security update/Community|Wikitech]]. Cloud VPS and Toolforge will take longer to bring back online. This is to make sure that applications which run on Cloud VPS or Toolforge are not affected. Tool developers can see updates and more information on the [https://lists.wikimedia.org/postorius/lists/cloud-announce.lists.wikimedia.org/ Cloud-announce mailing list]. [https://diff.wikimedia.org/2026/10/21/impact-of-php-vulnerabilities-on-wikimedia-tools-and-services/][https://diff.wikimedia.org/2026/10/21/impact-of-php-vulnerabilities-on-wikimedia-cloud-services/] * [[m:Special:MyLanguage/Tech/News/2026/43|Last week we shared]] that to measure the impact of incorporating some community-requested features on logged-out reader retention, a test for the [[mw:Special:MyLanguage/Readers/Reader Growth/Image Browsing|Image Carousel]] feature would be pushed to logged-out readers. Due to an issue, we will be restarting the test, but it will be live on October 26, not November 20 as initially announced. '''Updates for editors''' * A new [[wikitech:KAPOW|bot detection system]] to better identify automated traffic that disguises itself as human visitors, is coming to the Wikimedia wikis. This might cause sudden changes to visitor statistics starting from 26 October, going back to 20 June 2026. * The [[mw:Special:MyLanguage/Extension:Score|Score extension]] which renders musical notation inside wiki pages, has been temporarily disabled on all wikis due to a security issue. Affected pages will display a notice instead of musical scores, but the underlying code remains intact. No action is needed from editors, and a fix is in progress. A separate announcement will follow when the extension is re-enabled. Read more on [[phab:T441579|Phabricator]]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:18}} community-submitted {{PLURAL:18|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, the issue where CodeMirror syntax highlighter appears to have been enabled in error for existing editors has been fixed. [https://phabricator.wikimedia.org/T441308] '''Updates for technical contributors''' * [[m:Special:MyLanguage/Tech/Server switch|All wikis will be read-only]] for a few minutes on Wednesday, October 28 2026 at [https://zonestamp.toolforge.org/1793199600 15:00 UTC]. This is for the datacenter server switchover backup tests, [[wikitech:Deployments/Yearly calendar|which happen twice a year]]. During the switchover, all Wikimedia website traffic is shifted from one primary data center to the backup data center to test availability and prevent service disruption even in emergencies. [https://phabricator.wikimedia.org/T439703] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.48/wmf.2|MediaWiki]] '''Meetings and events''' * Scholarship and sponsorship applications for the [https://www.mediawiki.org/wiki/Wikimedia%20Hackathon%202027 2027 Wikimedia Hackathon] will close on Friday, October 30th. Submit your application [https://pretix.eu/wikimedia/Hackathon-2027/ through Pretix] before the deadline! '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/44|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W44"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:26, 27 ಅಕ್ಟೋಬರ್ 2026 (IST) <!-- Message sent by User:STei (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31199592 --> 8flwac68lazk3tpabl1eavf82zhg248 ಮೋಡ್ಯೂಲ್:R 828 29011 373887 373366 2026-10-19T16:09:42Z en>Ahecht 0 spelling 373887 Scribunto text/plain local rp = {} local r = {} local hyphen2dash = require('Module:String2').hyphen_to_dash local lang = require('Module:Lang') local trim_quotes = require('Module:trim quotes')._trim local getArgs = require('Module:Arguments').getArgs local plainText = require('Module:Plain text')._main local mt = {__call = function (t, v) t[#t+1] = v end} local notblank = function(v) return (v or '') ~= '' end local isblank = function(v) return (v or '') == '' end local pageTest = {pages = 1, pp = 1, page = 1, p = 1} local quoteTest = {quote = 1, q = 1} local wrapTest = {yes = 1, y = 1, forced = 1, f = 1} -- get first non-empty argument from a list of names local function firstArg(args, ...) for i = 1, select('#', ...) do local n = select(i, ...) local v = args[n] if notblank(v) then return v end end return nil end local function firstArgN(s, args, ...) for i = 1, select('#', ...) do local n = select(i, ...) local v = args[n .. s] if notblank(v) then return v end end return nil end -- Implements [[Template:page_needed]] -- may replace with lua implementation at some point local function page_needed(frame, date, reason) return frame:expandTemplate{title='Page needed', args = {date = date, reason = reason}} end -- Formats quotes -- takes params{language=value, translation=value} local function make_quote(params, contentId, qcli, quote) local out = setmetatable({}, mt) local langcode = "" out("<q ") if notblank(contentId) then out('id="' .. contentId .. '" ') end if notblank(qcli) then out('cite="#' .. (mw.uri.anchorEncode(qcli)) .. '" ') end if notblank(params.language) then langcode = r._langcode(params.language) out('lang="' .. langcode .. '">') out('<bdi lang="' .. langcode .. '">') else out('><bdi>') end out(quote .. '</bdi></q>') if notblank(params.translation) then out('&#32;&#91;<bdi ') if notblank(params.language) then out('lang="' .. langcode .. '"') end out('>' .. trim_quotes(params.translation .. '</bdi>&#93;')) end return table.concat(out) end -- Implements [[Template:R/langcode]] -- Only for template/module use: |language=code/name function r._langcode(language) language = language or '' local tag, result = lang._tag_from_name{language} if result then return tag elseif lang._is_ietf_tag(language) then return language end return 'mis' -- use language code "mis" for any unrecognized language end function r.langcode(frame) local args = getArgs(frame) return r._langcode(args.language) end -- Implements [[Template:R/where]] sub-template -- Only for template/module use: |plural=pages |singular=page |location=in-source-location |spacing=character -- |pluralleadin=pp |singularleadin=p |leadin= function r._where(params) local out = setmetatable({}, mt) if notblank(params.plural) then if notblank(params.pluralleadin) and notblank(params.singularleadin) then out(tonumber(params.plural) and (params.singularleadin) or (params.pluralleadin)) out("." .. (params.spacing or "")) end out(params.plural) if notblank(params.singular) then out("," .. (params.spacing or "") .. "[" .. params.singular .. "]") end elseif notblank(params.singular) then if notblank(params.singularleadin) then out(params.singularleadin) out("." .. (params.spacing or "")) end out(params.singular) end if notblank(params.location) then if notblank(params.plural) or notblank(params.singular) then out("," .. (params.spacing or "")) end if(params.leadin) then out(params.leadin .. (params.spacing or "")) end out(params.location) end return table.concat(out) end function r.where(frame) return r._where(getArgs(frame)) end -- Implements [[Template:R/superscript]] -- Only for template/module use: |wrap=n[o]/y[es]/f[orced] |leadin=value |prefix=value |pp=value |where=value |sup-where=value |quote-where=value |quote=value |language=value |translation=value |suffix=value function r._superscript(params) if not params or isblank(params.where) then return "" end local out = setmetatable({}, mt) -- "wrap" if wrap is "yes", "y", "f" or "forced", else "nowrap" local wrap = wrapTest[string.ulower(params.wrap or '')] out('<sup class="reference ' .. (wrap and "" or "no") .. 'wrap">') --prefix, if there's a quote if notblank(params.quote) and notblank(params.prefix) then out(params.prefix) end -- open tooltip span out('<span title="') -- Lead-in text (escaped) local whereText = notblank(params["quote-where"]) and params["quote-where"] or (params["where"] or "") local tooltipText = plainText((params.leadin or "") .. ": " .. whereText, false) out(mw.text.encode(tooltipText, '<>"')) -- Quotation block if present if notblank(params.quote) then local quoteTab = setmetatable({}, mt) if notblank(params.language) then local langText = lang._is_ietf_tag(params.language) and lang._name_from_tag{params.language} or params.language quoteTab("&#32;(" .. langText .. ")") end quoteTab("&#58; &quot;" .. trim_quotes(params.quote) .. "&quot;") if notblank(params.translation) then quoteTab("&#10;Translation: &quot;" .. trim_quotes(params.translation) .. "&quot;") end local quoteText = plainText(table.concat(quoteTab), false) out("&#10;Quotation" .. mw.text.encode(quoteText, '<>"') .. '" class="tooltip tooltip-dashed" style="border-bottom: 1px dashed;') end -- close tooltip span out('">') -- prefix, if not inserted above if (isblank(params.quote)) and notblank(params.prefix) then out(params.prefix) end --pp and sup-where out(params.pp or '') out(params['sup-where'] or '') -- suffix if notblank(params.quote) then out("</span>" .. (params.suffix or "")) else out((params.suffix or "") .. "</span>") end out("</sup>") return table.concat(out) end function r.superscript(frame) return r._superscript(getArgs(frame)) end -- Implements [[Template:R/details]] formatting for the details= field -- Only for template/module use: |where=value |quote-where=value |quote=value |language=value |translation=value |annotation=value |contentId=value |qcli = firstArg(params, 'quote-cite', 'link-id') function r._details(params) if not params or ( isblank(params["where"]) and isblank(params["quote-where"]) and isblank(params["quote"]) and isblank(params["annotation"]) ) then return "" end local out = setmetatable({}, mt) -- process language local langText = "" local langName = "" if notblank(params.language) then langName = lang._is_ietf_tag(params.language) and lang._name_from_tag{params.language} or params.language langText = "&#32;(in " .. langName .. ")" end -- process location local whereText = isblank(params["where"]) and (params["quote-where"] or "") or (params["where"] or "") if isblank(params.annotation) and isblank(params.quote) and notblank(whereText) then out(whereText) end local stripError=false -- Annotation block if present local annotation = mw.text.killMarkers(params.annotation or '') if notblank(annotation) then if annotation ~= params.annotation then stripError=true end annotation = mw.ustring.gsub(mw.text.trim(annotation), "^:", "") if notblank(whereText) then annotation = mw.ustring.gsub(annotation, "^" .. mw.text.decode(whereText) .. ": *", "") out(whereText .. (isblank(params.quote) and langText or "") .. "&#58;&#32;") end out(annotation) if mw.ustring.sub(annotation, -1) ~= "." then out(".") end out("&#32;") end -- Quotation block if present local quote = mw.text.killMarkers(trim_quotes(params.quote or '')) if notblank(quote) then if quote ~= trim_quotes(params.quote or '') then stripError = true end if notblank(params["quote-where"]) then if params["quote-where"] ~= whereText or isblank(annotation) then if params["quote-where"] ~= whereText and isblank(annotation) then out(whereText .. ".&#32;") end out(params["quote-where"] .. langText .. "&#58;&#32;") elseif notblank(langName) then out("In " .. langName .. "&#58;&#32;") end elseif isblank(annotation) and notblank(whereText) then out(whereText .. langText .. "&#58;&#32;") elseif notblank(whereText) and table.concat(out) == whereText then out(langText .. "&#58;&#32;") elseif notblank(langName) then out("In " .. langName .. "&#58;&#32;") end out(make_quote(params, params.contentId, params.qcli, quote)) elseif table.concat(out) == whereText then out(langText .. ".&#32;") end if stripError == true then local errorMsg = ' Nested references and other parser functions that produce [[:mw:Strip_marker|strip markers]] are not supported in quotes or annotations when using sub-referencing.' mw.addWarning('<span style="color:#d33">Error in citation using {{tl|R}}:</span>' .. errorMsg) out('<span class="cs1-visible-error citation-comment template-r-error">' .. errorMsg .. '</span>') end return table.concat(out) end function r.details(frame) return r._details(getArgs(frame)) end -- Implements [[Template:R/ref]] function r._ref(params, frame) frame = frame or mw.getCurrentFrame() local out = setmetatable({}, mt) local contextSectionName = mw.uri.anchorEncode( 'cite_sect-' .. trim_quotes(params[1] or '') .. '-' .. trim_quotes(params[2] or '') .. '-' .. trim_quotes( (notblank(params.page) and params.page or hyphen2dash(params.pages or '', ' ')) .. (params.location or '') ) ) local contentId = notblank(params['content-id']) and mw.uri.anchorEncode(params['content-id']) or nil local whereArgs = { plural = hyphen2dash(params.pages, ' '), singular = params.page, location = params.location, spacing = '&#32;' } local quoteWhereArgs = { plural = hyphen2dash(params['quote-pages'], ' '), singular = params['quote-page'], location = params['quote-location'], spacing = '&#32;' } local refArgs = {name = params[1] or '', group = params[2] or ''} local leadin = params.leadin or '' local quote = trim_quotes(params.quote or '') local quotePage = firstArg(params, 'quote-pages', 'quote-page', 'quote-location') local qcli = firstArg(params, 'quote-cite', 'link-id') -- Whether or not to use subreferencing. Set to default for now, but this should changed when moved to enwiki local subreferencing = ({sub = 1, subreference = 1, ['sub-reference']=1})[string.ulower(params.style or '')] == 1 -- Debug facility if notblank(params.debug) then out("DEBUG: ") for k, v in pairs(params) do out(k .. "=" .. (v or '') .. ", ") end out(". Potential context-section-name:") out(contextSectionName .. '".') end -- Opening "support context" span local lst if notblank(params.section) then local section = (params.section == 'yes' or params.section == 'y') and contextSectionName or params.section lst = frame:callParserFunction('#lst', { mw.title.getCurrentTitle().fullText, section }) if notblank(lst) then out(frame:extensionTag('templatestyles', '', {src='Template:Tooltip/styles.css'})) out('<span class="rt-commentedText tooltip tooltip-dotted"' .. 'title="Context: &quot;' .. mw.text.encode(plainText(lst, false), '<>"') .. '&quot;">') end end --First call to create reference link (variants identical except for dir): if notblank(params['link-id']) then out('<span id="' .. mw.uri.anchorEncode(params['link-id']) .. 'class="citation">') end local refContent = setmetatable({}, mt) if (isblank(params.annotation)) then if contentId then refContent('<span id="' .. contentId .. '" class="citation">') refContent(params.reference or '') refContent('</span>') else refContent(params.reference or '') end refContent(params.postscript or '') end if notblank(params.direction) then refArgs.dir = params.direction end -- Generate details for subreferencing, if enabled if subreferencing and firstArg(params, 'annotation', 'quote', 'page', 'pages', 'location') then local detailsWhereArgs = mw.clone(whereArgs) detailsWhereArgs.singularleadin = "p" detailsWhereArgs.pluralleadin = "pp" local detailsQuoteWhereArgs = mw.clone(quoteWhereArgs) detailsQuoteWhereArgs.singularleadin = "p" detailsQuoteWhereArgs.pluralleadin = "pp" local details=r._details{ where = r._where(detailsWhereArgs), -- where must not include qp params annotation = quoteTest[params.annotation] and '' or (leadin .. (params.annotation or '')), ['quote-where'] = r._where( -- quote-where must not contain normal in-source-location params pageTest[quotePage] and detailsWhereArgs or detailsQuoteWhereArgs ), quote = quote, language = params.language, translation = params.translation, contentId=contentId, qcli = qcli } if notblank(details) then refArgs.details = details end end out(frame:extensionTag('ref', table.concat(refContent), refArgs)) if notblank(params['link-id']) then out('</span>') end if not subreferencing then --Optional second call to append data to reference (variants identical except for dir): if notblank(params.annotation) then refContent = setmetatable({}, mt) if pageTest[params.annotation] then if notblank(firstArg(params, 'pages', 'page', 'location')) then --refContent('&#8204;') if contentId then refContent('<span id="' .. contentId .. '">') end refContent(leadin) refContent(r._where(whereArgs)) if contentId then refContent('</span>') end end elseif quoteTest[params.annotation] then --refContent('&#8204;') if pageTest[quotePage] then if notblank(firstArg(params, 'pages', 'page', 'location')) then refContent(leadin) refContent(r._where(whereArgs) .. ':&#32;') end elseif notblank(quotePage) then refContent(leadin) refContent(r._where(quoteWhereArgs) .. ':&#32;') end refContent(make_quote(params, contentId, qcli, quote)) elseif contentId then refContent('<span id="' .. contentId .. ' class="citation">' .. leadin .. params.annotation .. '</span>') else refContent(leadin .. params.annotation) end refContent(params.postscript or '') refArgs = {follow = params[1] or '', group = params[2] or ''} if notblank(params.direction) then refArgs.dir = params.direction end if notblank(params.annotation) and params.annotation:sub(1,1) == "#" then local errorMsg = ' Automatic numbering by preceeding the annotation ' .. 'with <code>&num;</code> will not work with the new [[:mw:Parsoid|Parsoid]] ' .. 'parser, and therefore its use is discouraged' mw.addWarning('<span style="color:#085">Maintenance messages for citation using {{tl|R}}:</span>' .. errorMsg .. '; messages may be hidden ([[Help:CS1_errors#Controlling_error_message_display|help]]).') refContent('<span class="cs1-maint citation-comment template-r-error">' .. errorMsg .. '.</span>') end out(frame:extensionTag('ref', table.concat(refContent), refArgs)) end --Superscript pages and tooltip for help, pages, quotes: local ssAma = string.ulower(params.style or '') == 'ama' -- p/pp is only used in superscript label, therefore it does not contain any qp params local ssPp = '' if ssAma and (isblank(params['no-pp'])) then if notblank(params.pages) then ssPp = 'pp' elseif notblank(params.page) then ssPp = 'p' end end -- leadin is only used in tooltip local ssLeadin = 'Page&nbsp;/ location' if pageTest[quotePage] then if notblank(params.pages) then ssLeadin = 'Pages' elseif notblank(params.page) then ssLeadin = 'Page' elseif notblank(params.location) then ssLeadin = 'Location' end elseif notblank(params['quote-pages']) then ssLeadin = 'Pages' elseif notblank(params['quote-page']) then ssLeadin = 'Page' elseif notblank(params['quote-location']) then ssLeadin = 'Location' end out(r._superscript{ prefix = ssAma and '(' or '&#58;&hairsp;', suffix = ssAma and ')' or '&hairsp;', pp = ssPp, leadin = ssLeadin, where = r._where(whereArgs), -- where must not include qp params ['sup-where'] = r._where{ -- sup-where same as where, but with improved list spacing for superscript plural = hyphen2dash(params.pages, '&hairsp;'), singular = params.page, location = params.location, spacing='&hairsp;' }, ['quote-where'] = r._where(pageTest[quotePage] and whereArgs or quoteWhereArgs), quote = quote, language = params.language, translation = params.translation, ['wrap'] = params['wrap'] }) end -- Closing "support context" span: if notblank(params.section) and notblank(lst) then out('</span>') end -- Page needed functionality: if notblank(params['needed-reason']) then local pnReason = ({yes = 1, y = 1})[params['needed-reason']] and 'No reason given' or params['needed-reason'] out(page_needed(frame, params['needed-date'], pnReason)) end -- Line wrapping functionality: if wrapTest[string.ulower(params.wrap or '')] then out("&#8203;") --zero-width space end -- Tracking category for nested references if (notblank(params.quote) and params.quote ~= mw.text.killMarkers(params.quote or '')) or (notblank(params.annotation) and params.annotation ~= mw.text.killMarkers(params.annotation or '')) then out('[[Category:Pages using Template:R with nested references]]') end --End of code return table.concat(out) end function r.ref(frame) return r._ref(getArgs(frame), frame) end function r._r(args, frame) frame = frame or mw.getCurrentFrame() local output = setmetatable({}, mt) output(frame:extensionTag('templatestyles', '', {src='Module:Citation/CS1/styles.css'})) -- ### 1 ### output(r._ref({ [1] = firstArg(args, 'name1', 'name', 'n1', 'n', 1), [2] = firstArg(args, 'group', 'grp', 'g'), direction = firstArg(args, 'direction1', 'direction', 'dir1', 'dir'), page = firstArg(args, 'page1', 'page', 'p1', '1p', 'p'), pages = firstArg(args, 'pages1', 'pages', 'pp1', '1pp', 'pp'), location = firstArg(args, 'location1', 'location', 'loc1', '1loc', 'loc', 'at1', 'at'), ['quote-page'] = firstArg(args, 'quotation-page1', 'quotation-page', 'quote-page1', 'quote-page', 'qp1', 'qp'), ['quote-pages'] = firstArg(args, 'quotation-pages1', 'quotation-pages', 'quote-pages1', 'quote-pages', 'qpp1', 'qpp'), ['quote-location'] = firstArg(args, 'quotation-location1', 'quotation-location', 'quote-location1', 'quote-location', 'quote-loc1', 'quote-loc', 'quote-at1', 'quote-at' ), quote = firstArg(args, 'quotation1', 'quotation', 'quote1', 'quote', 'q1', 'q'), language = firstArg(args, 'quotation-language1', 'quotation-language', 'quote-language1', 'quote-language', 'quotation-lang1', 'quotation-lang', 'quote-lang1', 'quote-lang', 'ql1', 'ql', 'language1', 'language', 'lang1', 'language', 'l1', 'l' ), translation = firstArg(args, 'translation-quotation1', 'translation-quotation', 'trans-quotation1', 'trans-quotation', 'translation-quote1', 'translation-quote', 'trans-quote1', 'trans-quote', 'tq1', 'tq', 'translation1', 'translation', 'trans1', 'trans', 't1', 't', 'xlat1', 'xlat' ), ['quote-cite'] = firstArg(args, 'quotation-cite1', 'quotation-cite', 'quote-cite1', 'quote-cite', 'qc1', 'qc'), reference = firstArg(args, 'reference1', 'references', 'reference', 'notes', 'note', 'content', 'text', 'refn1', 'refn', 'refs', 'r1', 'r' ), annotation = firstArg(args, 'annotation1', 'annotation', 'annot1', 'annot', 'a1', 'a'), leadin = args.leadin, postscript = firstArg(args, 'postscript', 'postscript1', 'ps', 'ps1', '1ps'), section = firstArg(args, 'section1', 'section', 'sec1', 'sec', 's1', 's'), ['needed-reason'] = firstArg(args, 'needed-reason1', 'needed-reason', 'needed1', 'needed', 'reason'), ['needed-date'] = firstArg(args, 'needed-date', 'date'), wrap = args.wrap, ['no-pp'] = firstArg(args, 'no-pp', 'nopp'), style = args.style, ['content-id'] = firstArg(args, 'ref1', '1ref', 'ref', 'id1', 'id'), ['link-id'] = firstArg(args, 'link-id1', 'link-id'), ['debug'] = args['debug'] }, frame)) -- ### 2+ ### local n = 2 while firstArg(args, "name" .. n, "n" .. n, n) ~= nil do output(r._ref({ [1] = firstArg(args, 'name' .. n, 'n' .. n, n), [2] = firstArg(args, 'group', 'grp', 'g'), direction = firstArgN(n, args, 'direction', 'dir'), page = firstArg(args, 'page' .. n, 'p' .. n, n .. 'p'), pages = firstArg(args, 'pages' .. n, 'pp' .. n, n .. 'pp'), location = firstArg(args, 'location' .. n, 'loc' .. n, n .. 'loc', 'at' .. n), ['quote-page'] = firstArgN(n, args, 'quotation-page', 'quote-page', 'qp'), ['quote-pages'] = firstArgN(n, args, 'quotation-pages', 'quote-pages', 'qpp'), ['quote-location'] = firstArgN(n, args, 'quotation-location', 'quote-location', 'quote-loc', 'quote-at'), quote = firstArgN(n, args, 'quotation', 'quote', 'q'), language = firstArgN(n, args, 'quotation-language', 'quote-language', 'quotation-lang', 'quote-lang', 'ql', 'language', 'lang', 'l' ), translation = firstArgN(n, args, 'translation-quotation', 'trans-quotation', 'translation-quote', 'trans-quote', 'tq', 'translation', 'trans', 't', 'xlat' ), ['quote-cite'] = firstArgN(n, args, 'quotation-cite', 'quote-cite', 'qc'), reference = firstArgN(n, args, 'reference', 'refn', 'r'), annotation = firstArgN(n, args, 'annotation', 'annot', 'a'), leadin = args.leadin, postscript = firstArg(args, 'postscript' .. n, 'ps' .. n, n .. 'ps', 'postscript', 'ps'), section = firstArgN(n, args, 'section', 'sec', 's'), ['needed-reason'] = firstArgN(n, args, 'needed-reason', 'needed'), ['needed-date'] = firstArg(args, 'needed-date', 'date'), ['wrap'] = args['wrap'], ['no-pp'] = firstArg(args, 'no-pp', 'nopp'), style = args.style, ['content-id'] = firstArg(args, 'ref' .. n, n .. 'ref', 'id' .. n), ['link-id'] = args['link-id' .. n], ['debug'] = args['debug'], }, frame)) n = n + 1 end local outputText = table.concat(output) local errorText = outputText:find('template-r-error', 1, true) and '[[Category:Pages with errors in Template:R]]' or '' return (outputText .. errorText) end function r.r(frame) return r._r(getArgs(frame), frame) end -- Implements [[Template:Rp]] function rp._rp(args, frame) frame = frame or mw.getCurrentFrame() -- If needed param is present and non-empty, show {{page needed}} if notblank(args.needed) then return page_needed(frame, args.date, args.reason) end -- prefix/suffix depending on style local ama = string.ulower(args.style or "") == "ama" local prefix = ama and "(" or "&#58;&hairsp;" local suffix = ama and ")" or "&hairsp;" -- p/pp is only used in superscript label, therefore it does not contain any qp params local pp = "" if ama and isblank(args["no-pp"]) and isblank(args.nopp) then if notblank(args.pages) or notblank(args.pp) then pp = "pp" elseif notblank(args.page) or notblank(args.p) then pp = "p" end end -- leadin is only used in tooltip local leadin local quote_switch = firstArg(args, "quotation-pages", "quote-pages", "qpp", "quotation-page", "quote-page", "qp", "quotation-location", "quote-location", "quote-loc", "quote-at") if not pageTest[quote_switch] then if notblank(firstArg(args, "quotation-pages", "quote-pages", "qpp")) then leadin = "Pages" elseif notblank(firstArg(args, "quotation-page", "quote-page", "qp")) then leadin = "Page" elseif notblank(firstArg(args, "quotation-location", "quote-location", "quote-loc", "quote-at")) then leadin = "Location" end end if not leadin then --either the quote_switch wasn't 'pages', 'pp', 'page', -- or 'p', or the 'quotation' params were all blank/nil if notblank(firstArg(args, "pages", "pp")) then leadin = "Pages" elseif notblank(firstArg(args, "page", "p")) then leadin = "Page" elseif notblank(firstArg(args, "location", "loc", "at")) then leadin = "Location" else leadin = "Page&nbsp;/ location" end end -- where must not include qp params local where = r._where{ plural = hyphen2dash(firstArg(args, "pages", "pp", "1"), '&#32;'), singular = firstArg(args, "page", "p"), location = firstArg(args, "location", "loc", "at"), spacing = "&#32;" } -- sup-where same as where, but with improved list spacing for superscript local sup_where = r._where{ plural = hyphen2dash(firstArg(args, "pages", "pp", "1"), '&hairsp;'), singular = firstArg(args, "page", "p"), location = firstArg(args, "location", "loc", "at"), spacing = "&hairsp;" } -- quote-where must not contain normal in-source-location params local quote_where if pageTest[quote_switch] then quote_where = r._where{ plural = hyphen2dash(firstArg(args, "pages", "pp", 1), ' '), singular = firstArg(args, "page", "p"), location = firstArg(args, "location", "loc", "at"), spacing = "&#32;" } else quote_where = r._where{ plural = hyphen2dash(firstArg(args, "quotation-pages", "quote-pages", "qpp"), ' '), singular = firstArg(args, "quotation-page", "quote-page", "qp"), location = firstArg(args, "quotation-location", "quote-location", "quote-loc", "quote-at"), spacing = "&#32;" } end local zws = "" if wrapTest[string.ulower(args.wrap or '')] then zws = "&#8203;" --zero-width space end return r._superscript{ prefix = prefix, suffix = suffix, pp = pp, leadin = leadin, ["where"] = where, ["sup-where"] = sup_where, ["quote-where"] = quote_where, quote = firstArg(args, "quotation", "quote", "q"), language = firstArg(args, "quotation-language", "quote-language", "quotation-lang", "quote-lang", "ql", "language", "lang", "l"), translation = firstArg(args, "translation-quotation", "trans-quotation", "translation-quote", "trans-quote", "tq", "translation", "trans", "t", "xlat"), ["wrap"] = args.wrap } .. zws end function rp.rp(frame) return rp._rp(getArgs(frame), frame) end return { [''] = r.r, r = r.r, _r = r._r, rp = rp.rp, _rp = rp._rp, ref = r.ref, _ref = r._ref, where = r.where, _where = r._where, details = r.details, _details = r._details, langcode = r.langcode, _langcode = r._langcode, superscript = r.superscript, _superscript = r._superscript } f6jesd4755x8ezmji2s8s3jq6fz9tt1 373888 373887 2026-10-28T05:55:30Z ChiK 1136 1 revision imported from [[:en:Module:R]] 373887 Scribunto text/plain local rp = {} local r = {} local hyphen2dash = require('Module:String2').hyphen_to_dash local lang = require('Module:Lang') local trim_quotes = require('Module:trim quotes')._trim local getArgs = require('Module:Arguments').getArgs local plainText = require('Module:Plain text')._main local mt = {__call = function (t, v) t[#t+1] = v end} local notblank = function(v) return (v or '') ~= '' end local isblank = function(v) return (v or '') == '' end local pageTest = {pages = 1, pp = 1, page = 1, p = 1} local quoteTest = {quote = 1, q = 1} local wrapTest = {yes = 1, y = 1, forced = 1, f = 1} -- get first non-empty argument from a list of names local function firstArg(args, ...) for i = 1, select('#', ...) do local n = select(i, ...) local v = args[n] if notblank(v) then return v end end return nil end local function firstArgN(s, args, ...) for i = 1, select('#', ...) do local n = select(i, ...) local v = args[n .. s] if notblank(v) then return v end end return nil end -- Implements [[Template:page_needed]] -- may replace with lua implementation at some point local function page_needed(frame, date, reason) return frame:expandTemplate{title='Page needed', args = {date = date, reason = reason}} end -- Formats quotes -- takes params{language=value, translation=value} local function make_quote(params, contentId, qcli, quote) local out = setmetatable({}, mt) local langcode = "" out("<q ") if notblank(contentId) then out('id="' .. contentId .. '" ') end if notblank(qcli) then out('cite="#' .. (mw.uri.anchorEncode(qcli)) .. '" ') end if notblank(params.language) then langcode = r._langcode(params.language) out('lang="' .. langcode .. '">') out('<bdi lang="' .. langcode .. '">') else out('><bdi>') end out(quote .. '</bdi></q>') if notblank(params.translation) then out('&#32;&#91;<bdi ') if notblank(params.language) then out('lang="' .. langcode .. '"') end out('>' .. trim_quotes(params.translation .. '</bdi>&#93;')) end return table.concat(out) end -- Implements [[Template:R/langcode]] -- Only for template/module use: |language=code/name function r._langcode(language) language = language or '' local tag, result = lang._tag_from_name{language} if result then return tag elseif lang._is_ietf_tag(language) then return language end return 'mis' -- use language code "mis" for any unrecognized language end function r.langcode(frame) local args = getArgs(frame) return r._langcode(args.language) end -- Implements [[Template:R/where]] sub-template -- Only for template/module use: |plural=pages |singular=page |location=in-source-location |spacing=character -- |pluralleadin=pp |singularleadin=p |leadin= function r._where(params) local out = setmetatable({}, mt) if notblank(params.plural) then if notblank(params.pluralleadin) and notblank(params.singularleadin) then out(tonumber(params.plural) and (params.singularleadin) or (params.pluralleadin)) out("." .. (params.spacing or "")) end out(params.plural) if notblank(params.singular) then out("," .. (params.spacing or "") .. "[" .. params.singular .. "]") end elseif notblank(params.singular) then if notblank(params.singularleadin) then out(params.singularleadin) out("." .. (params.spacing or "")) end out(params.singular) end if notblank(params.location) then if notblank(params.plural) or notblank(params.singular) then out("," .. (params.spacing or "")) end if(params.leadin) then out(params.leadin .. (params.spacing or "")) end out(params.location) end return table.concat(out) end function r.where(frame) return r._where(getArgs(frame)) end -- Implements [[Template:R/superscript]] -- Only for template/module use: |wrap=n[o]/y[es]/f[orced] |leadin=value |prefix=value |pp=value |where=value |sup-where=value |quote-where=value |quote=value |language=value |translation=value |suffix=value function r._superscript(params) if not params or isblank(params.where) then return "" end local out = setmetatable({}, mt) -- "wrap" if wrap is "yes", "y", "f" or "forced", else "nowrap" local wrap = wrapTest[string.ulower(params.wrap or '')] out('<sup class="reference ' .. (wrap and "" or "no") .. 'wrap">') --prefix, if there's a quote if notblank(params.quote) and notblank(params.prefix) then out(params.prefix) end -- open tooltip span out('<span title="') -- Lead-in text (escaped) local whereText = notblank(params["quote-where"]) and params["quote-where"] or (params["where"] or "") local tooltipText = plainText((params.leadin or "") .. ": " .. whereText, false) out(mw.text.encode(tooltipText, '<>"')) -- Quotation block if present if notblank(params.quote) then local quoteTab = setmetatable({}, mt) if notblank(params.language) then local langText = lang._is_ietf_tag(params.language) and lang._name_from_tag{params.language} or params.language quoteTab("&#32;(" .. langText .. ")") end quoteTab("&#58; &quot;" .. trim_quotes(params.quote) .. "&quot;") if notblank(params.translation) then quoteTab("&#10;Translation: &quot;" .. trim_quotes(params.translation) .. "&quot;") end local quoteText = plainText(table.concat(quoteTab), false) out("&#10;Quotation" .. mw.text.encode(quoteText, '<>"') .. '" class="tooltip tooltip-dashed" style="border-bottom: 1px dashed;') end -- close tooltip span out('">') -- prefix, if not inserted above if (isblank(params.quote)) and notblank(params.prefix) then out(params.prefix) end --pp and sup-where out(params.pp or '') out(params['sup-where'] or '') -- suffix if notblank(params.quote) then out("</span>" .. (params.suffix or "")) else out((params.suffix or "") .. "</span>") end out("</sup>") return table.concat(out) end function r.superscript(frame) return r._superscript(getArgs(frame)) end -- Implements [[Template:R/details]] formatting for the details= field -- Only for template/module use: |where=value |quote-where=value |quote=value |language=value |translation=value |annotation=value |contentId=value |qcli = firstArg(params, 'quote-cite', 'link-id') function r._details(params) if not params or ( isblank(params["where"]) and isblank(params["quote-where"]) and isblank(params["quote"]) and isblank(params["annotation"]) ) then return "" end local out = setmetatable({}, mt) -- process language local langText = "" local langName = "" if notblank(params.language) then langName = lang._is_ietf_tag(params.language) and lang._name_from_tag{params.language} or params.language langText = "&#32;(in " .. langName .. ")" end -- process location local whereText = isblank(params["where"]) and (params["quote-where"] or "") or (params["where"] or "") if isblank(params.annotation) and isblank(params.quote) and notblank(whereText) then out(whereText) end local stripError=false -- Annotation block if present local annotation = mw.text.killMarkers(params.annotation or '') if notblank(annotation) then if annotation ~= params.annotation then stripError=true end annotation = mw.ustring.gsub(mw.text.trim(annotation), "^:", "") if notblank(whereText) then annotation = mw.ustring.gsub(annotation, "^" .. mw.text.decode(whereText) .. ": *", "") out(whereText .. (isblank(params.quote) and langText or "") .. "&#58;&#32;") end out(annotation) if mw.ustring.sub(annotation, -1) ~= "." then out(".") end out("&#32;") end -- Quotation block if present local quote = mw.text.killMarkers(trim_quotes(params.quote or '')) if notblank(quote) then if quote ~= trim_quotes(params.quote or '') then stripError = true end if notblank(params["quote-where"]) then if params["quote-where"] ~= whereText or isblank(annotation) then if params["quote-where"] ~= whereText and isblank(annotation) then out(whereText .. ".&#32;") end out(params["quote-where"] .. langText .. "&#58;&#32;") elseif notblank(langName) then out("In " .. langName .. "&#58;&#32;") end elseif isblank(annotation) and notblank(whereText) then out(whereText .. langText .. "&#58;&#32;") elseif notblank(whereText) and table.concat(out) == whereText then out(langText .. "&#58;&#32;") elseif notblank(langName) then out("In " .. langName .. "&#58;&#32;") end out(make_quote(params, params.contentId, params.qcli, quote)) elseif table.concat(out) == whereText then out(langText .. ".&#32;") end if stripError == true then local errorMsg = ' Nested references and other parser functions that produce [[:mw:Strip_marker|strip markers]] are not supported in quotes or annotations when using sub-referencing.' mw.addWarning('<span style="color:#d33">Error in citation using {{tl|R}}:</span>' .. errorMsg) out('<span class="cs1-visible-error citation-comment template-r-error">' .. errorMsg .. '</span>') end return table.concat(out) end function r.details(frame) return r._details(getArgs(frame)) end -- Implements [[Template:R/ref]] function r._ref(params, frame) frame = frame or mw.getCurrentFrame() local out = setmetatable({}, mt) local contextSectionName = mw.uri.anchorEncode( 'cite_sect-' .. trim_quotes(params[1] or '') .. '-' .. trim_quotes(params[2] or '') .. '-' .. trim_quotes( (notblank(params.page) and params.page or hyphen2dash(params.pages or '', ' ')) .. (params.location or '') ) ) local contentId = notblank(params['content-id']) and mw.uri.anchorEncode(params['content-id']) or nil local whereArgs = { plural = hyphen2dash(params.pages, ' '), singular = params.page, location = params.location, spacing = '&#32;' } local quoteWhereArgs = { plural = hyphen2dash(params['quote-pages'], ' '), singular = params['quote-page'], location = params['quote-location'], spacing = '&#32;' } local refArgs = {name = params[1] or '', group = params[2] or ''} local leadin = params.leadin or '' local quote = trim_quotes(params.quote or '') local quotePage = firstArg(params, 'quote-pages', 'quote-page', 'quote-location') local qcli = firstArg(params, 'quote-cite', 'link-id') -- Whether or not to use subreferencing. Set to default for now, but this should changed when moved to enwiki local subreferencing = ({sub = 1, subreference = 1, ['sub-reference']=1})[string.ulower(params.style or '')] == 1 -- Debug facility if notblank(params.debug) then out("DEBUG: ") for k, v in pairs(params) do out(k .. "=" .. (v or '') .. ", ") end out(". Potential context-section-name:") out(contextSectionName .. '".') end -- Opening "support context" span local lst if notblank(params.section) then local section = (params.section == 'yes' or params.section == 'y') and contextSectionName or params.section lst = frame:callParserFunction('#lst', { mw.title.getCurrentTitle().fullText, section }) if notblank(lst) then out(frame:extensionTag('templatestyles', '', {src='Template:Tooltip/styles.css'})) out('<span class="rt-commentedText tooltip tooltip-dotted"' .. 'title="Context: &quot;' .. mw.text.encode(plainText(lst, false), '<>"') .. '&quot;">') end end --First call to create reference link (variants identical except for dir): if notblank(params['link-id']) then out('<span id="' .. mw.uri.anchorEncode(params['link-id']) .. 'class="citation">') end local refContent = setmetatable({}, mt) if (isblank(params.annotation)) then if contentId then refContent('<span id="' .. contentId .. '" class="citation">') refContent(params.reference or '') refContent('</span>') else refContent(params.reference or '') end refContent(params.postscript or '') end if notblank(params.direction) then refArgs.dir = params.direction end -- Generate details for subreferencing, if enabled if subreferencing and firstArg(params, 'annotation', 'quote', 'page', 'pages', 'location') then local detailsWhereArgs = mw.clone(whereArgs) detailsWhereArgs.singularleadin = "p" detailsWhereArgs.pluralleadin = "pp" local detailsQuoteWhereArgs = mw.clone(quoteWhereArgs) detailsQuoteWhereArgs.singularleadin = "p" detailsQuoteWhereArgs.pluralleadin = "pp" local details=r._details{ where = r._where(detailsWhereArgs), -- where must not include qp params annotation = quoteTest[params.annotation] and '' or (leadin .. (params.annotation or '')), ['quote-where'] = r._where( -- quote-where must not contain normal in-source-location params pageTest[quotePage] and detailsWhereArgs or detailsQuoteWhereArgs ), quote = quote, language = params.language, translation = params.translation, contentId=contentId, qcli = qcli } if notblank(details) then refArgs.details = details end end out(frame:extensionTag('ref', table.concat(refContent), refArgs)) if notblank(params['link-id']) then out('</span>') end if not subreferencing then --Optional second call to append data to reference (variants identical except for dir): if notblank(params.annotation) then refContent = setmetatable({}, mt) if pageTest[params.annotation] then if notblank(firstArg(params, 'pages', 'page', 'location')) then --refContent('&#8204;') if contentId then refContent('<span id="' .. contentId .. '">') end refContent(leadin) refContent(r._where(whereArgs)) if contentId then refContent('</span>') end end elseif quoteTest[params.annotation] then --refContent('&#8204;') if pageTest[quotePage] then if notblank(firstArg(params, 'pages', 'page', 'location')) then refContent(leadin) refContent(r._where(whereArgs) .. ':&#32;') end elseif notblank(quotePage) then refContent(leadin) refContent(r._where(quoteWhereArgs) .. ':&#32;') end refContent(make_quote(params, contentId, qcli, quote)) elseif contentId then refContent('<span id="' .. contentId .. ' class="citation">' .. leadin .. params.annotation .. '</span>') else refContent(leadin .. params.annotation) end refContent(params.postscript or '') refArgs = {follow = params[1] or '', group = params[2] or ''} if notblank(params.direction) then refArgs.dir = params.direction end if notblank(params.annotation) and params.annotation:sub(1,1) == "#" then local errorMsg = ' Automatic numbering by preceeding the annotation ' .. 'with <code>&num;</code> will not work with the new [[:mw:Parsoid|Parsoid]] ' .. 'parser, and therefore its use is discouraged' mw.addWarning('<span style="color:#085">Maintenance messages for citation using {{tl|R}}:</span>' .. errorMsg .. '; messages may be hidden ([[Help:CS1_errors#Controlling_error_message_display|help]]).') refContent('<span class="cs1-maint citation-comment template-r-error">' .. errorMsg .. '.</span>') end out(frame:extensionTag('ref', table.concat(refContent), refArgs)) end --Superscript pages and tooltip for help, pages, quotes: local ssAma = string.ulower(params.style or '') == 'ama' -- p/pp is only used in superscript label, therefore it does not contain any qp params local ssPp = '' if ssAma and (isblank(params['no-pp'])) then if notblank(params.pages) then ssPp = 'pp' elseif notblank(params.page) then ssPp = 'p' end end -- leadin is only used in tooltip local ssLeadin = 'Page&nbsp;/ location' if pageTest[quotePage] then if notblank(params.pages) then ssLeadin = 'Pages' elseif notblank(params.page) then ssLeadin = 'Page' elseif notblank(params.location) then ssLeadin = 'Location' end elseif notblank(params['quote-pages']) then ssLeadin = 'Pages' elseif notblank(params['quote-page']) then ssLeadin = 'Page' elseif notblank(params['quote-location']) then ssLeadin = 'Location' end out(r._superscript{ prefix = ssAma and '(' or '&#58;&hairsp;', suffix = ssAma and ')' or '&hairsp;', pp = ssPp, leadin = ssLeadin, where = r._where(whereArgs), -- where must not include qp params ['sup-where'] = r._where{ -- sup-where same as where, but with improved list spacing for superscript plural = hyphen2dash(params.pages, '&hairsp;'), singular = params.page, location = params.location, spacing='&hairsp;' }, ['quote-where'] = r._where(pageTest[quotePage] and whereArgs or quoteWhereArgs), quote = quote, language = params.language, translation = params.translation, ['wrap'] = params['wrap'] }) end -- Closing "support context" span: if notblank(params.section) and notblank(lst) then out('</span>') end -- Page needed functionality: if notblank(params['needed-reason']) then local pnReason = ({yes = 1, y = 1})[params['needed-reason']] and 'No reason given' or params['needed-reason'] out(page_needed(frame, params['needed-date'], pnReason)) end -- Line wrapping functionality: if wrapTest[string.ulower(params.wrap or '')] then out("&#8203;") --zero-width space end -- Tracking category for nested references if (notblank(params.quote) and params.quote ~= mw.text.killMarkers(params.quote or '')) or (notblank(params.annotation) and params.annotation ~= mw.text.killMarkers(params.annotation or '')) then out('[[Category:Pages using Template:R with nested references]]') end --End of code return table.concat(out) end function r.ref(frame) return r._ref(getArgs(frame), frame) end function r._r(args, frame) frame = frame or mw.getCurrentFrame() local output = setmetatable({}, mt) output(frame:extensionTag('templatestyles', '', {src='Module:Citation/CS1/styles.css'})) -- ### 1 ### output(r._ref({ [1] = firstArg(args, 'name1', 'name', 'n1', 'n', 1), [2] = firstArg(args, 'group', 'grp', 'g'), direction = firstArg(args, 'direction1', 'direction', 'dir1', 'dir'), page = firstArg(args, 'page1', 'page', 'p1', '1p', 'p'), pages = firstArg(args, 'pages1', 'pages', 'pp1', '1pp', 'pp'), location = firstArg(args, 'location1', 'location', 'loc1', '1loc', 'loc', 'at1', 'at'), ['quote-page'] = firstArg(args, 'quotation-page1', 'quotation-page', 'quote-page1', 'quote-page', 'qp1', 'qp'), ['quote-pages'] = firstArg(args, 'quotation-pages1', 'quotation-pages', 'quote-pages1', 'quote-pages', 'qpp1', 'qpp'), ['quote-location'] = firstArg(args, 'quotation-location1', 'quotation-location', 'quote-location1', 'quote-location', 'quote-loc1', 'quote-loc', 'quote-at1', 'quote-at' ), quote = firstArg(args, 'quotation1', 'quotation', 'quote1', 'quote', 'q1', 'q'), language = firstArg(args, 'quotation-language1', 'quotation-language', 'quote-language1', 'quote-language', 'quotation-lang1', 'quotation-lang', 'quote-lang1', 'quote-lang', 'ql1', 'ql', 'language1', 'language', 'lang1', 'language', 'l1', 'l' ), translation = firstArg(args, 'translation-quotation1', 'translation-quotation', 'trans-quotation1', 'trans-quotation', 'translation-quote1', 'translation-quote', 'trans-quote1', 'trans-quote', 'tq1', 'tq', 'translation1', 'translation', 'trans1', 'trans', 't1', 't', 'xlat1', 'xlat' ), ['quote-cite'] = firstArg(args, 'quotation-cite1', 'quotation-cite', 'quote-cite1', 'quote-cite', 'qc1', 'qc'), reference = firstArg(args, 'reference1', 'references', 'reference', 'notes', 'note', 'content', 'text', 'refn1', 'refn', 'refs', 'r1', 'r' ), annotation = firstArg(args, 'annotation1', 'annotation', 'annot1', 'annot', 'a1', 'a'), leadin = args.leadin, postscript = firstArg(args, 'postscript', 'postscript1', 'ps', 'ps1', '1ps'), section = firstArg(args, 'section1', 'section', 'sec1', 'sec', 's1', 's'), ['needed-reason'] = firstArg(args, 'needed-reason1', 'needed-reason', 'needed1', 'needed', 'reason'), ['needed-date'] = firstArg(args, 'needed-date', 'date'), wrap = args.wrap, ['no-pp'] = firstArg(args, 'no-pp', 'nopp'), style = args.style, ['content-id'] = firstArg(args, 'ref1', '1ref', 'ref', 'id1', 'id'), ['link-id'] = firstArg(args, 'link-id1', 'link-id'), ['debug'] = args['debug'] }, frame)) -- ### 2+ ### local n = 2 while firstArg(args, "name" .. n, "n" .. n, n) ~= nil do output(r._ref({ [1] = firstArg(args, 'name' .. n, 'n' .. n, n), [2] = firstArg(args, 'group', 'grp', 'g'), direction = firstArgN(n, args, 'direction', 'dir'), page = firstArg(args, 'page' .. n, 'p' .. n, n .. 'p'), pages = firstArg(args, 'pages' .. n, 'pp' .. n, n .. 'pp'), location = firstArg(args, 'location' .. n, 'loc' .. n, n .. 'loc', 'at' .. n), ['quote-page'] = firstArgN(n, args, 'quotation-page', 'quote-page', 'qp'), ['quote-pages'] = firstArgN(n, args, 'quotation-pages', 'quote-pages', 'qpp'), ['quote-location'] = firstArgN(n, args, 'quotation-location', 'quote-location', 'quote-loc', 'quote-at'), quote = firstArgN(n, args, 'quotation', 'quote', 'q'), language = firstArgN(n, args, 'quotation-language', 'quote-language', 'quotation-lang', 'quote-lang', 'ql', 'language', 'lang', 'l' ), translation = firstArgN(n, args, 'translation-quotation', 'trans-quotation', 'translation-quote', 'trans-quote', 'tq', 'translation', 'trans', 't', 'xlat' ), ['quote-cite'] = firstArgN(n, args, 'quotation-cite', 'quote-cite', 'qc'), reference = firstArgN(n, args, 'reference', 'refn', 'r'), annotation = firstArgN(n, args, 'annotation', 'annot', 'a'), leadin = args.leadin, postscript = firstArg(args, 'postscript' .. n, 'ps' .. n, n .. 'ps', 'postscript', 'ps'), section = firstArgN(n, args, 'section', 'sec', 's'), ['needed-reason'] = firstArgN(n, args, 'needed-reason', 'needed'), ['needed-date'] = firstArg(args, 'needed-date', 'date'), ['wrap'] = args['wrap'], ['no-pp'] = firstArg(args, 'no-pp', 'nopp'), style = args.style, ['content-id'] = firstArg(args, 'ref' .. n, n .. 'ref', 'id' .. n), ['link-id'] = args['link-id' .. n], ['debug'] = args['debug'], }, frame)) n = n + 1 end local outputText = table.concat(output) local errorText = outputText:find('template-r-error', 1, true) and '[[Category:Pages with errors in Template:R]]' or '' return (outputText .. errorText) end function r.r(frame) return r._r(getArgs(frame), frame) end -- Implements [[Template:Rp]] function rp._rp(args, frame) frame = frame or mw.getCurrentFrame() -- If needed param is present and non-empty, show {{page needed}} if notblank(args.needed) then return page_needed(frame, args.date, args.reason) end -- prefix/suffix depending on style local ama = string.ulower(args.style or "") == "ama" local prefix = ama and "(" or "&#58;&hairsp;" local suffix = ama and ")" or "&hairsp;" -- p/pp is only used in superscript label, therefore it does not contain any qp params local pp = "" if ama and isblank(args["no-pp"]) and isblank(args.nopp) then if notblank(args.pages) or notblank(args.pp) then pp = "pp" elseif notblank(args.page) or notblank(args.p) then pp = "p" end end -- leadin is only used in tooltip local leadin local quote_switch = firstArg(args, "quotation-pages", "quote-pages", "qpp", "quotation-page", "quote-page", "qp", "quotation-location", "quote-location", "quote-loc", "quote-at") if not pageTest[quote_switch] then if notblank(firstArg(args, "quotation-pages", "quote-pages", "qpp")) then leadin = "Pages" elseif notblank(firstArg(args, "quotation-page", "quote-page", "qp")) then leadin = "Page" elseif notblank(firstArg(args, "quotation-location", "quote-location", "quote-loc", "quote-at")) then leadin = "Location" end end if not leadin then --either the quote_switch wasn't 'pages', 'pp', 'page', -- or 'p', or the 'quotation' params were all blank/nil if notblank(firstArg(args, "pages", "pp")) then leadin = "Pages" elseif notblank(firstArg(args, "page", "p")) then leadin = "Page" elseif notblank(firstArg(args, "location", "loc", "at")) then leadin = "Location" else leadin = "Page&nbsp;/ location" end end -- where must not include qp params local where = r._where{ plural = hyphen2dash(firstArg(args, "pages", "pp", "1"), '&#32;'), singular = firstArg(args, "page", "p"), location = firstArg(args, "location", "loc", "at"), spacing = "&#32;" } -- sup-where same as where, but with improved list spacing for superscript local sup_where = r._where{ plural = hyphen2dash(firstArg(args, "pages", "pp", "1"), '&hairsp;'), singular = firstArg(args, "page", "p"), location = firstArg(args, "location", "loc", "at"), spacing = "&hairsp;" } -- quote-where must not contain normal in-source-location params local quote_where if pageTest[quote_switch] then quote_where = r._where{ plural = hyphen2dash(firstArg(args, "pages", "pp", 1), ' '), singular = firstArg(args, "page", "p"), location = firstArg(args, "location", "loc", "at"), spacing = "&#32;" } else quote_where = r._where{ plural = hyphen2dash(firstArg(args, "quotation-pages", "quote-pages", "qpp"), ' '), singular = firstArg(args, "quotation-page", "quote-page", "qp"), location = firstArg(args, "quotation-location", "quote-location", "quote-loc", "quote-at"), spacing = "&#32;" } end local zws = "" if wrapTest[string.ulower(args.wrap or '')] then zws = "&#8203;" --zero-width space end return r._superscript{ prefix = prefix, suffix = suffix, pp = pp, leadin = leadin, ["where"] = where, ["sup-where"] = sup_where, ["quote-where"] = quote_where, quote = firstArg(args, "quotation", "quote", "q"), language = firstArg(args, "quotation-language", "quote-language", "quotation-lang", "quote-lang", "ql", "language", "lang", "l"), translation = firstArg(args, "translation-quotation", "trans-quotation", "translation-quote", "trans-quote", "tq", "translation", "trans", "t", "xlat"), ["wrap"] = args.wrap } .. zws end function rp.rp(frame) return rp._rp(getArgs(frame), frame) end return { [''] = r.r, r = r.r, _r = r._r, rp = rp.rp, _rp = rp._rp, ref = r.ref, _ref = r._ref, where = r.where, _where = r._where, details = r.details, _details = r._details, langcode = r.langcode, _langcode = r._langcode, superscript = r.superscript, _superscript = r._superscript } f6jesd4755x8ezmji2s8s3jq6fz9tt1 ವಿಕಿಪೀಡಿಯ:ತುಳುವೆರೆ ಬದ್‌ಕ್ ಬುಕ್ಕೊ ಸಾಂಸ್ಕೃತಿಕ ಪರಂಪರೆ/ಪಾಲ್ ದೆತೊನುನಕುಲು 4 29028 373836 373749 2026-10-28T00:45:31Z Mahaveer Indra 1023 /* */ 373836 wikitext text/x-wiki ''ನಿಕ್ಲೆಗ್ ಲೇಕನೊ ಮಲ್ಪೆರೆ ಇಚ್ಚೆ ಇತ್ತ್ಂಡ ಮುಲ್ಪ ತಿರ್ತ್ '''<nowiki># ~~~~</nowiki>''' ಇಂಚ ದಸ್ಕತ್ ಪಾಡ್ಲೆ.'' #--[[ಬಳಕೆದಾರೆ:Vishwanatha Badikana|Vishwanatha Badikana]] ([[ಬಳಕೆದಾರೆ ಪಾತೆರ:Vishwanatha Badikana|ಪಾತೆರ್ಲೆ]]) 12:51, 21 ಅಕ್ಟೋಬರ್ 2026 (IST) # [[ಬಳಕೆದಾರೆ:ChiK|ChiK]] ([[ಬಳಕೆದಾರೆ ಪಾತೆರ:ChiK|ಪಾತೆರ್ಲೆ]]) 15:19, 24 ಅಕ್ಟೋಬರ್ 2026 (IST) # [[ಬಳಕೆದಾರೆ:Mahaveer Indra|Mahaveer Indra]] ([[ಬಳಕೆದಾರೆ ಪಾತೆರ:Mahaveer Indra|ಪಾತೆರ್ಲೆ]]) 06:15, 28 ಅಕ್ಟೋಬರ್ 2026 (IST) 50284c7u65wmolpr3prsagnk1cvadxt ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ 0 29106 373837 2026-10-28T04:13:20Z Mahaveer Indra 1023 ಪೊಸ ಬರವು 373837 wikitext text/x-wiki ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ದಕ್ಷಿಣ ಕನ್ನಡ ಜಿಲ್ಲೆದ ಕುಡ್ಲಡ್, ಪೇಂಟೆದ ನಡುಟು ಉಪ್ಪುನ ಒಂಜಿ ಪ್ರಮುಖವಾಯಿನ ಮಲ್ಲ ಮೈದಾನ. ಕುಡ್ಲದ ಗ್ರಾಮ ದೇವತೆ ಮಂಗಳಾದೇವಿನ ಪುದರ್‌ನ್ ಈ ಕ್ರೀಡಾಂಗಣಗ್ ದೀತೆರ್. ಈ ಮೈದಾನ ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ ಬೊಕ್ಕ ಕರ್ನಾಟಕ ರಾಜ್ಯದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆದ ಆಡಳಿತದ ಅಡಿಟ್ ಬರ್ಪುಂಡು. ಕರಾವಳಿ ಭಾಗದ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ಶಾಲೆ ಕಾಲೇಜಿದ ಜೋಕುಲೆಗ್ ಈ ಮೈದಾನ ಒಂಜಿ ಮುಖ್ಯವಾಯಿನ ತರಬೇತಿ ಕೇಂದ್ರ ಆದುಂಡು. cjk9tkt6mx6xpy6nd6q1de4rtnibt54 373838 373837 2026-10-28T04:18:14Z Mahaveer Indra 1023 373838 wikitext text/x-wiki ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ದಕ್ಷಿಣ ಕನ್ನಡ ಜಿಲ್ಲೆದ ಕುಡ್ಲಡ್, ಪೇಂಟೆದ ನಡುಟು ಉಪ್ಪುನ ಒಂಜಿ ಪ್ರಮುಖವಾಯಿನ ಮಲ್ಲ ಮೈದಾನ. ಕುಡ್ಲದ ಗ್ರಾಮ ದೇವತೆ ಮಂಗಳಾದೇವಿನ ಪುದರ್‌ನ್ ಈ ಕ್ರೀಡಾಂಗಣಗ್ ದೀತೆರ್. ಈ ಮೈದಾನ ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ ಬೊಕ್ಕ ಕರ್ನಾಟಕ ರಾಜ್ಯದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆದ ಆಡಳಿತದ ಅಡಿಟ್ ಬರ್ಪುಂಡು. ಕರಾವಳಿ ಭಾಗದ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ಶಾಲೆ ಕಾಲೇಜಿದ ಜೋಕುಲೆಗ್ ಈ ಮೈದಾನ ಒಂಜಿ ಮುಖ್ಯವಾಯಿನ ತರಬೇತಿ ಕೇಂದ್ರ ಆದುಂಡು.<ref>{{cite web |title=Mangala Stadium |url=https://manipalblog.com/mangala-stadium/ |website=manipalblog.com |publisher=ManipalBlog.com |access-date=28 October 2026}}</ref> ==ಇತಿಹಾಸೊ== ==ವ್ಯವಸ್ತೆಲು== ==ಉಲ್ಲೇಕ== {{reflist}} 5sghs0sxsg5j8wh3ctko7d7h9y2405h 373839 373838 2026-10-28T04:40:29Z Mahaveer Indra 1023 /* ಇತಿಹಾಸೊ */ 373839 wikitext text/x-wiki ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ದಕ್ಷಿಣ ಕನ್ನಡ ಜಿಲ್ಲೆದ ಕುಡ್ಲಡ್, ಪೇಂಟೆದ ನಡುಟು ಉಪ್ಪುನ ಒಂಜಿ ಪ್ರಮುಖವಾಯಿನ ಮಲ್ಲ ಮೈದಾನ. ಕುಡ್ಲದ ಗ್ರಾಮ ದೇವತೆ ಮಂಗಳಾದೇವಿನ ಪುದರ್‌ನ್ ಈ ಕ್ರೀಡಾಂಗಣಗ್ ದೀತೆರ್. ಈ ಮೈದಾನ ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ ಬೊಕ್ಕ ಕರ್ನಾಟಕ ರಾಜ್ಯದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆದ ಆಡಳಿತದ ಅಡಿಟ್ ಬರ್ಪುಂಡು. ಕರಾವಳಿ ಭಾಗದ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ಶಾಲೆ ಕಾಲೇಜಿದ ಜೋಕುಲೆಗ್ ಈ ಮೈದಾನ ಒಂಜಿ ಮುಖ್ಯವಾಯಿನ ತರಬೇತಿ ಕೇಂದ್ರ ಆದುಂಡು.<ref>{{cite web |title=Mangala Stadium |url=https://manipalblog.com/mangala-stadium/ |website=manipalblog.com |publisher=ManipalBlog.com |access-date=28 October 2026}}</ref> ==ಇತಿಹಾಸೊ== ಇತ್ತೆ ಇಪ್ಪುನ ಮಲ್ಲ ಮೈದಾನ ದುಂಬು ಎಲ್ಯಡ್ ಇತ್ತ್ಂಡ್. ಐಕ್ ಮಣ್ಣಗುಡ್ಡ ಮೈದಾನ ಪಂದ್ ಪುದರ್ ಇತ್ತ್ಂಡ್. ೧೯೯೫ನೇ ಇಸವಿಡ್ ಇಂದೆನ್ ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ಪಂದ್ ಪುದರ್ ದೀಯೆರ್, ಅತ್ತಂದೆ ಬೇತೆ ಬೇತೆ ರೀತಿದ ಆಟ ಕೂಟೊಲು ನಡಪರ ಸುರು ಆಂಡ್.<ref>{{cite web |title=ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ೨ ತಿಂಗಳು ಬಂದ್ |url=https://udayavani.com/dakshina-kannada-news/mangaluru-mangala-stadium-closed-for-2-months-446890?lang=kn |website=udayavani.com |publisher=udayavani |access-date=28 October 2026}}</ref> ==ವ್ಯವಸ್ತೆಲು== ==ಉಲ್ಲೇಕ== {{reflist}} i61fnw06674fxba58crv2elfnl3wbh1 373840 373839 2026-10-28T04:50:04Z Mahaveer Indra 1023 /* ಇತಿಹಾಸೊ */ 373840 wikitext text/x-wiki ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ದಕ್ಷಿಣ ಕನ್ನಡ ಜಿಲ್ಲೆದ ಕುಡ್ಲಡ್, ಪೇಂಟೆದ ನಡುಟು ಉಪ್ಪುನ ಒಂಜಿ ಪ್ರಮುಖವಾಯಿನ ಮಲ್ಲ ಮೈದಾನ. ಕುಡ್ಲದ ಗ್ರಾಮ ದೇವತೆ ಮಂಗಳಾದೇವಿನ ಪುದರ್‌ನ್ ಈ ಕ್ರೀಡಾಂಗಣಗ್ ದೀತೆರ್. ಈ ಮೈದಾನ ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ ಬೊಕ್ಕ ಕರ್ನಾಟಕ ರಾಜ್ಯದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆದ ಆಡಳಿತದ ಅಡಿಟ್ ಬರ್ಪುಂಡು. ಕರಾವಳಿ ಭಾಗದ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ಶಾಲೆ ಕಾಲೇಜಿದ ಜೋಕುಲೆಗ್ ಈ ಮೈದಾನ ಒಂಜಿ ಮುಖ್ಯವಾಯಿನ ತರಬೇತಿ ಕೇಂದ್ರ ಆದುಂಡು.<ref>{{cite web |title=Mangala Stadium |url=https://manipalblog.com/mangala-stadium/ |website=manipalblog.com |publisher=ManipalBlog.com |access-date=28 October 2026}}</ref> ==ಇತಿಹಾಸೊ== ಇತ್ತೆ ಇಪ್ಪುನ ಮಲ್ಲ ಮೈದಾನ ದುಂಬು ಎಲ್ಯಡ್ ಇತ್ತ್ಂಡ್. ಐಕ್ ಮಣ್ಣಗುಡ್ಡ ಮೈದಾನ ಪಂದ್ ಪುದರ್ ಇತ್ತ್ಂಡ್. ೧೯೯೫ನೇ ಇಸವಿಡ್ ಇಂದೆನ್ ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ಪಂದ್ ಪುದರ್ ದೀಯೆರ್, ಅತ್ತಂದೆ ಬೇತೆ ಬೇತೆ ರೀತಿದ ಆಟ ಕೂಟೊಲು ನಡಪರ ಸುರು ಆಂಡ್.<ref>{{cite web |title=ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ೨ ತಿಂಗಳು ಬಂದ್ |url=https://udayavani.com/dakshina-kannada-news/mangaluru-mangala-stadium-closed-for-2-months-446890?lang=kn |website=udayavani.com |publisher=udayavani |access-date=28 October 2026}}</ref> ಸುರುಕು ಮುಲ್ಪ ಮಣ್ಣ್‌ದ ಓಟದ ಟ್ರ್ಯಾಕ್ ಇತ್ತ್ಂಡ್. ಕ್ರೀಡಾಪಟುಕುಲೆನ ಮಸ್ತ್ ವರ್ಷದ ಬೇಡಿಕೆದ ಪ್ರಕಾರ ೨೦೧೩ನೇ ಇಸವಿಡ್ ಕ್ರೀಡಾಂಗಣಗ್ ೪೦೦ ಮೀಟರ್‌ದ ಪೊಸ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್‌ನ್ ಉದ್ಘಾಟನೆ ಮಲ್ತೆರ್. ==ವ್ಯವಸ್ತೆಲು== ==ಉಲ್ಲೇಕ== {{reflist}} 9wkuvy23cw5umd5ffkmhczt0k2ufbyq 373841 373840 2026-10-28T05:11:23Z Mahaveer Indra 1023 /* ವ್ಯವಸ್ತೆಲು */ 373841 wikitext text/x-wiki ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ದಕ್ಷಿಣ ಕನ್ನಡ ಜಿಲ್ಲೆದ ಕುಡ್ಲಡ್, ಪೇಂಟೆದ ನಡುಟು ಉಪ್ಪುನ ಒಂಜಿ ಪ್ರಮುಖವಾಯಿನ ಮಲ್ಲ ಮೈದಾನ. ಕುಡ್ಲದ ಗ್ರಾಮ ದೇವತೆ ಮಂಗಳಾದೇವಿನ ಪುದರ್‌ನ್ ಈ ಕ್ರೀಡಾಂಗಣಗ್ ದೀತೆರ್. ಈ ಮೈದಾನ ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ ಬೊಕ್ಕ ಕರ್ನಾಟಕ ರಾಜ್ಯದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆದ ಆಡಳಿತದ ಅಡಿಟ್ ಬರ್ಪುಂಡು. ಕರಾವಳಿ ಭಾಗದ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ಶಾಲೆ ಕಾಲೇಜಿದ ಜೋಕುಲೆಗ್ ಈ ಮೈದಾನ ಒಂಜಿ ಮುಖ್ಯವಾಯಿನ ತರಬೇತಿ ಕೇಂದ್ರ ಆದುಂಡು.<ref>{{cite web |title=Mangala Stadium |url=https://manipalblog.com/mangala-stadium/ |website=manipalblog.com |publisher=ManipalBlog.com |access-date=28 October 2026}}</ref> ==ಇತಿಹಾಸೊ== ಇತ್ತೆ ಇಪ್ಪುನ ಮಲ್ಲ ಮೈದಾನ ದುಂಬು ಎಲ್ಯಡ್ ಇತ್ತ್ಂಡ್. ಐಕ್ ಮಣ್ಣಗುಡ್ಡ ಮೈದಾನ ಪಂದ್ ಪುದರ್ ಇತ್ತ್ಂಡ್. ೧೯೯೫ನೇ ಇಸವಿಡ್ ಇಂದೆನ್ ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ಪಂದ್ ಪುದರ್ ದೀಯೆರ್, ಅತ್ತಂದೆ ಬೇತೆ ಬೇತೆ ರೀತಿದ ಆಟ ಕೂಟೊಲು ನಡಪರ ಸುರು ಆಂಡ್.<ref>{{cite web |title=ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ೨ ತಿಂಗಳು ಬಂದ್ |url=https://udayavani.com/dakshina-kannada-news/mangaluru-mangala-stadium-closed-for-2-months-446890?lang=kn |website=udayavani.com |publisher=udayavani |access-date=28 October 2026}}</ref> ಸುರುಕು ಮುಲ್ಪ ಮಣ್ಣ್‌ದ ಓಟದ ಟ್ರ್ಯಾಕ್ ಇತ್ತ್ಂಡ್. ಕ್ರೀಡಾಪಟುಕುಲೆನ ಮಸ್ತ್ ವರ್ಷದ ಬೇಡಿಕೆದ ಪ್ರಕಾರ ೨೦೧೩ನೇ ಇಸವಿಡ್ ಕ್ರೀಡಾಂಗಣಗ್ ೪೦೦ ಮೀಟರ್‌ದ ಪೊಸ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್‌ನ್ ಉದ್ಘಾಟನೆ ಮಲ್ತೆರ್. ==ವ್ಯವಸ್ತೆಲು== ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣೊಡು ಕ್ರೀಡಾಪಟುಕ್ಲೆಗ್ ಬೊಕ್ಕ ಸಾರ್ವಜನಿಕೆರೆಗ್ ಸದ್ಯೊಗು ಇಪ್ಪುನ ಸೌಲಭೊಲು ಓಟದ ಟ್ರ್ಯಾಕ್ (Running Track): ಬಲಿಪುನ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ತರಬೇತಿ ಮಲ್ಪೆರೆ ೪೦೦ ಮೀಟರ್‌ದ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್ ಮುಲ್ಪ ಉಂಡು. ಫೀಲ್ಡ್ ಕ್ರೀಡೆಲು (Field Events): ಕ್ರೀಡಾಂಗಣದ ಟ್ರ್ಯಾಕ್ದ ಉಲಾಯಿಡ್ 'ಡಿ-ಏರಿಯಾ' (D-area) ಉಂಡು. ಮುಲ್ಪ ಉದ್ದ ಲಾಗ್ಯುನೆ (Long jump), ಗುಂಡು ಎಸೆತ (Shot put), ಜಾವೆಲಿನ್ ತ್ರೋ (Javelin throw), ಚಕ್ರ ಎಸೆತ (Discus throw) ಬೊಕ್ಕ ಹ್ಯಾಮರ್-ತ್ರೋ ಗೊಬ್ಬುಲೆಗ್ ಪ್ರತ್ಯೇಕ ವ್ಯವಸ್ಥೆ ಉಂಡು. ಈಜುಗೊಳ (Swimming Pool): ಕ್ರೀಡಾಂಗಣದ ಕೈತಲ್ಡ್ ಈಜು ಕಲ್ಪೆರೆ ಬೊಕ್ಕ ಸ್ಪರ್ಧೆಲೆಗ್ ಬೋಡಾದ್ ಈಜುಗೊಳ ಉಂಡು. ಗೊಬ್ಬುದ ಮೈದಾನ: ನಡುಟು ಉಪ್ಪುನ ಪಚ್ಚೆ ಮೈದಾನಡ್ ಫುಟ್ಬಾಲ್ ಬೊಕ್ಕ ಬೇತೆ ಕ್ರೀಡೆಲೆನ್ ಗೊಬ್ಬೊಲಿ. ಗ್ಯಾಲರಿಡ್ ಸಾವಿರಾರು ಜನ ಕುಲ್ಲುನೆಕ್ ಎಡ್ಡೆ ವ್ಯವಸ್ಥೆ ಉಂಡು. ==ಉಲ್ಲೇಕ== {{reflist}} o5kyay37bast940efbhnwdtbyngel22 373843 373841 2026-10-28T05:27:47Z Mahaveer Indra 1023 /* ವ್ಯವಸ್ತೆಲು */ 373843 wikitext text/x-wiki ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ದಕ್ಷಿಣ ಕನ್ನಡ ಜಿಲ್ಲೆದ ಕುಡ್ಲಡ್, ಪೇಂಟೆದ ನಡುಟು ಉಪ್ಪುನ ಒಂಜಿ ಪ್ರಮುಖವಾಯಿನ ಮಲ್ಲ ಮೈದಾನ. ಕುಡ್ಲದ ಗ್ರಾಮ ದೇವತೆ ಮಂಗಳಾದೇವಿನ ಪುದರ್‌ನ್ ಈ ಕ್ರೀಡಾಂಗಣಗ್ ದೀತೆರ್. ಈ ಮೈದಾನ ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ ಬೊಕ್ಕ ಕರ್ನಾಟಕ ರಾಜ್ಯದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆದ ಆಡಳಿತದ ಅಡಿಟ್ ಬರ್ಪುಂಡು. ಕರಾವಳಿ ಭಾಗದ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ಶಾಲೆ ಕಾಲೇಜಿದ ಜೋಕುಲೆಗ್ ಈ ಮೈದಾನ ಒಂಜಿ ಮುಖ್ಯವಾಯಿನ ತರಬೇತಿ ಕೇಂದ್ರ ಆದುಂಡು.<ref>{{cite web |title=Mangala Stadium |url=https://manipalblog.com/mangala-stadium/ |website=manipalblog.com |publisher=ManipalBlog.com |access-date=28 October 2026}}</ref> ==ಇತಿಹಾಸೊ== ಇತ್ತೆ ಇಪ್ಪುನ ಮಲ್ಲ ಮೈದಾನ ದುಂಬು ಎಲ್ಯಡ್ ಇತ್ತ್ಂಡ್. ಐಕ್ ಮಣ್ಣಗುಡ್ಡ ಮೈದಾನ ಪಂದ್ ಪುದರ್ ಇತ್ತ್ಂಡ್. ೧೯೯೫ನೇ ಇಸವಿಡ್ ಇಂದೆನ್ ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ಪಂದ್ ಪುದರ್ ದೀಯೆರ್, ಅತ್ತಂದೆ ಬೇತೆ ಬೇತೆ ರೀತಿದ ಆಟ ಕೂಟೊಲು ನಡಪರ ಸುರು ಆಂಡ್.<ref>{{cite web |title=ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ೨ ತಿಂಗಳು ಬಂದ್ |url=https://udayavani.com/dakshina-kannada-news/mangaluru-mangala-stadium-closed-for-2-months-446890?lang=kn |website=udayavani.com |publisher=udayavani |access-date=28 October 2026}}</ref> ಸುರುಕು ಮುಲ್ಪ ಮಣ್ಣ್‌ದ ಓಟದ ಟ್ರ್ಯಾಕ್ ಇತ್ತ್ಂಡ್. ಕ್ರೀಡಾಪಟುಕುಲೆನ ಮಸ್ತ್ ವರ್ಷದ ಬೇಡಿಕೆದ ಪ್ರಕಾರ ೨೦೧೩ನೇ ಇಸವಿಡ್ ಕ್ರೀಡಾಂಗಣಗ್ ೪೦೦ ಮೀಟರ್‌ದ ಪೊಸ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್‌ನ್ ಉದ್ಘಾಟನೆ ಮಲ್ತೆರ್. ==ವ್ಯವಸ್ತೆಲು== ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣೊಡು ಕ್ರೀಡಾಪಟುಕ್ಲೆಗ್ ಬೊಕ್ಕ ಸಾರ್ವಜನಿಕೆರೆಗ್ ಸದ್ಯೊಗು ಇಪ್ಪುನ ಸೌಲಭೊಲು # ಓಟದ ಟ್ರ್ಯಾಕ್- ಬಲಿಪುನ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ತರಬೇತಿ ಮಲ್ಪೆರೆ ೪೦೦ ಮೀಟರ್‌ದ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್ ಮುಲ್ಪ ಉಂಡು. # ಫೀಲ್ಡ್ ಕ್ರೀಡೆಲು - ಕ್ರೀಡಾಂಗಣದ ಉಲಾಯಿಡ್ ಮುಲ್ಪ ಉದ್ದ ಲಾಗಿಯರ, ಗುಂಡು ಎಸೆತ, ಜಾವೆಲಿನ್ ತ್ರೋ, ಚಕ್ರ ಎಸೆತ, ಬೊಕ್ಕ ಹ್ಯಾಮರ್-ತ್ರೋ ಇಂಚಿನ ಗೊಬ್ಬುಲೆಗ್ ಪ್ರತ್ಯೇಕ ವ್ಯವಸ್ಥೆ ಉಂಡು. # ಈಜುಗೊಳ- ಕ್ರೀಡಾಂಗಣದ ಕೈತಲ್ಡ್ ಮೀಂದರ ಕಲ್ಪೆರೆ ಬೊಕ್ಕ ಸ್ಪರ್ಧೆಲೆಗ್ ಬೋಡಾದ್ ಈಜುಗೊಳ ಉಂಡು. # ಗೊಬ್ಬುದ ಮೈದಾನ: ನಡುಟು ಉಪ್ಪುನ ಪಚ್ಚೆ ಮೈದಾನಡ್ ಫುಟ್ಬಾಲ್ ಬೊಕ್ಕ ಬೇತೆ ಕ್ರೀಡೆಲೆನ್ ಗೊಬ್ಬೊಲಿ. # ಗ್ಯಾಲರಿಡ್ ಸಾವಿರಾರು ಜನ ಕುಲ್ಲುನೆಕ್ ಎಡ್ಡೆ ವ್ಯವಸ್ಥೆ ಉಂಡು. ==ಉಲ್ಲೇಕ== {{reflist}} l6mokj6ndlzdp64e9j37o6s6q8gaybu 373844 373843 2026-10-28T05:37:19Z Mahaveer Indra 1023 /* ವ್ಯವಸ್ತೆಲು */ 373844 wikitext text/x-wiki ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ದಕ್ಷಿಣ ಕನ್ನಡ ಜಿಲ್ಲೆದ ಕುಡ್ಲಡ್, ಪೇಂಟೆದ ನಡುಟು ಉಪ್ಪುನ ಒಂಜಿ ಪ್ರಮುಖವಾಯಿನ ಮಲ್ಲ ಮೈದಾನ. ಕುಡ್ಲದ ಗ್ರಾಮ ದೇವತೆ ಮಂಗಳಾದೇವಿನ ಪುದರ್‌ನ್ ಈ ಕ್ರೀಡಾಂಗಣಗ್ ದೀತೆರ್. ಈ ಮೈದಾನ ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ ಬೊಕ್ಕ ಕರ್ನಾಟಕ ರಾಜ್ಯದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆದ ಆಡಳಿತದ ಅಡಿಟ್ ಬರ್ಪುಂಡು. ಕರಾವಳಿ ಭಾಗದ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ಶಾಲೆ ಕಾಲೇಜಿದ ಜೋಕುಲೆಗ್ ಈ ಮೈದಾನ ಒಂಜಿ ಮುಖ್ಯವಾಯಿನ ತರಬೇತಿ ಕೇಂದ್ರ ಆದುಂಡು.<ref>{{cite web |title=Mangala Stadium |url=https://manipalblog.com/mangala-stadium/ |website=manipalblog.com |publisher=ManipalBlog.com |access-date=28 October 2026}}</ref> ==ಇತಿಹಾಸೊ== ಇತ್ತೆ ಇಪ್ಪುನ ಮಲ್ಲ ಮೈದಾನ ದುಂಬು ಎಲ್ಯಡ್ ಇತ್ತ್ಂಡ್. ಐಕ್ ಮಣ್ಣಗುಡ್ಡ ಮೈದಾನ ಪಂದ್ ಪುದರ್ ಇತ್ತ್ಂಡ್. ೧೯೯೫ನೇ ಇಸವಿಡ್ ಇಂದೆನ್ ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ಪಂದ್ ಪುದರ್ ದೀಯೆರ್, ಅತ್ತಂದೆ ಬೇತೆ ಬೇತೆ ರೀತಿದ ಆಟ ಕೂಟೊಲು ನಡಪರ ಸುರು ಆಂಡ್.<ref>{{cite web |title=ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ೨ ತಿಂಗಳು ಬಂದ್ |url=https://udayavani.com/dakshina-kannada-news/mangaluru-mangala-stadium-closed-for-2-months-446890?lang=kn |website=udayavani.com |publisher=udayavani |access-date=28 October 2026}}</ref> ಸುರುಕು ಮುಲ್ಪ ಮಣ್ಣ್‌ದ ಓಟದ ಟ್ರ್ಯಾಕ್ ಇತ್ತ್ಂಡ್. ಕ್ರೀಡಾಪಟುಕುಲೆನ ಮಸ್ತ್ ವರ್ಷದ ಬೇಡಿಕೆದ ಪ್ರಕಾರ ೨೦೧೩ನೇ ಇಸವಿಡ್ ಕ್ರೀಡಾಂಗಣಗ್ ೪೦೦ ಮೀಟರ್‌ದ ಪೊಸ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್‌ನ್ ಉದ್ಘಾಟನೆ ಮಲ್ತೆರ್. ==ವ್ಯವಸ್ತೆಲು== ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣೊಡು ಕ್ರೀಡಾಪಟುಕ್ಲೆಗ್ ಬೊಕ್ಕ ಸಾರ್ವಜನಿಕೆರೆಗ್ ಸದ್ಯೊಗು ಇಪ್ಪುನ ಸೌಲಭೊಲು # ಓಟದ ಟ್ರ್ಯಾಕ್- ಬಲಿಪುನ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ತರಬೇತಿ ಮಲ್ಪೆರೆ ೪೦೦ ಮೀಟರ್‌ದ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್ ಮುಲ್ಪ ಉಂಡು. # ಫೀಲ್ಡ್ ಕ್ರೀಡೆಲು - ಕ್ರೀಡಾಂಗಣದ ಉಲಾಯಿಡ್ ಮುಲ್ಪ ಉದ್ದ ಲಾಗಿಯರ, ಗುಂಡು ಎಸೆತ, ಜಾವೆಲಿನ್ ತ್ರೋ, ಚಕ್ರ ಎಸೆತ, ಬೊಕ್ಕ ಹ್ಯಾಮರ್-ತ್ರೋ ಇಂಚಿನ ಗೊಬ್ಬುಲೆಗ್ ಪ್ರತ್ಯೇಕ ವ್ಯವಸ್ಥೆ ಉಂಡು. # ಈಜುಗೊಳ- ಕ್ರೀಡಾಂಗಣದ ಕೈತಲ್ಡ್ ಮೀಂದರ ಕಲ್ಪೆರೆ ಬೊಕ್ಕ ಸ್ಪರ್ಧೆಲೆಗ್ ಬೋಡಾದ್ ಈಜುಗೊಳ ಉಂಡು. # ಗೊಬ್ಬುದ ಮೈದಾನ: ನಡುಟು ಉಪ್ಪುನ ಪಚ್ಚೆ ಮೈದಾನಡ್ ಫುಟ್ಬಾಲ್ ಬೊಕ್ಕ ಬೇತೆ ಕ್ರೀಡೆಲೆನ್ ಗೊಬ್ಬೊಲಿ. # ಗ್ಯಾಲರಿಡ್ ಸಾವಿರಾರು ಜನ ಕುಲ್ಲುನೆಕ್ ಎಡ್ಡೆ ವ್ಯವಸ್ಥೆ ಉಂಡು. == ದುಂಬಗ್ ನಡಪುನ ಅಬಿವೃದ್ಧಿ ಬೇಲೆಲು== ಕರ್ನಾಟಕ ಸರ್ಕಾರದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಕೆಲು ಜಂಟಿಯಾದ್, ದುಂಬುದ ದಿನೊಟು ಈ ಕ್ರೀಡಾಂಗಣಗ್ ಅಬಿವೃದ್ಧಿ ಮಲ್ಪುನ ಮಲ್ಲ ಯೋಜನೆನ್ ಪಾಡೊಂದೆರ್. ಐತ ಬಗೆಟ್ ಮಾಹಿತಿಲು ೩ ಕೋಟಿ ರೂ. ಅಭಿವೃದ್ಧಿ: ರಾಜ್ಯ ಸರ್ಕಾರ ಬೊಕ್ಕ ಮುಖ್ಯಮಂತ್ರಿ ಸಿದ್ದರಾಮಯ್ಯೆರೆನ ಅನುದಾನದಡಿಟ್ ೩ ಕೋಟಿ ರೂಪಾಯಿ ಖರ್ಚ್ ಮಲ್ತ್‌ದ್ ಮಂಗಳ ಕ್ರೀಡಾಂಗಣದ ನವೀಕರಣ ಬೇಲೆಗ್ ಚಾಲನೆ ಕೊರ್ತೆರ್. ಉಂದೆಕ್ ೩ ಕೋಟಿ ರೂ. ಬಜೆಟ್‌ಡ್ ಮೀಸಲಾತ್ಂಡ್ ಬೊಕ್ಕ ೧.೫ ಕೋಟಿ ರೂ. ಹೆಚ್ಚುವರಿಯಾದ್ ಕೊರ್ತೆರ್.<ref>{{cite web |title=Stadium Development |url=https://www.thehindu.com/news/cities/Mangalore/35-crore-for-mangala-stadium-development/article29747722.ece |website=thehindu.com |publisher=thehindu |access-date=28 October 2026}}</ref> ಪೊಸ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್: ಮುಲ್ಪ ಇತ್ತಿನ ೧೫ ವರ್ಷ ಪರತ್ ಆಯಿನ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್ ಬರ್ಸ ಬೊಕ್ಕ ದೊಂಬುಗು ಹಾಳಾದ್ ಜಾರುನಂಚಿತ್ತ್ಂಡ್. ಅಂಚಾದ್ ಪರತ್ ಟ್ರ್ಯಾಕ್ ದೆತ್ತ್‌ದ್ ಪೊಸತ್ ಪಾಡುನ ಬೇಲೆ ನಡತೊಂದು ಉಂಡು.<ref>{{cite web |title=synthetic Turf |url=https://www.thehindu.com/news/cities/Mangalore/mangala-stadium-is-all-set-to-get-fullfledged-synthetic-turf/article2773967.ece |website=thehindu.com |publisher=thehindu |access-date=28 October 2026}}</ref> ಒಳಚರಂಡಿ ವ್ಯವಸ್ಥೆ (Drainage System): ಕುಡ್ಲಡ್ ಬರ್ಸ ಜಾಸ್ತಿ ಬರ್ಪುನೈರ್ದಾವರ ಮೈದಾನಡ್ ನೀರ್ ಉಂತಂದಿಲೆಕ್ಕ ಬೊಕ್ಕ ಟ್ರ್ಯಾಕ್ ಹಾಳಾವಂದಿಲೆಕ್ಕ ಪೊಸ ವೈಜ್ಞಾನಿಕವಾಯಿನ ಒಳಚರಂಡಿ ವ್ಯವಸ್ಥೆನ್ ನಿರ್ಮಾಣ ಮಲ್ತೊಂದು ಉಲ್ಲೆರ್. ಫೀಲ್ಡ್ ಅಪ್‌ಗ್ರೇಡ್: ಜಾವೆಲಿನ್ ತ್ರೋ, ಶಾಟ್ ಪುಟ್ ಬೊಕ್ಕ ಲಾಂಗ್ ಜಂಪ್ ಜಾಗೆನ್ ರಾಷ್ಟ್ರೀಯ ಮಟ್ಟದ ಸ್ಪರ್ಧೆಗ್ ಬೋಡಾಪಿನಂಚೆನೆ ಉನ್ನತೀಕರಣ ಮಲ್ಪುನ ಯೋಜನೆ ಉಂಡು. ==ಉಲ್ಲೇಕ== {{reflist}} 0i9cqmm6lxyzaf3ikf233i0c8il2zwq 373845 373844 2026-10-28T05:38:35Z Mahaveer Indra 1023 /* ದುಂಬಗ್ ನಡಪುನ ಅಬಿವೃದ್ಧಿ ಬೇಲೆಲು */ 373845 wikitext text/x-wiki ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ದಕ್ಷಿಣ ಕನ್ನಡ ಜಿಲ್ಲೆದ ಕುಡ್ಲಡ್, ಪೇಂಟೆದ ನಡುಟು ಉಪ್ಪುನ ಒಂಜಿ ಪ್ರಮುಖವಾಯಿನ ಮಲ್ಲ ಮೈದಾನ. ಕುಡ್ಲದ ಗ್ರಾಮ ದೇವತೆ ಮಂಗಳಾದೇವಿನ ಪುದರ್‌ನ್ ಈ ಕ್ರೀಡಾಂಗಣಗ್ ದೀತೆರ್. ಈ ಮೈದಾನ ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ ಬೊಕ್ಕ ಕರ್ನಾಟಕ ರಾಜ್ಯದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆದ ಆಡಳಿತದ ಅಡಿಟ್ ಬರ್ಪುಂಡು. ಕರಾವಳಿ ಭಾಗದ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ಶಾಲೆ ಕಾಲೇಜಿದ ಜೋಕುಲೆಗ್ ಈ ಮೈದಾನ ಒಂಜಿ ಮುಖ್ಯವಾಯಿನ ತರಬೇತಿ ಕೇಂದ್ರ ಆದುಂಡು.<ref>{{cite web |title=Mangala Stadium |url=https://manipalblog.com/mangala-stadium/ |website=manipalblog.com |publisher=ManipalBlog.com |access-date=28 October 2026}}</ref> ==ಇತಿಹಾಸೊ== ಇತ್ತೆ ಇಪ್ಪುನ ಮಲ್ಲ ಮೈದಾನ ದುಂಬು ಎಲ್ಯಡ್ ಇತ್ತ್ಂಡ್. ಐಕ್ ಮಣ್ಣಗುಡ್ಡ ಮೈದಾನ ಪಂದ್ ಪುದರ್ ಇತ್ತ್ಂಡ್. ೧೯೯೫ನೇ ಇಸವಿಡ್ ಇಂದೆನ್ ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ಪಂದ್ ಪುದರ್ ದೀಯೆರ್, ಅತ್ತಂದೆ ಬೇತೆ ಬೇತೆ ರೀತಿದ ಆಟ ಕೂಟೊಲು ನಡಪರ ಸುರು ಆಂಡ್.<ref>{{cite web |title=ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ೨ ತಿಂಗಳು ಬಂದ್ |url=https://udayavani.com/dakshina-kannada-news/mangaluru-mangala-stadium-closed-for-2-months-446890?lang=kn |website=udayavani.com |publisher=udayavani |access-date=28 October 2026}}</ref> ಸುರುಕು ಮುಲ್ಪ ಮಣ್ಣ್‌ದ ಓಟದ ಟ್ರ್ಯಾಕ್ ಇತ್ತ್ಂಡ್. ಕ್ರೀಡಾಪಟುಕುಲೆನ ಮಸ್ತ್ ವರ್ಷದ ಬೇಡಿಕೆದ ಪ್ರಕಾರ ೨೦೧೩ನೇ ಇಸವಿಡ್ ಕ್ರೀಡಾಂಗಣಗ್ ೪೦೦ ಮೀಟರ್‌ದ ಪೊಸ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್‌ನ್ ಉದ್ಘಾಟನೆ ಮಲ್ತೆರ್. ==ವ್ಯವಸ್ತೆಲು== ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣೊಡು ಕ್ರೀಡಾಪಟುಕ್ಲೆಗ್ ಬೊಕ್ಕ ಸಾರ್ವಜನಿಕೆರೆಗ್ ಸದ್ಯೊಗು ಇಪ್ಪುನ ಸೌಲಭೊಲು # ಓಟದ ಟ್ರ್ಯಾಕ್- ಬಲಿಪುನ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ತರಬೇತಿ ಮಲ್ಪೆರೆ ೪೦೦ ಮೀಟರ್‌ದ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್ ಮುಲ್ಪ ಉಂಡು. # ಫೀಲ್ಡ್ ಕ್ರೀಡೆಲು - ಕ್ರೀಡಾಂಗಣದ ಉಲಾಯಿಡ್ ಮುಲ್ಪ ಉದ್ದ ಲಾಗಿಯರ, ಗುಂಡು ಎಸೆತ, ಜಾವೆಲಿನ್ ತ್ರೋ, ಚಕ್ರ ಎಸೆತ, ಬೊಕ್ಕ ಹ್ಯಾಮರ್-ತ್ರೋ ಇಂಚಿನ ಗೊಬ್ಬುಲೆಗ್ ಪ್ರತ್ಯೇಕ ವ್ಯವಸ್ಥೆ ಉಂಡು. # ಈಜುಗೊಳ- ಕ್ರೀಡಾಂಗಣದ ಕೈತಲ್ಡ್ ಮೀಂದರ ಕಲ್ಪೆರೆ ಬೊಕ್ಕ ಸ್ಪರ್ಧೆಲೆಗ್ ಬೋಡಾದ್ ಈಜುಗೊಳ ಉಂಡು. # ಗೊಬ್ಬುದ ಮೈದಾನ: ನಡುಟು ಉಪ್ಪುನ ಪಚ್ಚೆ ಮೈದಾನಡ್ ಫುಟ್ಬಾಲ್ ಬೊಕ್ಕ ಬೇತೆ ಕ್ರೀಡೆಲೆನ್ ಗೊಬ್ಬೊಲಿ. # ಗ್ಯಾಲರಿಡ್ ಸಾವಿರಾರು ಜನ ಕುಲ್ಲುನೆಕ್ ಎಡ್ಡೆ ವ್ಯವಸ್ಥೆ ಉಂಡು. == ದುಂಬಗ್ ನಡಪುನ ಅಬಿವೃದ್ಧಿ ಬೇಲೆಲು== ಕರ್ನಾಟಕ ಸರ್ಕಾರದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಕೆಲು ಜಂಟಿಯಾದ್, ದುಂಬುದ ದಿನೊಟು ಈ ಕ್ರೀಡಾಂಗಣಗ್ ಅಬಿವೃದ್ಧಿ ಮಲ್ಪುನ ಮಲ್ಲ ಯೋಜನೆನ್ ಪಾಡೊಂದೆರ್. ಐತ ಬಗೆಟ್ ಮಾಹಿತಿಲು ೩ ಕೋಟಿ ರೂ. ಅಭಿವೃದ್ಧಿ: ರಾಜ್ಯ ಸರ್ಕಾರ ಬೊಕ್ಕ ಮುಖ್ಯಮಂತ್ರಿ ಸಿದ್ದರಾಮಯ್ಯೆರೆನ ಅನುದಾನದಡಿಟ್ ೩ ಕೋಟಿ ರೂಪಾಯಿ ಖರ್ಚ್ ಮಲ್ತ್‌ದ್ ಮಂಗಳ ಕ್ರೀಡಾಂಗಣದ ನವೀಕರಣ ಬೇಲೆಗ್ ಚಾಲನೆ ಕೊರ್ತೆರ್. ಉಂದೆಕ್ ೩ ಕೋಟಿ ರೂ. ಬಜೆಟ್‌ಡ್ ಮೀಸಲಾತ್ಂಡ್ ಬೊಕ್ಕ ೧.೫ ಕೋಟಿ ರೂ. ಹೆಚ್ಚುವರಿಯಾದ್ ಕೊರ್ತೆರ್.<ref>{{cite web |title=Stadium Development |url=https://www.thehindu.com/news/cities/Mangalore/35-crore-for-mangala-stadium-development/article29747722.ece |website=thehindu.com |publisher=thehindu |access-date=28 October 2026}}</ref> ಪೊಸ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್: ಮುಲ್ಪ ಇತ್ತಿನ ೧೫ ವರ್ಷ ಪರತ್ ಆಯಿನ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್ ಬರ್ಸ ಬೊಕ್ಕ ದೊಂಬುಗು ಹಾಳಾದ್ ಜಾರುನಂಚಿತ್ತ್ಂಡ್. ಅಂಚಾದ್ ಪರತ್ ಟ್ರ್ಯಾಕ್ ದೆತ್ತ್‌ದ್ ಪೊಸತ್ ಪಾಡುನ ಬೇಲೆ ನಡತೊಂದು ಉಂಡು.<ref>{{cite web |title=synthetic Turf |url=https://www.thehindu.com/news/cities/Mangalore/mangala-stadium-is-all-set-to-get-fullfledged-synthetic-turf/article2773967.ece |website=thehindu.com |publisher=thehindu |access-date=28 October 2026}}</ref> ಒಳಚರಂಡಿ ವ್ಯವಸ್ಥೆ (Drainage System): ಕುಡ್ಲಡ್ ಬರ್ಸ ಜಾಸ್ತಿ ಬರ್ಪುನೈರ್ದಾವರ ಮೈದಾನಡ್ ನೀರ್ ಉಂತಂದಿಲೆಕ್ಕ ಬೊಕ್ಕ ಟ್ರ್ಯಾಕ್ ಹಾಳಾವಂದಿಲೆಕ್ಕ ಪೊಸ ವೈಜ್ಞಾನಿಕವಾಯಿನ ಒಳಚರಂಡಿ ವ್ಯವಸ್ಥೆನ್ ನಿರ್ಮಾಣ ಮಲ್ತೊಂದು ಉಲ್ಲೆರ್. ಫೀಲ್ಡ್ ಅಪ್‌ಗ್ರೇಡ್: ಜಾವೆಲಿನ್ ತ್ರೋ, ಶಾಟ್ ಪುಟ್ ಬೊಕ್ಕ ಲಾಂಗ್ ಜಂಪ್ ಜಾಗೆನ್ ರಾಷ್ಟ್ರೀಯ ಮಟ್ಟದ ಸ್ಪರ್ಧೆಗ್ ಬೋಡಾಪಿನಂಚೆನೆ ಉನ್ನತೀಕರಣ ಮಲ್ಪುನ ಯೋಜನೆ ಉಂಡು. == ಇಡೆಮುಟ್ಟ ನಡತ್ತಿನ ಮಲ್ಲ ಲೇಸುಲು== ==ಉಲ್ಲೇಕ== {{reflist}} rmz6vdez3x8g3c2t14ebn40b7klklb2 373848 373845 2026-10-28T05:53:41Z ChiK 1136 373848 wikitext text/x-wiki {{Infobox venue | name = ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ | nickname = | image = Near the entrance of Mangala Stadium in Mangalore.jpg | image_caption = ಮಂಗಳೂರುಡುಪ್ಪುನ ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ಬಾಗೆಲ್‌ದ ಕೈತಲ್ | location = [[ಮಂಗಳೂರು]], [[ಕರ್ನಾಟಕ]] | groundbreaking = 2009 | opened = ಅಕ್ಟೋಬರ್ 2011 | owner = [[ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ]] | operator = (ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ) | cost = | architect = | tenants = [[ಕರ್ನಾಟಕ ಕ್ರಿಕೆಟ್ ತಂಡ]] , ([[ಮಂಗಳೂರು ಯುನೈಟೆಡ್]]) <br/> [[ಸೌತ್ ಯುನೈಟೆಡ್ ಎಫ್.ಸಿ.]] ([[South United F.C.]]) (2018-ಇಂಚಿಶಿ / Present) | capacity = 8,000<ref name="capacity">{{Cite news |date=2019-12-20 |title=ಮಂಗಳಾ ಸ್ಟೇಡಿಯಂದ ಸುರೂತ ಹಂತದ ಬೇಲೆಗ್ ಸಿದ್ಧತೆ ಆತ್ಂಡ್ (Stage is set for first phase works of Mangala Stadium) |url=https://timesofindia.indiatimes.com/city/mangaluru/stage-set-for-first-phase-of-redevelopment-of-mangala-stadium/articleshow/72892244.cms |access-date=2026-06-09 |work=The Times of India |issn=0971-8257}}</ref> }} '''ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ''' ದಕ್ಷಿಣ ಕನ್ನಡ ಜಿಲ್ಲೆದ ಕುಡ್ಲಡ್, ಪೇಂಟೆದ ನಡುಟು ಉಪ್ಪುನ ಒಂಜಿ ಪ್ರಮುಖವಾಯಿನ ಮಲ್ಲ ಮೈದಾನ. ಕುಡ್ಲದ ಗ್ರಾಮ ದೇವತೆ ಮಂಗಳಾದೇವಿನ ಪುದರ್‌ನ್ ಈ ಕ್ರೀಡಾಂಗಣಗ್ ದೀತೆರ್. ಈ ಮೈದಾನ ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ ಬೊಕ್ಕ ಕರ್ನಾಟಕ ರಾಜ್ಯದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆದ ಆಡಳಿತದ ಅಡಿಟ್ ಬರ್ಪುಂಡು. ಕರಾವಳಿ ಭಾಗದ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ಶಾಲೆ ಕಾಲೇಜಿದ ಜೋಕುಲೆಗ್ ಈ ಮೈದಾನ ಒಂಜಿ ಮುಖ್ಯವಾಯಿನ ತರಬೇತಿ ಕೇಂದ್ರ ಆದುಂಡು.<ref>{{cite web |title=Mangala Stadium |url=https://manipalblog.com/mangala-stadium/ |website=manipalblog.com |publisher=ManipalBlog.com |access-date=28 October 2026}}</ref> ==ಇತಿಹಾಸೊ== ಇತ್ತೆ ಇಪ್ಪುನ ಮಲ್ಲ ಮೈದಾನ ದುಂಬು ಎಲ್ಯಡ್ ಇತ್ತ್ಂಡ್. ಐಕ್ ಮಣ್ಣಗುಡ್ಡ ಮೈದಾನ ಪಂದ್ ಪುದರ್ ಇತ್ತ್ಂಡ್. ೧೯೯೫ನೇ ಇಸವಿಡ್ ಇಂದೆನ್ ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ಪಂದ್ ಪುದರ್ ದೀಯೆರ್, ಅತ್ತಂದೆ ಬೇತೆ ಬೇತೆ ರೀತಿದ ಆಟ ಕೂಟೊಲು ನಡಪರ ಸುರು ಆಂಡ್.<ref>{{cite web |title=ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ೨ ತಿಂಗಳು ಬಂದ್ |url=https://udayavani.com/dakshina-kannada-news/mangaluru-mangala-stadium-closed-for-2-months-446890?lang=kn |website=udayavani.com |publisher=udayavani |access-date=28 October 2026}}</ref> ಸುರುಕು ಮುಲ್ಪ ಮಣ್ಣ್‌ದ ಓಟದ ಟ್ರ್ಯಾಕ್ ಇತ್ತ್ಂಡ್. ಕ್ರೀಡಾಪಟುಕುಲೆನ ಮಸ್ತ್ ವರ್ಷದ ಬೇಡಿಕೆದ ಪ್ರಕಾರ ೨೦೧೩ನೇ ಇಸವಿಡ್ ಕ್ರೀಡಾಂಗಣಗ್ ೪೦೦ ಮೀಟರ್‌ದ ಪೊಸ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್‌ನ್ ಉದ್ಘಾಟನೆ ಮಲ್ತೆರ್. ==ವ್ಯವಸ್ತೆಲು== ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣೊಡು ಕ್ರೀಡಾಪಟುಕ್ಲೆಗ್ ಬೊಕ್ಕ ಸಾರ್ವಜನಿಕೆರೆಗ್ ಸದ್ಯೊಗು ಇಪ್ಪುನ ಸೌಲಭೊಲು # ಓಟದ ಟ್ರ್ಯಾಕ್- ಬಲಿಪುನ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ತರಬೇತಿ ಮಲ್ಪೆರೆ ೪೦೦ ಮೀಟರ್‌ದ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್ ಮುಲ್ಪ ಉಂಡು. # ಫೀಲ್ಡ್ ಕ್ರೀಡೆಲು - ಕ್ರೀಡಾಂಗಣದ ಉಲಾಯಿಡ್ ಮುಲ್ಪ ಉದ್ದ ಲಾಗಿಯರ, ಗುಂಡು ಎಸೆತ, ಜಾವೆಲಿನ್ ತ್ರೋ, ಚಕ್ರ ಎಸೆತ, ಬೊಕ್ಕ ಹ್ಯಾಮರ್-ತ್ರೋ ಇಂಚಿನ ಗೊಬ್ಬುಲೆಗ್ ಪ್ರತ್ಯೇಕ ವ್ಯವಸ್ಥೆ ಉಂಡು. # ಈಜುಗೊಳ- ಕ್ರೀಡಾಂಗಣದ ಕೈತಲ್ಡ್ ಮೀಂದರ ಕಲ್ಪೆರೆ ಬೊಕ್ಕ ಸ್ಪರ್ಧೆಲೆಗ್ ಬೋಡಾದ್ ಈಜುಗೊಳ ಉಂಡು. # ಗೊಬ್ಬುದ ಮೈದಾನ: ನಡುಟು ಉಪ್ಪುನ ಪಚ್ಚೆ ಮೈದಾನಡ್ ಫುಟ್ಬಾಲ್ ಬೊಕ್ಕ ಬೇತೆ ಕ್ರೀಡೆಲೆನ್ ಗೊಬ್ಬೊಲಿ. # ಗ್ಯಾಲರಿಡ್ ಸಾವಿರಾರು ಜನ ಕುಲ್ಲುನೆಕ್ ಎಡ್ಡೆ ವ್ಯವಸ್ಥೆ ಉಂಡು. == ದುಂಬಗ್ ನಡಪುನ ಅಬಿವೃದ್ಧಿ ಬೇಲೆಲು== ಕರ್ನಾಟಕ ಸರ್ಕಾರದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಕೆಲು ಜಂಟಿಯಾದ್, ದುಂಬುದ ದಿನೊಟು ಈ ಕ್ರೀಡಾಂಗಣಗ್ ಅಬಿವೃದ್ಧಿ ಮಲ್ಪುನ ಮಲ್ಲ ಯೋಜನೆನ್ ಪಾಡೊಂದೆರ್. ಐತ ಬಗೆಟ್ ಮಾಹಿತಿಲು ೩ ಕೋಟಿ ರೂ. ಅಭಿವೃದ್ಧಿ: ರಾಜ್ಯ ಸರ್ಕಾರ ಬೊಕ್ಕ ಮುಖ್ಯಮಂತ್ರಿ ಸಿದ್ದರಾಮಯ್ಯೆರೆನ ಅನುದಾನದಡಿಟ್ ೩ ಕೋಟಿ ರೂಪಾಯಿ ಖರ್ಚ್ ಮಲ್ತ್‌ದ್ ಮಂಗಳ ಕ್ರೀಡಾಂಗಣದ ನವೀಕರಣ ಬೇಲೆಗ್ ಚಾಲನೆ ಕೊರ್ತೆರ್. ಉಂದೆಕ್ ೩ ಕೋಟಿ ರೂ. ಬಜೆಟ್‌ಡ್ ಮೀಸಲಾತ್ಂಡ್ ಬೊಕ್ಕ ೧.೫ ಕೋಟಿ ರೂ. ಹೆಚ್ಚುವರಿಯಾದ್ ಕೊರ್ತೆರ್.<ref>{{cite web |title=Stadium Development |url=https://www.thehindu.com/news/cities/Mangalore/35-crore-for-mangala-stadium-development/article29747722.ece |website=thehindu.com |publisher=thehindu |access-date=28 October 2026}}</ref> ಪೊಸ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್: ಮುಲ್ಪ ಇತ್ತಿನ ೧೫ ವರ್ಷ ಪರತ್ ಆಯಿನ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್ ಬರ್ಸ ಬೊಕ್ಕ ದೊಂಬುಗು ಹಾಳಾದ್ ಜಾರುನಂಚಿತ್ತ್ಂಡ್. ಅಂಚಾದ್ ಪರತ್ ಟ್ರ್ಯಾಕ್ ದೆತ್ತ್‌ದ್ ಪೊಸತ್ ಪಾಡುನ ಬೇಲೆ ನಡತೊಂದು ಉಂಡು.<ref>{{cite web |title=synthetic Turf |url=https://www.thehindu.com/news/cities/Mangalore/mangala-stadium-is-all-set-to-get-fullfledged-synthetic-turf/article2773967.ece |website=thehindu.com |publisher=thehindu |access-date=28 October 2026}}</ref> ಒಳಚರಂಡಿ ವ್ಯವಸ್ಥೆ (Drainage System): ಕುಡ್ಲಡ್ ಬರ್ಸ ಜಾಸ್ತಿ ಬರ್ಪುನೈರ್ದಾವರ ಮೈದಾನಡ್ ನೀರ್ ಉಂತಂದಿಲೆಕ್ಕ ಬೊಕ್ಕ ಟ್ರ್ಯಾಕ್ ಹಾಳಾವಂದಿಲೆಕ್ಕ ಪೊಸ ವೈಜ್ಞಾನಿಕವಾಯಿನ ಒಳಚರಂಡಿ ವ್ಯವಸ್ಥೆನ್ ನಿರ್ಮಾಣ ಮಲ್ತೊಂದು ಉಲ್ಲೆರ್. ಫೀಲ್ಡ್ ಅಪ್‌ಗ್ರೇಡ್: ಜಾವೆಲಿನ್ ತ್ರೋ, ಶಾಟ್ ಪುಟ್ ಬೊಕ್ಕ ಲಾಂಗ್ ಜಂಪ್ ಜಾಗೆನ್ ರಾಷ್ಟ್ರೀಯ ಮಟ್ಟದ ಸ್ಪರ್ಧೆಗ್ ಬೋಡಾಪಿನಂಚೆನೆ ಉನ್ನತೀಕರಣ ಮಲ್ಪುನ ಯೋಜನೆ ಉಂಡು. == ಇಡೆಮುಟ್ಟ ನಡತ್ತಿನ ಮಲ್ಲ ಲೇಸುಲು== ==ಉಲ್ಲೇಕ== {{reflist}} aaasjzlk5r7q5rosntxobe2zz833fvv 373893 373848 2026-10-28T05:56:57Z ChiK 1136 373893 wikitext text/x-wiki {{Infobox venue | name = ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ | nickname = | image = Near the entrance of Mangala Stadium in Mangalore.jpg | image_caption = ಮಂಗಳೂರುಡುಪ್ಪುನ ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ಬಾಗೆಲ್‌ದ ಕೈತಲ್ | location = [[ಮಂಗಳೂರು]], [[ಕರ್ನಾಟಕ]] | groundbreaking = 2009 | opened = ಅಕ್ಟೋಬರ್ 2011 | owner = [[ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ]] | operator = (ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ) | cost = | architect = | tenants = [[ಕರ್ನಾಟಕ ಕ್ರಿಕೆಟ್ ತಂಡ]] , ([[ಮಂಗಳೂರು ಯುನೈಟೆಡ್]]) <br/> [[ಸೌತ್ ಯುನೈಟೆಡ್ ಎಫ್.ಸಿ.]] (2018-ಇಂಚಿಪೊ) | capacity = 8,000<ref name="capacity">{{Cite news |date=2019-12-20 |title=ಮಂಗಳಾ ಸ್ಟೇಡಿಯಂದ ಸುರೂತ ಹಂತದ ಬೇಲೆಗ್ ಸಿದ್ಧತೆ ಆತ್ಂಡ್ (Stage is set for first phase works of Mangala Stadium) |url=https://timesofindia.indiatimes.com/city/mangaluru/stage-set-for-first-phase-of-redevelopment-of-mangala-stadium/articleshow/72892244.cms |access-date=2026-06-09 |work=The Times of India |issn=0971-8257}}</ref> }} '''ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ''' ದಕ್ಷಿಣ ಕನ್ನಡ ಜಿಲ್ಲೆದ ಕುಡ್ಲಡ್, ಪೇಂಟೆದ ನಡುಟು ಉಪ್ಪುನ ಒಂಜಿ ಪ್ರಮುಖವಾಯಿನ ಮಲ್ಲ ಮೈದಾನ. ಕುಡ್ಲದ ಗ್ರಾಮ ದೇವತೆ ಮಂಗಳಾದೇವಿನ ಪುದರ್‌ನ್ ಈ ಕ್ರೀಡಾಂಗಣಗ್ ದೀತೆರ್. ಈ ಮೈದಾನ ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ ಬೊಕ್ಕ ಕರ್ನಾಟಕ ರಾಜ್ಯದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆದ ಆಡಳಿತದ ಅಡಿಟ್ ಬರ್ಪುಂಡು. ಕರಾವಳಿ ಭಾಗದ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ಶಾಲೆ ಕಾಲೇಜಿದ ಜೋಕುಲೆಗ್ ಈ ಮೈದಾನ ಒಂಜಿ ಮುಖ್ಯವಾಯಿನ ತರಬೇತಿ ಕೇಂದ್ರ ಆದುಂಡು.<ref>{{cite web |title=Mangala Stadium |url=https://manipalblog.com/mangala-stadium/ |website=manipalblog.com |publisher=ManipalBlog.com |access-date=28 October 2026}}</ref> ==ಇತಿಹಾಸೊ== ಇತ್ತೆ ಇಪ್ಪುನ ಮಲ್ಲ ಮೈದಾನ ದುಂಬು ಎಲ್ಯಡ್ ಇತ್ತ್ಂಡ್. ಐಕ್ ಮಣ್ಣಗುಡ್ಡ ಮೈದಾನ ಪಂದ್ ಪುದರ್ ಇತ್ತ್ಂಡ್. ೧೯೯೫ನೇ ಇಸವಿಡ್ ಇಂದೆನ್ ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ಪಂದ್ ಪುದರ್ ದೀಯೆರ್, ಅತ್ತಂದೆ ಬೇತೆ ಬೇತೆ ರೀತಿದ ಆಟ ಕೂಟೊಲು ನಡಪರ ಸುರು ಆಂಡ್.<ref>{{cite web |title=ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ೨ ತಿಂಗಳು ಬಂದ್ |url=https://udayavani.com/dakshina-kannada-news/mangaluru-mangala-stadium-closed-for-2-months-446890?lang=kn |website=udayavani.com |publisher=udayavani |access-date=28 October 2026}}</ref> ಸುರುಕು ಮುಲ್ಪ ಮಣ್ಣ್‌ದ ಓಟದ ಟ್ರ್ಯಾಕ್ ಇತ್ತ್ಂಡ್. ಕ್ರೀಡಾಪಟುಕುಲೆನ ಮಸ್ತ್ ವರ್ಷದ ಬೇಡಿಕೆದ ಪ್ರಕಾರ ೨೦೧೩ನೇ ಇಸವಿಡ್ ಕ್ರೀಡಾಂಗಣಗ್ ೪೦೦ ಮೀಟರ್‌ದ ಪೊಸ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್‌ನ್ ಉದ್ಘಾಟನೆ ಮಲ್ತೆರ್. ==ವ್ಯವಸ್ತೆಲು== ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣೊಡು ಕ್ರೀಡಾಪಟುಕ್ಲೆಗ್ ಬೊಕ್ಕ ಸಾರ್ವಜನಿಕೆರೆಗ್ ಸದ್ಯೊಗು ಇಪ್ಪುನ ಸೌಲಭೊಲು # ಓಟದ ಟ್ರ್ಯಾಕ್- ಬಲಿಪುನ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ತರಬೇತಿ ಮಲ್ಪೆರೆ ೪೦೦ ಮೀಟರ್‌ದ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್ ಮುಲ್ಪ ಉಂಡು. # ಫೀಲ್ಡ್ ಕ್ರೀಡೆಲು - ಕ್ರೀಡಾಂಗಣದ ಉಲಾಯಿಡ್ ಮುಲ್ಪ ಉದ್ದ ಲಾಗಿಯರ, ಗುಂಡು ಎಸೆತ, ಜಾವೆಲಿನ್ ತ್ರೋ, ಚಕ್ರ ಎಸೆತ, ಬೊಕ್ಕ ಹ್ಯಾಮರ್-ತ್ರೋ ಇಂಚಿನ ಗೊಬ್ಬುಲೆಗ್ ಪ್ರತ್ಯೇಕ ವ್ಯವಸ್ಥೆ ಉಂಡು. # ಈಜುಗೊಳ- ಕ್ರೀಡಾಂಗಣದ ಕೈತಲ್ಡ್ ಮೀಂದರ ಕಲ್ಪೆರೆ ಬೊಕ್ಕ ಸ್ಪರ್ಧೆಲೆಗ್ ಬೋಡಾದ್ ಈಜುಗೊಳ ಉಂಡು. # ಗೊಬ್ಬುದ ಮೈದಾನ: ನಡುಟು ಉಪ್ಪುನ ಪಚ್ಚೆ ಮೈದಾನಡ್ ಫುಟ್ಬಾಲ್ ಬೊಕ್ಕ ಬೇತೆ ಕ್ರೀಡೆಲೆನ್ ಗೊಬ್ಬೊಲಿ. # ಗ್ಯಾಲರಿಡ್ ಸಾವಿರಾರು ಜನ ಕುಲ್ಲುನೆಕ್ ಎಡ್ಡೆ ವ್ಯವಸ್ಥೆ ಉಂಡು. == ದುಂಬಗ್ ನಡಪುನ ಅಬಿವೃದ್ಧಿ ಬೇಲೆಲು== ಕರ್ನಾಟಕ ಸರ್ಕಾರದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಕೆಲು ಜಂಟಿಯಾದ್, ದುಂಬುದ ದಿನೊಟು ಈ ಕ್ರೀಡಾಂಗಣಗ್ ಅಬಿವೃದ್ಧಿ ಮಲ್ಪುನ ಮಲ್ಲ ಯೋಜನೆನ್ ಪಾಡೊಂದೆರ್. ಐತ ಬಗೆಟ್ ಮಾಹಿತಿಲು ೩ ಕೋಟಿ ರೂ. ಅಭಿವೃದ್ಧಿ: ರಾಜ್ಯ ಸರ್ಕಾರ ಬೊಕ್ಕ ಮುಖ್ಯಮಂತ್ರಿ ಸಿದ್ದರಾಮಯ್ಯೆರೆನ ಅನುದಾನದಡಿಟ್ ೩ ಕೋಟಿ ರೂಪಾಯಿ ಖರ್ಚ್ ಮಲ್ತ್‌ದ್ ಮಂಗಳ ಕ್ರೀಡಾಂಗಣದ ನವೀಕರಣ ಬೇಲೆಗ್ ಚಾಲನೆ ಕೊರ್ತೆರ್. ಉಂದೆಕ್ ೩ ಕೋಟಿ ರೂ. ಬಜೆಟ್‌ಡ್ ಮೀಸಲಾತ್ಂಡ್ ಬೊಕ್ಕ ೧.೫ ಕೋಟಿ ರೂ. ಹೆಚ್ಚುವರಿಯಾದ್ ಕೊರ್ತೆರ್.<ref>{{cite web |title=Stadium Development |url=https://www.thehindu.com/news/cities/Mangalore/35-crore-for-mangala-stadium-development/article29747722.ece |website=thehindu.com |publisher=thehindu |access-date=28 October 2026}}</ref> ಪೊಸ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್: ಮುಲ್ಪ ಇತ್ತಿನ ೧೫ ವರ್ಷ ಪರತ್ ಆಯಿನ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್ ಬರ್ಸ ಬೊಕ್ಕ ದೊಂಬುಗು ಹಾಳಾದ್ ಜಾರುನಂಚಿತ್ತ್ಂಡ್. ಅಂಚಾದ್ ಪರತ್ ಟ್ರ್ಯಾಕ್ ದೆತ್ತ್‌ದ್ ಪೊಸತ್ ಪಾಡುನ ಬೇಲೆ ನಡತೊಂದು ಉಂಡು.<ref>{{cite web |title=synthetic Turf |url=https://www.thehindu.com/news/cities/Mangalore/mangala-stadium-is-all-set-to-get-fullfledged-synthetic-turf/article2773967.ece |website=thehindu.com |publisher=thehindu |access-date=28 October 2026}}</ref> ಒಳಚರಂಡಿ ವ್ಯವಸ್ಥೆ (Drainage System): ಕುಡ್ಲಡ್ ಬರ್ಸ ಜಾಸ್ತಿ ಬರ್ಪುನೈರ್ದಾವರ ಮೈದಾನಡ್ ನೀರ್ ಉಂತಂದಿಲೆಕ್ಕ ಬೊಕ್ಕ ಟ್ರ್ಯಾಕ್ ಹಾಳಾವಂದಿಲೆಕ್ಕ ಪೊಸ ವೈಜ್ಞಾನಿಕವಾಯಿನ ಒಳಚರಂಡಿ ವ್ಯವಸ್ಥೆನ್ ನಿರ್ಮಾಣ ಮಲ್ತೊಂದು ಉಲ್ಲೆರ್. ಫೀಲ್ಡ್ ಅಪ್‌ಗ್ರೇಡ್: ಜಾವೆಲಿನ್ ತ್ರೋ, ಶಾಟ್ ಪುಟ್ ಬೊಕ್ಕ ಲಾಂಗ್ ಜಂಪ್ ಜಾಗೆನ್ ರಾಷ್ಟ್ರೀಯ ಮಟ್ಟದ ಸ್ಪರ್ಧೆಗ್ ಬೋಡಾಪಿನಂಚೆನೆ ಉನ್ನತೀಕರಣ ಮಲ್ಪುನ ಯೋಜನೆ ಉಂಡು. == ಇಡೆಮುಟ್ಟ ನಡತ್ತಿನ ಮಲ್ಲ ಲೇಸುಲು== ==ಉಲ್ಲೇಕ== {{reflist}} lvyx95yr99d83qnld6ptkwwjffgzovk 373894 373893 2026-10-28T05:58:29Z ChiK 1136 373894 wikitext text/x-wiki {{Infobox venue | name = ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ | nickname = | image = Near the entrance of Mangala Stadium in Mangalore.jpg | image_caption = ಮಂಗಳೂರುಡುಪ್ಪುನ ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ಬಾಗೆಲ್‌ದ ಕೈತಲ್ | location = [[ಮಂಗಳೂರು]], [[ಕರ್ನಾಟಕ]] | groundbreaking = 2009 | opened = ಅಕ್ಟೋಬರ್ 2011 | owner = [[ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ]] | operator = (ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ) | cost = | architect = | tenants = [[ಕರ್ನಾಟಕ ಕ್ರಿಕೆಟ್ ತಂಡ]] , ([[ಮಂಗಳೂರು ಯುನೈಟೆಡ್]]) <br/> [[ಸೌತ್ ಯುನೈಟೆಡ್ ಎಫ್.ಸಿ.]] (2018-ಇಂಚಿಪೊ) | capacity = 8,000<ref name="capacity">{{Cite news |date=2019-12-20 |title=ಮಂಗಳಾ ಸ್ಟೇಡಿಯಂದ ಸುರೂತ ಹಂತದ ಬೇಲೆಗ್ ಸಿದ್ಧತೆ ಆತ್ಂಡ್ (Stage is set for first phase works of Mangala Stadium) |url=https://timesofindia.indiatimes.com/city/mangaluru/stage-set-for-first-phase-of-redevelopment-of-mangala-stadium/articleshow/72892244.cms |access-date=2026-06-09 |work=The Times of India |issn=0971-8257}}</ref> }} '''ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ''' [[ದಕ್ಷಿಣ ಕನ್ನಡ ಜಿಲ್ಲೆ|ದಕ್ಷಿಣ ಕನ್ನಡ]] ಜಿಲ್ಲೆದ ಕುಡ್ಲಡ್, ಪೇಂಟೆದ ನಡುಟು ಉಪ್ಪುನ ಒಂಜಿ ಪ್ರಮುಖವಾಯಿನ ಮಲ್ಲ ಮೈದಾನ. ಕುಡ್ಲದ ಗ್ರಾಮ ದೇವತೆ ಮಂಗಳಾದೇವಿನ ಪುದರ್‌ನ್ ಈ ಕ್ರೀಡಾಂಗಣಗ್ ದೀತೆರ್. ಈ ಮೈದಾನ ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ ಬೊಕ್ಕ [[ಕರ್ನಾಟಕ]] ರಾಜ್ಯದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆದ ಆಡಳಿತದ ಅಡಿಟ್ ಬರ್ಪುಂಡು. ಕರಾವಳಿ ಭಾಗದ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ಶಾಲೆ ಕಾಲೇಜಿದ ಜೋಕುಲೆಗ್ ಈ ಮೈದಾನ ಒಂಜಿ ಮುಖ್ಯವಾಯಿನ ತರಬೇತಿ ಕೇಂದ್ರ ಆದುಂಡು.<ref>{{cite web |title=Mangala Stadium |url=https://manipalblog.com/mangala-stadium/ |website=manipalblog.com |publisher=ManipalBlog.com |access-date=28 October 2026}}</ref> ==ಇತಿಹಾಸೊ== ಇತ್ತೆ ಇಪ್ಪುನ ಮಲ್ಲ ಮೈದಾನ ದುಂಬು ಎಲ್ಯಡ್ ಇತ್ತ್ಂಡ್. ಐಕ್ ಮಣ್ಣಗುಡ್ಡ ಮೈದಾನ ಪಂದ್ ಪುದರ್ ಇತ್ತ್ಂಡ್. ೧೯೯೫ನೇ ಇಸವಿಡ್ ಇಂದೆನ್ ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ಪಂದ್ ಪುದರ್ ದೀಯೆರ್, ಅತ್ತಂದೆ ಬೇತೆ ಬೇತೆ ರೀತಿದ ಆಟ ಕೂಟೊಲು ನಡಪರ ಸುರು ಆಂಡ್.<ref>{{cite web |title=ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ೨ ತಿಂಗಳು ಬಂದ್ |url=https://udayavani.com/dakshina-kannada-news/mangaluru-mangala-stadium-closed-for-2-months-446890?lang=kn |website=udayavani.com |publisher=udayavani |access-date=28 October 2026}}</ref> ಸುರುಕು ಮುಲ್ಪ ಮಣ್ಣ್‌ದ ಓಟದ ಟ್ರ್ಯಾಕ್ ಇತ್ತ್ಂಡ್. ಕ್ರೀಡಾಪಟುಕುಲೆನ ಮಸ್ತ್ ವರ್ಷದ ಬೇಡಿಕೆದ ಪ್ರಕಾರ ೨೦೧೩ನೇ ಇಸವಿಡ್ ಕ್ರೀಡಾಂಗಣಗ್ ೪೦೦ ಮೀಟರ್‌ದ ಪೊಸ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್‌ನ್ ಉದ್ಘಾಟನೆ ಮಲ್ತೆರ್. == ವ್ಯವಸ್ತೆಲು == ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣೊಡು ಕ್ರೀಡಾಪಟುಕ್ಲೆಗ್ ಬೊಕ್ಕ ಸಾರ್ವಜನಿಕೆರೆಗ್ ಸದ್ಯೊಗು ಇಪ್ಪುನ ಸೌಲಭೊಲು # ಓಟದ ಟ್ರ್ಯಾಕ್- ಬಲಿಪುನ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ತರಬೇತಿ ಮಲ್ಪೆರೆ ೪೦೦ ಮೀಟರ್‌ದ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್ ಮುಲ್ಪ ಉಂಡು. # ಫೀಲ್ಡ್ ಕ್ರೀಡೆಲು - ಕ್ರೀಡಾಂಗಣದ ಉಲಾಯಿಡ್ ಮುಲ್ಪ ಉದ್ದ ಲಾಗಿಯರ, ಗುಂಡು ಎಸೆತ, ಜಾವೆಲಿನ್ ತ್ರೋ, ಚಕ್ರ ಎಸೆತ, ಬೊಕ್ಕ ಹ್ಯಾಮರ್-ತ್ರೋ ಇಂಚಿನ ಗೊಬ್ಬುಲೆಗ್ ಪ್ರತ್ಯೇಕ ವ್ಯವಸ್ಥೆ ಉಂಡು. # ಈಜುಗೊಳ- ಕ್ರೀಡಾಂಗಣದ ಕೈತಲ್ಡ್ ಮೀಂದರ ಕಲ್ಪೆರೆ ಬೊಕ್ಕ ಸ್ಪರ್ಧೆಲೆಗ್ ಬೋಡಾದ್ ಈಜುಗೊಳ ಉಂಡು. # ಗೊಬ್ಬುದ ಮೈದಾನ: ನಡುಟು ಉಪ್ಪುನ ಪಚ್ಚೆ ಮೈದಾನಡ್ ಫುಟ್ಬಾಲ್ ಬೊಕ್ಕ ಬೇತೆ ಕ್ರೀಡೆಲೆನ್ ಗೊಬ್ಬೊಲಿ. # ಗ್ಯಾಲರಿಡ್ ಸಾವಿರಾರು ಜನ ಕುಲ್ಲುನೆಕ್ ಎಡ್ಡೆ ವ್ಯವಸ್ಥೆ ಉಂಡು. == ದುಂಬಗ್ ನಡಪುನ ಅಬಿವೃದ್ಧಿ ಬೇಲೆಲು== ಕರ್ನಾಟಕ ಸರ್ಕಾರದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಕೆಲು ಜಂಟಿಯಾದ್, ದುಂಬುದ ದಿನೊಟು ಈ ಕ್ರೀಡಾಂಗಣಗ್ ಅಬಿವೃದ್ಧಿ ಮಲ್ಪುನ ಮಲ್ಲ ಯೋಜನೆನ್ ಪಾಡೊಂದೆರ್. ಐತ ಬಗೆಟ್ ಮಾಹಿತಿಲು ೩ ಕೋಟಿ ರೂ. ಅಭಿವೃದ್ಧಿ: ರಾಜ್ಯ ಸರ್ಕಾರ ಬೊಕ್ಕ ಮುಖ್ಯಮಂತ್ರಿ ಸಿದ್ದರಾಮಯ್ಯೆರೆನ ಅನುದಾನದಡಿಟ್ ೩ ಕೋಟಿ ರೂಪಾಯಿ ಖರ್ಚ್ ಮಲ್ತ್‌ದ್ ಮಂಗಳ ಕ್ರೀಡಾಂಗಣದ ನವೀಕರಣ ಬೇಲೆಗ್ ಚಾಲನೆ ಕೊರ್ತೆರ್. ಉಂದೆಕ್ ೩ ಕೋಟಿ ರೂ. ಬಜೆಟ್‌ಡ್ ಮೀಸಲಾತ್ಂಡ್ ಬೊಕ್ಕ ೧.೫ ಕೋಟಿ ರೂ. ಹೆಚ್ಚುವರಿಯಾದ್ ಕೊರ್ತೆರ್.<ref>{{cite web |title=Stadium Development |url=https://www.thehindu.com/news/cities/Mangalore/35-crore-for-mangala-stadium-development/article29747722.ece |website=thehindu.com |publisher=thehindu |access-date=28 October 2026}}</ref> ಪೊಸ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್: ಮುಲ್ಪ ಇತ್ತಿನ ೧೫ ವರ್ಷ ಪರತ್ ಆಯಿನ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್ ಬರ್ಸ ಬೊಕ್ಕ ದೊಂಬುಗು ಹಾಳಾದ್ ಜಾರುನಂಚಿತ್ತ್ಂಡ್. ಅಂಚಾದ್ ಪರತ್ ಟ್ರ್ಯಾಕ್ ದೆತ್ತ್‌ದ್ ಪೊಸತ್ ಪಾಡುನ ಬೇಲೆ ನಡತೊಂದು ಉಂಡು.<ref>{{cite web |title=synthetic Turf |url=https://www.thehindu.com/news/cities/Mangalore/mangala-stadium-is-all-set-to-get-fullfledged-synthetic-turf/article2773967.ece |website=thehindu.com |publisher=thehindu |access-date=28 October 2026}}</ref> ಒಳಚರಂಡಿ ವ್ಯವಸ್ಥೆ (Drainage System): ಕುಡ್ಲಡ್ ಬರ್ಸ ಜಾಸ್ತಿ ಬರ್ಪುನೈರ್ದಾವರ ಮೈದಾನಡ್ ನೀರ್ ಉಂತಂದಿಲೆಕ್ಕ ಬೊಕ್ಕ ಟ್ರ್ಯಾಕ್ ಹಾಳಾವಂದಿಲೆಕ್ಕ ಪೊಸ ವೈಜ್ಞಾನಿಕವಾಯಿನ ಒಳಚರಂಡಿ ವ್ಯವಸ್ಥೆನ್ ನಿರ್ಮಾಣ ಮಲ್ತೊಂದು ಉಲ್ಲೆರ್. ಫೀಲ್ಡ್ ಅಪ್‌ಗ್ರೇಡ್: ಜಾವೆಲಿನ್ ತ್ರೋ, ಶಾಟ್ ಪುಟ್ ಬೊಕ್ಕ ಲಾಂಗ್ ಜಂಪ್ ಜಾಗೆನ್ ರಾಷ್ಟ್ರೀಯ ಮಟ್ಟದ ಸ್ಪರ್ಧೆಗ್ ಬೋಡಾಪಿನಂಚೆನೆ ಉನ್ನತೀಕರಣ ಮಲ್ಪುನ ಯೋಜನೆ ಉಂಡು. == ಇಡೆಮುಟ್ಟ ನಡತ್ತಿನ ಮಲ್ಲ ಲೇಸುಲು== ==ಉಲ್ಲೇಕೊಲು== {{reflist}} l9ow3grzarykk6qbdo6czx7yd9btx0d 373895 373894 2026-10-28T06:03:12Z Mahaveer Indra 1023 /* ಇಡೆಮುಟ್ಟ ನಡತ್ತಿನ ಮಲ್ಲ ಲೇಸುಲು */ 373895 wikitext text/x-wiki {{Infobox venue | name = ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ | nickname = | image = Near the entrance of Mangala Stadium in Mangalore.jpg | image_caption = ಮಂಗಳೂರುಡುಪ್ಪುನ ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ಬಾಗೆಲ್‌ದ ಕೈತಲ್ | location = [[ಮಂಗಳೂರು]], [[ಕರ್ನಾಟಕ]] | groundbreaking = 2009 | opened = ಅಕ್ಟೋಬರ್ 2011 | owner = [[ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ]] | operator = (ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ) | cost = | architect = | tenants = [[ಕರ್ನಾಟಕ ಕ್ರಿಕೆಟ್ ತಂಡ]] , ([[ಮಂಗಳೂರು ಯುನೈಟೆಡ್]]) <br/> [[ಸೌತ್ ಯುನೈಟೆಡ್ ಎಫ್.ಸಿ.]] (2018-ಇಂಚಿಪೊ) | capacity = 8,000<ref name="capacity">{{Cite news |date=2019-12-20 |title=ಮಂಗಳಾ ಸ್ಟೇಡಿಯಂದ ಸುರೂತ ಹಂತದ ಬೇಲೆಗ್ ಸಿದ್ಧತೆ ಆತ್ಂಡ್ (Stage is set for first phase works of Mangala Stadium) |url=https://timesofindia.indiatimes.com/city/mangaluru/stage-set-for-first-phase-of-redevelopment-of-mangala-stadium/articleshow/72892244.cms |access-date=2026-06-09 |work=The Times of India |issn=0971-8257}}</ref> }} '''ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ''' [[ದಕ್ಷಿಣ ಕನ್ನಡ ಜಿಲ್ಲೆ|ದಕ್ಷಿಣ ಕನ್ನಡ]] ಜಿಲ್ಲೆದ ಕುಡ್ಲಡ್, ಪೇಂಟೆದ ನಡುಟು ಉಪ್ಪುನ ಒಂಜಿ ಪ್ರಮುಖವಾಯಿನ ಮಲ್ಲ ಮೈದಾನ. ಕುಡ್ಲದ ಗ್ರಾಮ ದೇವತೆ ಮಂಗಳಾದೇವಿನ ಪುದರ್‌ನ್ ಈ ಕ್ರೀಡಾಂಗಣಗ್ ದೀತೆರ್. ಈ ಮೈದಾನ ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ ಬೊಕ್ಕ [[ಕರ್ನಾಟಕ]] ರಾಜ್ಯದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆದ ಆಡಳಿತದ ಅಡಿಟ್ ಬರ್ಪುಂಡು. ಕರಾವಳಿ ಭಾಗದ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ಶಾಲೆ ಕಾಲೇಜಿದ ಜೋಕುಲೆಗ್ ಈ ಮೈದಾನ ಒಂಜಿ ಮುಖ್ಯವಾಯಿನ ತರಬೇತಿ ಕೇಂದ್ರ ಆದುಂಡು.<ref>{{cite web |title=Mangala Stadium |url=https://manipalblog.com/mangala-stadium/ |website=manipalblog.com |publisher=ManipalBlog.com |access-date=28 October 2026}}</ref> ==ಇತಿಹಾಸೊ== ಇತ್ತೆ ಇಪ್ಪುನ ಮಲ್ಲ ಮೈದಾನ ದುಂಬು ಎಲ್ಯಡ್ ಇತ್ತ್ಂಡ್. ಐಕ್ ಮಣ್ಣಗುಡ್ಡ ಮೈದಾನ ಪಂದ್ ಪುದರ್ ಇತ್ತ್ಂಡ್. ೧೯೯೫ನೇ ಇಸವಿಡ್ ಇಂದೆನ್ ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ಪಂದ್ ಪುದರ್ ದೀಯೆರ್, ಅತ್ತಂದೆ ಬೇತೆ ಬೇತೆ ರೀತಿದ ಆಟ ಕೂಟೊಲು ನಡಪರ ಸುರು ಆಂಡ್.<ref>{{cite web |title=ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ೨ ತಿಂಗಳು ಬಂದ್ |url=https://udayavani.com/dakshina-kannada-news/mangaluru-mangala-stadium-closed-for-2-months-446890?lang=kn |website=udayavani.com |publisher=udayavani |access-date=28 October 2026}}</ref> ಸುರುಕು ಮುಲ್ಪ ಮಣ್ಣ್‌ದ ಓಟದ ಟ್ರ್ಯಾಕ್ ಇತ್ತ್ಂಡ್. ಕ್ರೀಡಾಪಟುಕುಲೆನ ಮಸ್ತ್ ವರ್ಷದ ಬೇಡಿಕೆದ ಪ್ರಕಾರ ೨೦೧೩ನೇ ಇಸವಿಡ್ ಕ್ರೀಡಾಂಗಣಗ್ ೪೦೦ ಮೀಟರ್‌ದ ಪೊಸ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್‌ನ್ ಉದ್ಘಾಟನೆ ಮಲ್ತೆರ್. == ವ್ಯವಸ್ತೆಲು == ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣೊಡು ಕ್ರೀಡಾಪಟುಕ್ಲೆಗ್ ಬೊಕ್ಕ ಸಾರ್ವಜನಿಕೆರೆಗ್ ಸದ್ಯೊಗು ಇಪ್ಪುನ ಸೌಲಭೊಲು # ಓಟದ ಟ್ರ್ಯಾಕ್- ಬಲಿಪುನ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ತರಬೇತಿ ಮಲ್ಪೆರೆ ೪೦೦ ಮೀಟರ್‌ದ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್ ಮುಲ್ಪ ಉಂಡು. # ಫೀಲ್ಡ್ ಕ್ರೀಡೆಲು - ಕ್ರೀಡಾಂಗಣದ ಉಲಾಯಿಡ್ ಮುಲ್ಪ ಉದ್ದ ಲಾಗಿಯರ, ಗುಂಡು ಎಸೆತ, ಜಾವೆಲಿನ್ ತ್ರೋ, ಚಕ್ರ ಎಸೆತ, ಬೊಕ್ಕ ಹ್ಯಾಮರ್-ತ್ರೋ ಇಂಚಿನ ಗೊಬ್ಬುಲೆಗ್ ಪ್ರತ್ಯೇಕ ವ್ಯವಸ್ಥೆ ಉಂಡು. # ಈಜುಗೊಳ- ಕ್ರೀಡಾಂಗಣದ ಕೈತಲ್ಡ್ ಮೀಂದರ ಕಲ್ಪೆರೆ ಬೊಕ್ಕ ಸ್ಪರ್ಧೆಲೆಗ್ ಬೋಡಾದ್ ಈಜುಗೊಳ ಉಂಡು. # ಗೊಬ್ಬುದ ಮೈದಾನ: ನಡುಟು ಉಪ್ಪುನ ಪಚ್ಚೆ ಮೈದಾನಡ್ ಫುಟ್ಬಾಲ್ ಬೊಕ್ಕ ಬೇತೆ ಕ್ರೀಡೆಲೆನ್ ಗೊಬ್ಬೊಲಿ. # ಗ್ಯಾಲರಿಡ್ ಸಾವಿರಾರು ಜನ ಕುಲ್ಲುನೆಕ್ ಎಡ್ಡೆ ವ್ಯವಸ್ಥೆ ಉಂಡು. == ದುಂಬಗ್ ನಡಪುನ ಅಬಿವೃದ್ಧಿ ಬೇಲೆಲು== ಕರ್ನಾಟಕ ಸರ್ಕಾರದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಕೆಲು ಜಂಟಿಯಾದ್, ದುಂಬುದ ದಿನೊಟು ಈ ಕ್ರೀಡಾಂಗಣಗ್ ಅಬಿವೃದ್ಧಿ ಮಲ್ಪುನ ಮಲ್ಲ ಯೋಜನೆನ್ ಪಾಡೊಂದೆರ್. ಐತ ಬಗೆಟ್ ಮಾಹಿತಿಲು ೩ ಕೋಟಿ ರೂ. ಅಭಿವೃದ್ಧಿ: ರಾಜ್ಯ ಸರ್ಕಾರ ಬೊಕ್ಕ ಮುಖ್ಯಮಂತ್ರಿ ಸಿದ್ದರಾಮಯ್ಯೆರೆನ ಅನುದಾನದಡಿಟ್ ೩ ಕೋಟಿ ರೂಪಾಯಿ ಖರ್ಚ್ ಮಲ್ತ್‌ದ್ ಮಂಗಳ ಕ್ರೀಡಾಂಗಣದ ನವೀಕರಣ ಬೇಲೆಗ್ ಚಾಲನೆ ಕೊರ್ತೆರ್. ಉಂದೆಕ್ ೩ ಕೋಟಿ ರೂ. ಬಜೆಟ್‌ಡ್ ಮೀಸಲಾತ್ಂಡ್ ಬೊಕ್ಕ ೧.೫ ಕೋಟಿ ರೂ. ಹೆಚ್ಚುವರಿಯಾದ್ ಕೊರ್ತೆರ್.<ref>{{cite web |title=Stadium Development |url=https://www.thehindu.com/news/cities/Mangalore/35-crore-for-mangala-stadium-development/article29747722.ece |website=thehindu.com |publisher=thehindu |access-date=28 October 2026}}</ref> ಪೊಸ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್: ಮುಲ್ಪ ಇತ್ತಿನ ೧೫ ವರ್ಷ ಪರತ್ ಆಯಿನ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್ ಬರ್ಸ ಬೊಕ್ಕ ದೊಂಬುಗು ಹಾಳಾದ್ ಜಾರುನಂಚಿತ್ತ್ಂಡ್. ಅಂಚಾದ್ ಪರತ್ ಟ್ರ್ಯಾಕ್ ದೆತ್ತ್‌ದ್ ಪೊಸತ್ ಪಾಡುನ ಬೇಲೆ ನಡತೊಂದು ಉಂಡು.<ref>{{cite web |title=synthetic Turf |url=https://www.thehindu.com/news/cities/Mangalore/mangala-stadium-is-all-set-to-get-fullfledged-synthetic-turf/article2773967.ece |website=thehindu.com |publisher=thehindu |access-date=28 October 2026}}</ref> ಒಳಚರಂಡಿ ವ್ಯವಸ್ಥೆ (Drainage System): ಕುಡ್ಲಡ್ ಬರ್ಸ ಜಾಸ್ತಿ ಬರ್ಪುನೈರ್ದಾವರ ಮೈದಾನಡ್ ನೀರ್ ಉಂತಂದಿಲೆಕ್ಕ ಬೊಕ್ಕ ಟ್ರ್ಯಾಕ್ ಹಾಳಾವಂದಿಲೆಕ್ಕ ಪೊಸ ವೈಜ್ಞಾನಿಕವಾಯಿನ ಒಳಚರಂಡಿ ವ್ಯವಸ್ಥೆನ್ ನಿರ್ಮಾಣ ಮಲ್ತೊಂದು ಉಲ್ಲೆರ್. ಫೀಲ್ಡ್ ಅಪ್‌ಗ್ರೇಡ್: ಜಾವೆಲಿನ್ ತ್ರೋ, ಶಾಟ್ ಪುಟ್ ಬೊಕ್ಕ ಲಾಂಗ್ ಜಂಪ್ ಜಾಗೆನ್ ರಾಷ್ಟ್ರೀಯ ಮಟ್ಟದ ಸ್ಪರ್ಧೆಗ್ ಬೋಡಾಪಿನಂಚೆನೆ ಉನ್ನತೀಕರಣ ಮಲ್ಪುನ ಯೋಜನೆ ಉಂಡು. == ಇಡೆಮುಟ್ಟ ನಡತ್ತಿನ ಮಲ್ಲ ಲೇಸುಲು== # 17ನೇ ರಾಷ್ಟ್ರೀಯ ಯುವಜನೋತ್ಸವ (2012): ಭಾರತ ಸರ್ಕಾರದ ಯುವಜನ ವ್ಯವಹಾರ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಸಚಿವಾಲಯದ ವತಿಯಿರ್ದ್ 17ನೇ ರಾಷ್ಟ್ರೀಯ ಯುವಜನೋತ್ಸವ ಮುಲ್ಪ ನಡತ್ಂಡ್. ಈ ಲೇಸ್‌ಡ್ ಭಾರತದ ಬೇತೆ ಬೇತೆ ರಾಜ್ಯೊಲೆರ್ದ್ ಯುವಜನೆರ್ ಪಾಲ್ ಪಡೆದಿತ್ತೆರ್. ​# ಕರ್ನಾಟಕ ರಾಜ್ಯ ಕ್ರೀಡಾಕೂಟ (2025): ಜನವರಿ 2025ಡ್ ನಡತಿನ ರಾಜ್ಯ ಮಟ್ಟದ ಕ್ರೀಡಾಕೂಟನ್ ಮುಖ್ಯಮಂತ್ರಿ ಸಿದ್ದರಾಮಯ್ಯ ಮೇರ್ ಮುಲ್ಪನೆ ಉದ್ಘಾಟನೆ ಮಲ್ತೆರ್. ಈ ಲೇಸ್‌ಡ್ ವಾಲಿಬಾಲ್, ಹ್ಯಾಂಡ್‌ಬಾಲ್ ಬೊಕ್ಕ ನೆಟ್‌ಬಾಲ್ ಪಂತೊಲು ಮಂಗಳ ಸ್ಟೇಡಿಯಂಡ್ ನಡತ್ಂಡ್. ​# ನಶಾ ಮುಕ್ತ ಭಾರತ ವಾಕಥಾನ್ (2025): ಯುವಜನೆರೆಡ್ ಮಾದಕವ್ಯಸನದ ಬಗ್ಗೆ ಜಾಗೃತಿ ಮೂಡಾಯೆರೆ ನವೆಂಬರ್ 2025ಕ್ ಮಂಗಳ ಸ್ಟೇಡಿಯಂರ್ದ್ ಕರಾವಳಿ ಮೈದಾನ ಮುಟ್ಟ ಮಲ್ಲ ಮಟ್ಟದ ವಾಕಥಾನ್ ನಡತ್ಂಡ್. ​ಉಂದು ಮಾತ್ರ ಅತ್ತಂದೆ, ದಸರಾ ಕ್ರೀಡಾಕೂಟ, ಬೇತೆ ಬೇತೆ ಸಂಘ-ಸಂಸ್ಥೆಲೆನ ಕ್ರೀಡಾಕೂಟ, ಸ್ವಾತಂತ್ರ್ಯ ದಿನಾಚರಣೆ ಬೊಕ್ಕ ಗಣರಾಜ್ಯೋತ್ಸವದಂಚಿನ ರಾಷ್ಟ್ರೀಯ ಪರ್ಬೊಲೆನ ಪರೇಡ್‌ಲುಲಾ ಮುಲ್ಪನೆ ನಡಪುಂಡು. ==ಉಲ್ಲೇಕೊಲು== {{reflist}} izj56pybmk8dc3sc8s6oh7mzx5xd3sn 373896 373895 2026-10-28T06:04:14Z Mahaveer Indra 1023 373896 wikitext text/x-wiki {{Infobox venue | name = ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ | nickname = | image = Near the entrance of Mangala Stadium in Mangalore.jpg | image_caption = ಮಂಗಳೂರುಡುಪ್ಪುನ ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ಬಾಗೆಲ್‌ದ ಕೈತಲ್ | location = [[ಮಂಗಳೂರು]], [[ಕರ್ನಾಟಕ]] | groundbreaking = 2009 | opened = ಅಕ್ಟೋಬರ್ 2011 | owner = [[ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ]] | operator = (ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ) | cost = | architect = | tenants = [[ಕರ್ನಾಟಕ ಕ್ರಿಕೆಟ್ ತಂಡ]] , ([[ಮಂಗಳೂರು ಯುನೈಟೆಡ್]]) <br/> [[ಸೌತ್ ಯುನೈಟೆಡ್ ಎಫ್.ಸಿ.]] (2018-ಇಂಚಿಪೊ) | capacity = 8,000<ref name="capacity">{{Cite news |date=2019-12-20 |title=ಮಂಗಳಾ ಸ್ಟೇಡಿಯಂದ ಸುರೂತ ಹಂತದ ಬೇಲೆಗ್ ಸಿದ್ಧತೆ ಆತ್ಂಡ್ (Stage is set for first phase works of Mangala Stadium) |url=https://timesofindia.indiatimes.com/city/mangaluru/stage-set-for-first-phase-of-redevelopment-of-mangala-stadium/articleshow/72892244.cms |access-date=2026-06-09 |work=The Times of India |issn=0971-8257}}</ref> }} '''ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ''' [[ದಕ್ಷಿಣ ಕನ್ನಡ ಜಿಲ್ಲೆ|ದಕ್ಷಿಣ ಕನ್ನಡ]] ಜಿಲ್ಲೆದ ಕುಡ್ಲಡ್, ಪೇಂಟೆದ ನಡುಟು ಉಪ್ಪುನ ಒಂಜಿ ಪ್ರಮುಖವಾಯಿನ ಮಲ್ಲ ಮೈದಾನ. ಕುಡ್ಲದ ಗ್ರಾಮ ದೇವತೆ ಮಂಗಳಾದೇವಿನ ಪುದರ್‌ನ್ ಈ ಕ್ರೀಡಾಂಗಣಗ್ ದೀತೆರ್. ಈ ಮೈದಾನ ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ ಬೊಕ್ಕ [[ಕರ್ನಾಟಕ]] ರಾಜ್ಯದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆದ ಆಡಳಿತದ ಅಡಿಟ್ ಬರ್ಪುಂಡು. ಕರಾವಳಿ ಭಾಗದ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ಶಾಲೆ ಕಾಲೇಜಿದ ಜೋಕುಲೆಗ್ ಈ ಮೈದಾನ ಒಂಜಿ ಮುಖ್ಯವಾಯಿನ ತರಬೇತಿ ಕೇಂದ್ರ ಆದುಂಡು.<ref>{{cite web |title=Mangala Stadium |url=https://manipalblog.com/mangala-stadium/ |website=manipalblog.com |publisher=ManipalBlog.com |access-date=28 October 2026}}</ref> ==ಇತಿಹಾಸೊ== ಇತ್ತೆ ಇಪ್ಪುನ ಮಲ್ಲ ಮೈದಾನ ದುಂಬು ಎಲ್ಯಡ್ ಇತ್ತ್ಂಡ್. ಐಕ್ ಮಣ್ಣಗುಡ್ಡ ಮೈದಾನ ಪಂದ್ ಪುದರ್ ಇತ್ತ್ಂಡ್. ೧೯೯೫ನೇ ಇಸವಿಡ್ ಇಂದೆನ್ ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ಪಂದ್ ಪುದರ್ ದೀಯೆರ್, ಅತ್ತಂದೆ ಬೇತೆ ಬೇತೆ ರೀತಿದ ಆಟ ಕೂಟೊಲು ನಡಪರ ಸುರು ಆಂಡ್.<ref>{{cite web |title=ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ೨ ತಿಂಗಳು ಬಂದ್ |url=https://udayavani.com/dakshina-kannada-news/mangaluru-mangala-stadium-closed-for-2-months-446890?lang=kn |website=udayavani.com |publisher=udayavani |access-date=28 October 2026}}</ref> ಸುರುಕು ಮುಲ್ಪ ಮಣ್ಣ್‌ದ ಓಟದ ಟ್ರ್ಯಾಕ್ ಇತ್ತ್ಂಡ್. ಕ್ರೀಡಾಪಟುಕುಲೆನ ಮಸ್ತ್ ವರ್ಷದ ಬೇಡಿಕೆದ ಪ್ರಕಾರ ೨೦೧೩ನೇ ಇಸವಿಡ್ ಕ್ರೀಡಾಂಗಣಗ್ ೪೦೦ ಮೀಟರ್‌ದ ಪೊಸ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್‌ನ್ ಉದ್ಘಾಟನೆ ಮಲ್ತೆರ್. == ವ್ಯವಸ್ತೆಲು == ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣೊಡು ಕ್ರೀಡಾಪಟುಕ್ಲೆಗ್ ಬೊಕ್ಕ ಸಾರ್ವಜನಿಕೆರೆಗ್ ಸದ್ಯೊಗು ಇಪ್ಪುನ ಸೌಲಭೊಲು # ಓಟದ ಟ್ರ್ಯಾಕ್- ಬಲಿಪುನ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ತರಬೇತಿ ಮಲ್ಪೆರೆ ೪೦೦ ಮೀಟರ್‌ದ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್ ಮುಲ್ಪ ಉಂಡು. # ಫೀಲ್ಡ್ ಕ್ರೀಡೆಲು - ಕ್ರೀಡಾಂಗಣದ ಉಲಾಯಿಡ್ ಮುಲ್ಪ ಉದ್ದ ಲಾಗಿಯರ, ಗುಂಡು ಎಸೆತ, ಜಾವೆಲಿನ್ ತ್ರೋ, ಚಕ್ರ ಎಸೆತ, ಬೊಕ್ಕ ಹ್ಯಾಮರ್-ತ್ರೋ ಇಂಚಿನ ಗೊಬ್ಬುಲೆಗ್ ಪ್ರತ್ಯೇಕ ವ್ಯವಸ್ಥೆ ಉಂಡು. # ಈಜುಗೊಳ- ಕ್ರೀಡಾಂಗಣದ ಕೈತಲ್ಡ್ ಮೀಂದರ ಕಲ್ಪೆರೆ ಬೊಕ್ಕ ಸ್ಪರ್ಧೆಲೆಗ್ ಬೋಡಾದ್ ಈಜುಗೊಳ ಉಂಡು. # ಗೊಬ್ಬುದ ಮೈದಾನ: ನಡುಟು ಉಪ್ಪುನ ಪಚ್ಚೆ ಮೈದಾನಡ್ ಫುಟ್ಬಾಲ್ ಬೊಕ್ಕ ಬೇತೆ ಕ್ರೀಡೆಲೆನ್ ಗೊಬ್ಬೊಲಿ. # ಗ್ಯಾಲರಿಡ್ ಸಾವಿರಾರು ಜನ ಕುಲ್ಲುನೆಕ್ ಎಡ್ಡೆ ವ್ಯವಸ್ಥೆ ಉಂಡು. == ದುಂಬಗ್ ನಡಪುನ ಅಬಿವೃದ್ಧಿ ಬೇಲೆಲು== ಕರ್ನಾಟಕ ಸರ್ಕಾರದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಕೆಲು ಜಂಟಿಯಾದ್, ದುಂಬುದ ದಿನೊಟು ಈ ಕ್ರೀಡಾಂಗಣಗ್ ಅಬಿವೃದ್ಧಿ ಮಲ್ಪುನ ಮಲ್ಲ ಯೋಜನೆನ್ ಪಾಡೊಂದೆರ್. ಐತ ಬಗೆಟ್ ಮಾಹಿತಿಲು ೩ ಕೋಟಿ ರೂ. ಅಭಿವೃದ್ಧಿ: ರಾಜ್ಯ ಸರ್ಕಾರ ಬೊಕ್ಕ ಮುಖ್ಯಮಂತ್ರಿ ಸಿದ್ದರಾಮಯ್ಯೆರೆನ ಅನುದಾನದಡಿಟ್ ೩ ಕೋಟಿ ರೂಪಾಯಿ ಖರ್ಚ್ ಮಲ್ತ್‌ದ್ ಮಂಗಳ ಕ್ರೀಡಾಂಗಣದ ನವೀಕರಣ ಬೇಲೆಗ್ ಚಾಲನೆ ಕೊರ್ತೆರ್. ಉಂದೆಕ್ ೩ ಕೋಟಿ ರೂ. ಬಜೆಟ್‌ಡ್ ಮೀಸಲಾತ್ಂಡ್ ಬೊಕ್ಕ ೧.೫ ಕೋಟಿ ರೂ. ಹೆಚ್ಚುವರಿಯಾದ್ ಕೊರ್ತೆರ್.<ref>{{cite web |title=Stadium Development |url=https://www.thehindu.com/news/cities/Mangalore/35-crore-for-mangala-stadium-development/article29747722.ece |website=thehindu.com |publisher=thehindu |access-date=28 October 2026}}</ref> ಪೊಸ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್: ಮುಲ್ಪ ಇತ್ತಿನ ೧೫ ವರ್ಷ ಪರತ್ ಆಯಿನ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್ ಬರ್ಸ ಬೊಕ್ಕ ದೊಂಬುಗು ಹಾಳಾದ್ ಜಾರುನಂಚಿತ್ತ್ಂಡ್. ಅಂಚಾದ್ ಪರತ್ ಟ್ರ್ಯಾಕ್ ದೆತ್ತ್‌ದ್ ಪೊಸತ್ ಪಾಡುನ ಬೇಲೆ ನಡತೊಂದು ಉಂಡು.<ref>{{cite web |title=synthetic Turf |url=https://www.thehindu.com/news/cities/Mangalore/mangala-stadium-is-all-set-to-get-fullfledged-synthetic-turf/article2773967.ece |website=thehindu.com |publisher=thehindu |access-date=28 October 2026}}</ref> ಒಳಚರಂಡಿ ವ್ಯವಸ್ಥೆ (Drainage System): ಕುಡ್ಲಡ್ ಬರ್ಸ ಜಾಸ್ತಿ ಬರ್ಪುನೈರ್ದಾವರ ಮೈದಾನಡ್ ನೀರ್ ಉಂತಂದಿಲೆಕ್ಕ ಬೊಕ್ಕ ಟ್ರ್ಯಾಕ್ ಹಾಳಾವಂದಿಲೆಕ್ಕ ಪೊಸ ವೈಜ್ಞಾನಿಕವಾಯಿನ ಒಳಚರಂಡಿ ವ್ಯವಸ್ಥೆನ್ ನಿರ್ಮಾಣ ಮಲ್ತೊಂದು ಉಲ್ಲೆರ್. ಫೀಲ್ಡ್ ಅಪ್‌ಗ್ರೇಡ್: ಜಾವೆಲಿನ್ ತ್ರೋ, ಶಾಟ್ ಪುಟ್ ಬೊಕ್ಕ ಲಾಂಗ್ ಜಂಪ್ ಜಾಗೆನ್ ರಾಷ್ಟ್ರೀಯ ಮಟ್ಟದ ಸ್ಪರ್ಧೆಗ್ ಬೋಡಾಪಿನಂಚೆನೆ ಉನ್ನತೀಕರಣ ಮಲ್ಪುನ ಯೋಜನೆ ಉಂಡು. == ಇಡೆಮುಟ್ಟ ನಡತ್ತಿನ ಮಲ್ಲ ಲೇಸುಲು== # 17ನೇ ರಾಷ್ಟ್ರೀಯ ಯುವಜನೋತ್ಸವ (2012): ಭಾರತ ಸರ್ಕಾರದ ಯುವಜನ ವ್ಯವಹಾರ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಸಚಿವಾಲಯದ ವತಿಯಿರ್ದ್ 17ನೇ ರಾಷ್ಟ್ರೀಯ ಯುವಜನೋತ್ಸವ ಮುಲ್ಪ ನಡತ್ಂಡ್. ಈ ಲೇಸ್‌ಡ್ ಭಾರತದ ಬೇತೆ ಬೇತೆ ರಾಜ್ಯೊಲೆರ್ದ್ ಯುವಜನೆರ್ ಪಾಲ್ ಪಡೆದಿತ್ತೆರ್. ​# ಕರ್ನಾಟಕ ರಾಜ್ಯ ಕ್ರೀಡಾಕೂಟ (2025): ಜನವರಿ 2025ಡ್ ನಡತಿನ ರಾಜ್ಯ ಮಟ್ಟದ ಕ್ರೀಡಾಕೂಟನ್ ಮುಖ್ಯಮಂತ್ರಿ ಸಿದ್ದರಾಮಯ್ಯ ಮೇರ್ ಮುಲ್ಪನೆ ಉದ್ಘಾಟನೆ ಮಲ್ತೆರ್. ಈ ಲೇಸ್‌ಡ್ ವಾಲಿಬಾಲ್, ಹ್ಯಾಂಡ್‌ಬಾಲ್ ಬೊಕ್ಕ ನೆಟ್‌ಬಾಲ್ ಪಂತೊಲು ಮಂಗಳ ಸ್ಟೇಡಿಯಂಡ್ ನಡತ್ಂಡ್. ​# ನಶಾ ಮುಕ್ತ ಭಾರತ ವಾಕಥಾನ್ (2025): ಯುವಜನೆರೆಡ್ ಮಾದಕವ್ಯಸನದ ಬಗ್ಗೆ ಜಾಗೃತಿ ಮೂಡಾಯೆರೆ ನವೆಂಬರ್ 2025ಕ್ ಮಂಗಳ ಸ್ಟೇಡಿಯಂರ್ದ್ ಕರಾವಳಿ ಮೈದಾನ ಮುಟ್ಟ ಮಲ್ಲ ಮಟ್ಟದ ವಾಕಥಾನ್ ನಡತ್ಂಡ್. ​ಉಂದು ಮಾತ್ರ ಅತ್ತಂದೆ, ದಸರಾ ಕ್ರೀಡಾಕೂಟ, ಬೇತೆ ಬೇತೆ ಸಂಘ-ಸಂಸ್ಥೆಲೆನ ಕ್ರೀಡಾಕೂಟ, ಸ್ವಾತಂತ್ರ್ಯ ದಿನಾಚರಣೆ ಬೊಕ್ಕ ಗಣರಾಜ್ಯೋತ್ಸವದಂಚಿನ ರಾಷ್ಟ್ರೀಯ ಪರ್ಬೊಲೆನ ಪರೇಡ್‌ಲುಲಾ ಮುಲ್ಪನೆ ನಡಪುಂಡು. ==ಉಲ್ಲೇಕೊಲು== {{reflist}} 0ainpp1xzba7p3v4isxejw9v7ppo4lk 373897 373896 2026-10-28T06:07:20Z Mahaveer Indra 1023 /* ಇಡೆಮುಟ್ಟ ನಡತ್ತಿನ ಮಲ್ಲ ಲೇಸುಲು */ 373897 wikitext text/x-wiki {{Infobox venue | name = ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ | nickname = | image = Near the entrance of Mangala Stadium in Mangalore.jpg | image_caption = ಮಂಗಳೂರುಡುಪ್ಪುನ ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ಬಾಗೆಲ್‌ದ ಕೈತಲ್ | location = [[ಮಂಗಳೂರು]], [[ಕರ್ನಾಟಕ]] | groundbreaking = 2009 | opened = ಅಕ್ಟೋಬರ್ 2011 | owner = [[ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ]] | operator = (ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ) | cost = | architect = | tenants = [[ಕರ್ನಾಟಕ ಕ್ರಿಕೆಟ್ ತಂಡ]] , ([[ಮಂಗಳೂರು ಯುನೈಟೆಡ್]]) <br/> [[ಸೌತ್ ಯುನೈಟೆಡ್ ಎಫ್.ಸಿ.]] (2018-ಇಂಚಿಪೊ) | capacity = 8,000<ref name="capacity">{{Cite news |date=2019-12-20 |title=ಮಂಗಳಾ ಸ್ಟೇಡಿಯಂದ ಸುರೂತ ಹಂತದ ಬೇಲೆಗ್ ಸಿದ್ಧತೆ ಆತ್ಂಡ್ (Stage is set for first phase works of Mangala Stadium) |url=https://timesofindia.indiatimes.com/city/mangaluru/stage-set-for-first-phase-of-redevelopment-of-mangala-stadium/articleshow/72892244.cms |access-date=2026-06-09 |work=The Times of India |issn=0971-8257}}</ref> }} '''ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ''' [[ದಕ್ಷಿಣ ಕನ್ನಡ ಜಿಲ್ಲೆ|ದಕ್ಷಿಣ ಕನ್ನಡ]] ಜಿಲ್ಲೆದ ಕುಡ್ಲಡ್, ಪೇಂಟೆದ ನಡುಟು ಉಪ್ಪುನ ಒಂಜಿ ಪ್ರಮುಖವಾಯಿನ ಮಲ್ಲ ಮೈದಾನ. ಕುಡ್ಲದ ಗ್ರಾಮ ದೇವತೆ ಮಂಗಳಾದೇವಿನ ಪುದರ್‌ನ್ ಈ ಕ್ರೀಡಾಂಗಣಗ್ ದೀತೆರ್. ಈ ಮೈದಾನ ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ ಬೊಕ್ಕ [[ಕರ್ನಾಟಕ]] ರಾಜ್ಯದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆದ ಆಡಳಿತದ ಅಡಿಟ್ ಬರ್ಪುಂಡು. ಕರಾವಳಿ ಭಾಗದ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ಶಾಲೆ ಕಾಲೇಜಿದ ಜೋಕುಲೆಗ್ ಈ ಮೈದಾನ ಒಂಜಿ ಮುಖ್ಯವಾಯಿನ ತರಬೇತಿ ಕೇಂದ್ರ ಆದುಂಡು.<ref>{{cite web |title=Mangala Stadium |url=https://manipalblog.com/mangala-stadium/ |website=manipalblog.com |publisher=ManipalBlog.com |access-date=28 October 2026}}</ref> ==ಇತಿಹಾಸೊ== ಇತ್ತೆ ಇಪ್ಪುನ ಮಲ್ಲ ಮೈದಾನ ದುಂಬು ಎಲ್ಯಡ್ ಇತ್ತ್ಂಡ್. ಐಕ್ ಮಣ್ಣಗುಡ್ಡ ಮೈದಾನ ಪಂದ್ ಪುದರ್ ಇತ್ತ್ಂಡ್. ೧೯೯೫ನೇ ಇಸವಿಡ್ ಇಂದೆನ್ ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ಪಂದ್ ಪುದರ್ ದೀಯೆರ್, ಅತ್ತಂದೆ ಬೇತೆ ಬೇತೆ ರೀತಿದ ಆಟ ಕೂಟೊಲು ನಡಪರ ಸುರು ಆಂಡ್.<ref>{{cite web |title=ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ೨ ತಿಂಗಳು ಬಂದ್ |url=https://udayavani.com/dakshina-kannada-news/mangaluru-mangala-stadium-closed-for-2-months-446890?lang=kn |website=udayavani.com |publisher=udayavani |access-date=28 October 2026}}</ref> ಸುರುಕು ಮುಲ್ಪ ಮಣ್ಣ್‌ದ ಓಟದ ಟ್ರ್ಯಾಕ್ ಇತ್ತ್ಂಡ್. ಕ್ರೀಡಾಪಟುಕುಲೆನ ಮಸ್ತ್ ವರ್ಷದ ಬೇಡಿಕೆದ ಪ್ರಕಾರ ೨೦೧೩ನೇ ಇಸವಿಡ್ ಕ್ರೀಡಾಂಗಣಗ್ ೪೦೦ ಮೀಟರ್‌ದ ಪೊಸ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್‌ನ್ ಉದ್ಘಾಟನೆ ಮಲ್ತೆರ್. == ವ್ಯವಸ್ತೆಲು == ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣೊಡು ಕ್ರೀಡಾಪಟುಕ್ಲೆಗ್ ಬೊಕ್ಕ ಸಾರ್ವಜನಿಕೆರೆಗ್ ಸದ್ಯೊಗು ಇಪ್ಪುನ ಸೌಲಭೊಲು # ಓಟದ ಟ್ರ್ಯಾಕ್- ಬಲಿಪುನ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ತರಬೇತಿ ಮಲ್ಪೆರೆ ೪೦೦ ಮೀಟರ್‌ದ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್ ಮುಲ್ಪ ಉಂಡು. # ಫೀಲ್ಡ್ ಕ್ರೀಡೆಲು - ಕ್ರೀಡಾಂಗಣದ ಉಲಾಯಿಡ್ ಮುಲ್ಪ ಉದ್ದ ಲಾಗಿಯರ, ಗುಂಡು ಎಸೆತ, ಜಾವೆಲಿನ್ ತ್ರೋ, ಚಕ್ರ ಎಸೆತ, ಬೊಕ್ಕ ಹ್ಯಾಮರ್-ತ್ರೋ ಇಂಚಿನ ಗೊಬ್ಬುಲೆಗ್ ಪ್ರತ್ಯೇಕ ವ್ಯವಸ್ಥೆ ಉಂಡು. # ಈಜುಗೊಳ- ಕ್ರೀಡಾಂಗಣದ ಕೈತಲ್ಡ್ ಮೀಂದರ ಕಲ್ಪೆರೆ ಬೊಕ್ಕ ಸ್ಪರ್ಧೆಲೆಗ್ ಬೋಡಾದ್ ಈಜುಗೊಳ ಉಂಡು. # ಗೊಬ್ಬುದ ಮೈದಾನ: ನಡುಟು ಉಪ್ಪುನ ಪಚ್ಚೆ ಮೈದಾನಡ್ ಫುಟ್ಬಾಲ್ ಬೊಕ್ಕ ಬೇತೆ ಕ್ರೀಡೆಲೆನ್ ಗೊಬ್ಬೊಲಿ. # ಗ್ಯಾಲರಿಡ್ ಸಾವಿರಾರು ಜನ ಕುಲ್ಲುನೆಕ್ ಎಡ್ಡೆ ವ್ಯವಸ್ಥೆ ಉಂಡು. == ದುಂಬಗ್ ನಡಪುನ ಅಬಿವೃದ್ಧಿ ಬೇಲೆಲು== ಕರ್ನಾಟಕ ಸರ್ಕಾರದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಕೆಲು ಜಂಟಿಯಾದ್, ದುಂಬುದ ದಿನೊಟು ಈ ಕ್ರೀಡಾಂಗಣಗ್ ಅಬಿವೃದ್ಧಿ ಮಲ್ಪುನ ಮಲ್ಲ ಯೋಜನೆನ್ ಪಾಡೊಂದೆರ್. ಐತ ಬಗೆಟ್ ಮಾಹಿತಿಲು ೩ ಕೋಟಿ ರೂ. ಅಭಿವೃದ್ಧಿ: ರಾಜ್ಯ ಸರ್ಕಾರ ಬೊಕ್ಕ ಮುಖ್ಯಮಂತ್ರಿ ಸಿದ್ದರಾಮಯ್ಯೆರೆನ ಅನುದಾನದಡಿಟ್ ೩ ಕೋಟಿ ರೂಪಾಯಿ ಖರ್ಚ್ ಮಲ್ತ್‌ದ್ ಮಂಗಳ ಕ್ರೀಡಾಂಗಣದ ನವೀಕರಣ ಬೇಲೆಗ್ ಚಾಲನೆ ಕೊರ್ತೆರ್. ಉಂದೆಕ್ ೩ ಕೋಟಿ ರೂ. ಬಜೆಟ್‌ಡ್ ಮೀಸಲಾತ್ಂಡ್ ಬೊಕ್ಕ ೧.೫ ಕೋಟಿ ರೂ. ಹೆಚ್ಚುವರಿಯಾದ್ ಕೊರ್ತೆರ್.<ref>{{cite web |title=Stadium Development |url=https://www.thehindu.com/news/cities/Mangalore/35-crore-for-mangala-stadium-development/article29747722.ece |website=thehindu.com |publisher=thehindu |access-date=28 October 2026}}</ref> ಪೊಸ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್: ಮುಲ್ಪ ಇತ್ತಿನ ೧೫ ವರ್ಷ ಪರತ್ ಆಯಿನ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್ ಬರ್ಸ ಬೊಕ್ಕ ದೊಂಬುಗು ಹಾಳಾದ್ ಜಾರುನಂಚಿತ್ತ್ಂಡ್. ಅಂಚಾದ್ ಪರತ್ ಟ್ರ್ಯಾಕ್ ದೆತ್ತ್‌ದ್ ಪೊಸತ್ ಪಾಡುನ ಬೇಲೆ ನಡತೊಂದು ಉಂಡು.<ref>{{cite web |title=synthetic Turf |url=https://www.thehindu.com/news/cities/Mangalore/mangala-stadium-is-all-set-to-get-fullfledged-synthetic-turf/article2773967.ece |website=thehindu.com |publisher=thehindu |access-date=28 October 2026}}</ref> ಒಳಚರಂಡಿ ವ್ಯವಸ್ಥೆ (Drainage System): ಕುಡ್ಲಡ್ ಬರ್ಸ ಜಾಸ್ತಿ ಬರ್ಪುನೈರ್ದಾವರ ಮೈದಾನಡ್ ನೀರ್ ಉಂತಂದಿಲೆಕ್ಕ ಬೊಕ್ಕ ಟ್ರ್ಯಾಕ್ ಹಾಳಾವಂದಿಲೆಕ್ಕ ಪೊಸ ವೈಜ್ಞಾನಿಕವಾಯಿನ ಒಳಚರಂಡಿ ವ್ಯವಸ್ಥೆನ್ ನಿರ್ಮಾಣ ಮಲ್ತೊಂದು ಉಲ್ಲೆರ್. ಫೀಲ್ಡ್ ಅಪ್‌ಗ್ರೇಡ್: ಜಾವೆಲಿನ್ ತ್ರೋ, ಶಾಟ್ ಪುಟ್ ಬೊಕ್ಕ ಲಾಂಗ್ ಜಂಪ್ ಜಾಗೆನ್ ರಾಷ್ಟ್ರೀಯ ಮಟ್ಟದ ಸ್ಪರ್ಧೆಗ್ ಬೋಡಾಪಿನಂಚೆನೆ ಉನ್ನತೀಕರಣ ಮಲ್ಪುನ ಯೋಜನೆ ಉಂಡು. == ಇಡೆಮುಟ್ಟ ನಡತ್ತಿನ ಮಲ್ಲ ಲೇಸುಲು== ===17ನೇ ರಾಷ್ಟ್ರೀಯ ಯುವಜನೋತ್ಸವ (2012)=== ಭಾರತ ಸರ್ಕಾರದ ಯುವಜನ ವ್ಯವಹಾರ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಸಚಿವಾಲಯದ ವತಿಯಿರ್ದ್ 17ನೇ ರಾಷ್ಟ್ರೀಯ ಯುವಜನೋತ್ಸವ ಮುಲ್ಪ ನಡತ್ಂಡ್. ಈ ಲೇಸ್‌ಡ್ ಭಾರತದ ಬೇತೆ ಬೇತೆ ರಾಜ್ಯೊಲೆರ್ದ್ ಯುವಜನೆರ್ ಪಾಲ್ ಪಡೆದಿತ್ತೆರ್. ​===ಕರ್ನಾಟಕ ರಾಜ್ಯ ಕ್ರೀಡಾಕೂಟ (2025)=== ಜನವರಿ 2025ಡ್ ನಡತಿನ ರಾಜ್ಯ ಮಟ್ಟದ ಕ್ರೀಡಾಕೂಟನ್ ಮುಖ್ಯಮಂತ್ರಿ ಸಿದ್ದರಾಮಯ್ಯ ಮೇರ್ ಮುಲ್ಪನೆ ಉದ್ಘಾಟನೆ ಮಲ್ತೆರ್. ಈ ಲೇಸ್‌ಡ್ ವಾಲಿಬಾಲ್, ಹ್ಯಾಂಡ್‌ಬಾಲ್ ಬೊಕ್ಕ ನೆಟ್‌ಬಾಲ್ ಪಂತೊಲು ಮಂಗಳ ಸ್ಟೇಡಿಯಂಡ್ ನಡತ್ಂಡ್. ​===ನಶಾ ಮುಕ್ತ ಭಾರತ ವಾಕಥಾನ್ (2025)=== ಯುವಜನೆರೆಡ್ ಮಾದಕವ್ಯಸನದ ಬಗ್ಗೆ ಜಾಗೃತಿ ಮೂಡಾಯೆರೆ ನವೆಂಬರ್ 2025ಕ್ ಮಂಗಳ ಸ್ಟೇಡಿಯಂರ್ದ್ ಕರಾವಳಿ ಮೈದಾನ ಮುಟ್ಟ ಮಲ್ಲ ಮಟ್ಟದ ವಾಕಥಾನ್ ನಡತ್ಂಡ್. ​ಉಂದು ಮಾತ್ರ ಅತ್ತಂದೆ, ದಸರಾ ಕ್ರೀಡಾಕೂಟ, ಬೇತೆ ಬೇತೆ ಸಂಘ-ಸಂಸ್ಥೆಲೆನ ಕ್ರೀಡಾಕೂಟ, ಸ್ವಾತಂತ್ರ್ಯ ದಿನಾಚರಣೆ ಬೊಕ್ಕ ಗಣರಾಜ್ಯೋತ್ಸವದಂಚಿನ ರಾಷ್ಟ್ರೀಯ ಪರ್ಬೊಲೆನ ಪರೇಡ್‌ಲುಲಾ ಮುಲ್ಪನೆ ನಡಪುಂಡು. ==ಉಲ್ಲೇಕೊಲು== {{reflist}} 3kv4i4xantalukf0gtcqgj1764rhe3d 373898 373897 2026-10-28T06:08:45Z Mahaveer Indra 1023 /* 17ನೇ ರಾಷ್ಟ್ರೀಯ ಯುವಜನೋತ್ಸವ (2012) */ 373898 wikitext text/x-wiki {{Infobox venue | name = ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ | nickname = | image = Near the entrance of Mangala Stadium in Mangalore.jpg | image_caption = ಮಂಗಳೂರುಡುಪ್ಪುನ ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ಬಾಗೆಲ್‌ದ ಕೈತಲ್ | location = [[ಮಂಗಳೂರು]], [[ಕರ್ನಾಟಕ]] | groundbreaking = 2009 | opened = ಅಕ್ಟೋಬರ್ 2011 | owner = [[ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ]] | operator = (ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ) | cost = | architect = | tenants = [[ಕರ್ನಾಟಕ ಕ್ರಿಕೆಟ್ ತಂಡ]] , ([[ಮಂಗಳೂರು ಯುನೈಟೆಡ್]]) <br/> [[ಸೌತ್ ಯುನೈಟೆಡ್ ಎಫ್.ಸಿ.]] (2018-ಇಂಚಿಪೊ) | capacity = 8,000<ref name="capacity">{{Cite news |date=2019-12-20 |title=ಮಂಗಳಾ ಸ್ಟೇಡಿಯಂದ ಸುರೂತ ಹಂತದ ಬೇಲೆಗ್ ಸಿದ್ಧತೆ ಆತ್ಂಡ್ (Stage is set for first phase works of Mangala Stadium) |url=https://timesofindia.indiatimes.com/city/mangaluru/stage-set-for-first-phase-of-redevelopment-of-mangala-stadium/articleshow/72892244.cms |access-date=2026-06-09 |work=The Times of India |issn=0971-8257}}</ref> }} '''ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ''' [[ದಕ್ಷಿಣ ಕನ್ನಡ ಜಿಲ್ಲೆ|ದಕ್ಷಿಣ ಕನ್ನಡ]] ಜಿಲ್ಲೆದ ಕುಡ್ಲಡ್, ಪೇಂಟೆದ ನಡುಟು ಉಪ್ಪುನ ಒಂಜಿ ಪ್ರಮುಖವಾಯಿನ ಮಲ್ಲ ಮೈದಾನ. ಕುಡ್ಲದ ಗ್ರಾಮ ದೇವತೆ ಮಂಗಳಾದೇವಿನ ಪುದರ್‌ನ್ ಈ ಕ್ರೀಡಾಂಗಣಗ್ ದೀತೆರ್. ಈ ಮೈದಾನ ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ ಬೊಕ್ಕ [[ಕರ್ನಾಟಕ]] ರಾಜ್ಯದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆದ ಆಡಳಿತದ ಅಡಿಟ್ ಬರ್ಪುಂಡು. ಕರಾವಳಿ ಭಾಗದ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ಶಾಲೆ ಕಾಲೇಜಿದ ಜೋಕುಲೆಗ್ ಈ ಮೈದಾನ ಒಂಜಿ ಮುಖ್ಯವಾಯಿನ ತರಬೇತಿ ಕೇಂದ್ರ ಆದುಂಡು.<ref>{{cite web |title=Mangala Stadium |url=https://manipalblog.com/mangala-stadium/ |website=manipalblog.com |publisher=ManipalBlog.com |access-date=28 October 2026}}</ref> ==ಇತಿಹಾಸೊ== ಇತ್ತೆ ಇಪ್ಪುನ ಮಲ್ಲ ಮೈದಾನ ದುಂಬು ಎಲ್ಯಡ್ ಇತ್ತ್ಂಡ್. ಐಕ್ ಮಣ್ಣಗುಡ್ಡ ಮೈದಾನ ಪಂದ್ ಪುದರ್ ಇತ್ತ್ಂಡ್. ೧೯೯೫ನೇ ಇಸವಿಡ್ ಇಂದೆನ್ ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ಪಂದ್ ಪುದರ್ ದೀಯೆರ್, ಅತ್ತಂದೆ ಬೇತೆ ಬೇತೆ ರೀತಿದ ಆಟ ಕೂಟೊಲು ನಡಪರ ಸುರು ಆಂಡ್.<ref>{{cite web |title=ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ೨ ತಿಂಗಳು ಬಂದ್ |url=https://udayavani.com/dakshina-kannada-news/mangaluru-mangala-stadium-closed-for-2-months-446890?lang=kn |website=udayavani.com |publisher=udayavani |access-date=28 October 2026}}</ref> ಸುರುಕು ಮುಲ್ಪ ಮಣ್ಣ್‌ದ ಓಟದ ಟ್ರ್ಯಾಕ್ ಇತ್ತ್ಂಡ್. ಕ್ರೀಡಾಪಟುಕುಲೆನ ಮಸ್ತ್ ವರ್ಷದ ಬೇಡಿಕೆದ ಪ್ರಕಾರ ೨೦೧೩ನೇ ಇಸವಿಡ್ ಕ್ರೀಡಾಂಗಣಗ್ ೪೦೦ ಮೀಟರ್‌ದ ಪೊಸ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್‌ನ್ ಉದ್ಘಾಟನೆ ಮಲ್ತೆರ್. == ವ್ಯವಸ್ತೆಲು == ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣೊಡು ಕ್ರೀಡಾಪಟುಕ್ಲೆಗ್ ಬೊಕ್ಕ ಸಾರ್ವಜನಿಕೆರೆಗ್ ಸದ್ಯೊಗು ಇಪ್ಪುನ ಸೌಲಭೊಲು # ಓಟದ ಟ್ರ್ಯಾಕ್- ಬಲಿಪುನ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ತರಬೇತಿ ಮಲ್ಪೆರೆ ೪೦೦ ಮೀಟರ್‌ದ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್ ಮುಲ್ಪ ಉಂಡು. # ಫೀಲ್ಡ್ ಕ್ರೀಡೆಲು - ಕ್ರೀಡಾಂಗಣದ ಉಲಾಯಿಡ್ ಮುಲ್ಪ ಉದ್ದ ಲಾಗಿಯರ, ಗುಂಡು ಎಸೆತ, ಜಾವೆಲಿನ್ ತ್ರೋ, ಚಕ್ರ ಎಸೆತ, ಬೊಕ್ಕ ಹ್ಯಾಮರ್-ತ್ರೋ ಇಂಚಿನ ಗೊಬ್ಬುಲೆಗ್ ಪ್ರತ್ಯೇಕ ವ್ಯವಸ್ಥೆ ಉಂಡು. # ಈಜುಗೊಳ- ಕ್ರೀಡಾಂಗಣದ ಕೈತಲ್ಡ್ ಮೀಂದರ ಕಲ್ಪೆರೆ ಬೊಕ್ಕ ಸ್ಪರ್ಧೆಲೆಗ್ ಬೋಡಾದ್ ಈಜುಗೊಳ ಉಂಡು. # ಗೊಬ್ಬುದ ಮೈದಾನ: ನಡುಟು ಉಪ್ಪುನ ಪಚ್ಚೆ ಮೈದಾನಡ್ ಫುಟ್ಬಾಲ್ ಬೊಕ್ಕ ಬೇತೆ ಕ್ರೀಡೆಲೆನ್ ಗೊಬ್ಬೊಲಿ. # ಗ್ಯಾಲರಿಡ್ ಸಾವಿರಾರು ಜನ ಕುಲ್ಲುನೆಕ್ ಎಡ್ಡೆ ವ್ಯವಸ್ಥೆ ಉಂಡು. == ದುಂಬಗ್ ನಡಪುನ ಅಬಿವೃದ್ಧಿ ಬೇಲೆಲು== ಕರ್ನಾಟಕ ಸರ್ಕಾರದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಕೆಲು ಜಂಟಿಯಾದ್, ದುಂಬುದ ದಿನೊಟು ಈ ಕ್ರೀಡಾಂಗಣಗ್ ಅಬಿವೃದ್ಧಿ ಮಲ್ಪುನ ಮಲ್ಲ ಯೋಜನೆನ್ ಪಾಡೊಂದೆರ್. ಐತ ಬಗೆಟ್ ಮಾಹಿತಿಲು ೩ ಕೋಟಿ ರೂ. ಅಭಿವೃದ್ಧಿ: ರಾಜ್ಯ ಸರ್ಕಾರ ಬೊಕ್ಕ ಮುಖ್ಯಮಂತ್ರಿ ಸಿದ್ದರಾಮಯ್ಯೆರೆನ ಅನುದಾನದಡಿಟ್ ೩ ಕೋಟಿ ರೂಪಾಯಿ ಖರ್ಚ್ ಮಲ್ತ್‌ದ್ ಮಂಗಳ ಕ್ರೀಡಾಂಗಣದ ನವೀಕರಣ ಬೇಲೆಗ್ ಚಾಲನೆ ಕೊರ್ತೆರ್. ಉಂದೆಕ್ ೩ ಕೋಟಿ ರೂ. ಬಜೆಟ್‌ಡ್ ಮೀಸಲಾತ್ಂಡ್ ಬೊಕ್ಕ ೧.೫ ಕೋಟಿ ರೂ. ಹೆಚ್ಚುವರಿಯಾದ್ ಕೊರ್ತೆರ್.<ref>{{cite web |title=Stadium Development |url=https://www.thehindu.com/news/cities/Mangalore/35-crore-for-mangala-stadium-development/article29747722.ece |website=thehindu.com |publisher=thehindu |access-date=28 October 2026}}</ref> ಪೊಸ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್: ಮುಲ್ಪ ಇತ್ತಿನ ೧೫ ವರ್ಷ ಪರತ್ ಆಯಿನ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್ ಬರ್ಸ ಬೊಕ್ಕ ದೊಂಬುಗು ಹಾಳಾದ್ ಜಾರುನಂಚಿತ್ತ್ಂಡ್. ಅಂಚಾದ್ ಪರತ್ ಟ್ರ್ಯಾಕ್ ದೆತ್ತ್‌ದ್ ಪೊಸತ್ ಪಾಡುನ ಬೇಲೆ ನಡತೊಂದು ಉಂಡು.<ref>{{cite web |title=synthetic Turf |url=https://www.thehindu.com/news/cities/Mangalore/mangala-stadium-is-all-set-to-get-fullfledged-synthetic-turf/article2773967.ece |website=thehindu.com |publisher=thehindu |access-date=28 October 2026}}</ref> ಒಳಚರಂಡಿ ವ್ಯವಸ್ಥೆ (Drainage System): ಕುಡ್ಲಡ್ ಬರ್ಸ ಜಾಸ್ತಿ ಬರ್ಪುನೈರ್ದಾವರ ಮೈದಾನಡ್ ನೀರ್ ಉಂತಂದಿಲೆಕ್ಕ ಬೊಕ್ಕ ಟ್ರ್ಯಾಕ್ ಹಾಳಾವಂದಿಲೆಕ್ಕ ಪೊಸ ವೈಜ್ಞಾನಿಕವಾಯಿನ ಒಳಚರಂಡಿ ವ್ಯವಸ್ಥೆನ್ ನಿರ್ಮಾಣ ಮಲ್ತೊಂದು ಉಲ್ಲೆರ್. ಫೀಲ್ಡ್ ಅಪ್‌ಗ್ರೇಡ್: ಜಾವೆಲಿನ್ ತ್ರೋ, ಶಾಟ್ ಪುಟ್ ಬೊಕ್ಕ ಲಾಂಗ್ ಜಂಪ್ ಜಾಗೆನ್ ರಾಷ್ಟ್ರೀಯ ಮಟ್ಟದ ಸ್ಪರ್ಧೆಗ್ ಬೋಡಾಪಿನಂಚೆನೆ ಉನ್ನತೀಕರಣ ಮಲ್ಪುನ ಯೋಜನೆ ಉಂಡು. == ಇಡೆಮುಟ್ಟ ನಡತ್ತಿನ ಮಲ್ಲ ಲೇಸುಲು== ===17ನೇ ರಾಷ್ಟ್ರೀಯ ಯುವಜನೋತ್ಸವ (2012)=== ಭಾರತ ಸರ್ಕಾರದ ಯುವಜನ ವ್ಯವಹಾರ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಸಚಿವಾಲಯದ ವತಿಯಿರ್ದ್ 17ನೇ ರಾಷ್ಟ್ರೀಯ ಯುವಜನೋತ್ಸವ ಮುಲ್ಪ ನಡತ್ಂಡ್. ಈ ಲೇಸ್‌ಡ್ ಭಾರತದ ಬೇತೆ ಬೇತೆ ರಾಜ್ಯೊಲೆರ್ದ್ ಯುವಜನೆರ್ ಪಾಲ್ ಪಡೆದಿತ್ತೆರ್. ​===ಕರ್ನಾಟಕ ರಾಜ್ಯ ಕ್ರೀಡಾಕೂಟ (2025)=== ಜನವರಿ 2025ಡ್ ನಡತಿನ ರಾಜ್ಯ ಮಟ್ಟದ ಕ್ರೀಡಾಕೂಟನ್ ಮುಖ್ಯಮಂತ್ರಿ ಸಿದ್ದರಾಮಯ್ಯ ಮೇರ್ ಮುಲ್ಪನೆ ಉದ್ಘಾಟನೆ ಮಲ್ತೆರ್. ಈ ಲೇಸ್‌ಡ್ ವಾಲಿಬಾಲ್, ಹ್ಯಾಂಡ್‌ಬಾಲ್ ಬೊಕ್ಕ ನೆಟ್‌ಬಾಲ್ ಪಂತೊಲು ಮಂಗಳ ಸ್ಟೇಡಿಯಂಡ್ ನಡತ್ಂಡ್. ​===ನಶಾ ಮುಕ್ತ ಭಾರತ ವಾಕಥಾನ್ (2025)=== ಯುವಜನೆರೆಡ್ ಮಾದಕವ್ಯಸನದ ಬಗ್ಗೆ ಜಾಗೃತಿ ಮೂಡಾಯೆರೆ ನವೆಂಬರ್ 2025ಕ್ ಮಂಗಳ ಸ್ಟೇಡಿಯಂರ್ದ್ ಕರಾವಳಿ ಮೈದಾನ ಮುಟ್ಟ ಮಲ್ಲ ಮಟ್ಟದ ವಾಕಥಾನ್ ನಡತ್ಂಡ್. ​ಉಂದು ಮಾತ್ರ ಅತ್ತಂದೆ, ದಸರಾ ಕ್ರೀಡಾಕೂಟ, ಬೇತೆ ಬೇತೆ ಸಂಘ-ಸಂಸ್ಥೆಲೆನ ಕ್ರೀಡಾಕೂಟ, ಸ್ವಾತಂತ್ರ್ಯ ದಿನಾಚರಣೆ ಬೊಕ್ಕ ಗಣರಾಜ್ಯೋತ್ಸವದಂಚಿನ ರಾಷ್ಟ್ರೀಯ ಪರ್ಬೊಲೆನ ಪರೇಡ್‌ಲುಲಾ ಮುಲ್ಪನೆ ನಡಪುಂಡು. ==ಉಲ್ಲೇಕೊಲು== {{reflist}} nw3bxn3x0z1r0b0zgrocq44ujcvp7n3 373900 373898 2026-10-28T07:00:40Z Mahaveer Indra 1023 /* 17ನೇ ರಾಷ್ಟ್ರೀಯ ಯುವಜನೋತ್ಸವ (2012) */ 373900 wikitext text/x-wiki {{Infobox venue | name = ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ | nickname = | image = Near the entrance of Mangala Stadium in Mangalore.jpg | image_caption = ಮಂಗಳೂರುಡುಪ್ಪುನ ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ಬಾಗೆಲ್‌ದ ಕೈತಲ್ | location = [[ಮಂಗಳೂರು]], [[ಕರ್ನಾಟಕ]] | groundbreaking = 2009 | opened = ಅಕ್ಟೋಬರ್ 2011 | owner = [[ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ]] | operator = (ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ) | cost = | architect = | tenants = [[ಕರ್ನಾಟಕ ಕ್ರಿಕೆಟ್ ತಂಡ]] , ([[ಮಂಗಳೂರು ಯುನೈಟೆಡ್]]) <br/> [[ಸೌತ್ ಯುನೈಟೆಡ್ ಎಫ್.ಸಿ.]] (2018-ಇಂಚಿಪೊ) | capacity = 8,000<ref name="capacity">{{Cite news |date=2019-12-20 |title=ಮಂಗಳಾ ಸ್ಟೇಡಿಯಂದ ಸುರೂತ ಹಂತದ ಬೇಲೆಗ್ ಸಿದ್ಧತೆ ಆತ್ಂಡ್ (Stage is set for first phase works of Mangala Stadium) |url=https://timesofindia.indiatimes.com/city/mangaluru/stage-set-for-first-phase-of-redevelopment-of-mangala-stadium/articleshow/72892244.cms |access-date=2026-06-09 |work=The Times of India |issn=0971-8257}}</ref> }} '''ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ''' [[ದಕ್ಷಿಣ ಕನ್ನಡ ಜಿಲ್ಲೆ|ದಕ್ಷಿಣ ಕನ್ನಡ]] ಜಿಲ್ಲೆದ ಕುಡ್ಲಡ್, ಪೇಂಟೆದ ನಡುಟು ಉಪ್ಪುನ ಒಂಜಿ ಪ್ರಮುಖವಾಯಿನ ಮಲ್ಲ ಮೈದಾನ. ಕುಡ್ಲದ ಗ್ರಾಮ ದೇವತೆ ಮಂಗಳಾದೇವಿನ ಪುದರ್‌ನ್ ಈ ಕ್ರೀಡಾಂಗಣಗ್ ದೀತೆರ್. ಈ ಮೈದಾನ ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ ಬೊಕ್ಕ [[ಕರ್ನಾಟಕ]] ರಾಜ್ಯದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆದ ಆಡಳಿತದ ಅಡಿಟ್ ಬರ್ಪುಂಡು. ಕರಾವಳಿ ಭಾಗದ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ಶಾಲೆ ಕಾಲೇಜಿದ ಜೋಕುಲೆಗ್ ಈ ಮೈದಾನ ಒಂಜಿ ಮುಖ್ಯವಾಯಿನ ತರಬೇತಿ ಕೇಂದ್ರ ಆದುಂಡು.<ref>{{cite web |title=Mangala Stadium |url=https://manipalblog.com/mangala-stadium/ |website=manipalblog.com |publisher=ManipalBlog.com |access-date=28 October 2026}}</ref> ==ಇತಿಹಾಸೊ== ಇತ್ತೆ ಇಪ್ಪುನ ಮಲ್ಲ ಮೈದಾನ ದುಂಬು ಎಲ್ಯಡ್ ಇತ್ತ್ಂಡ್. ಐಕ್ ಮಣ್ಣಗುಡ್ಡ ಮೈದಾನ ಪಂದ್ ಪುದರ್ ಇತ್ತ್ಂಡ್. ೧೯೯೫ನೇ ಇಸವಿಡ್ ಇಂದೆನ್ ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ಪಂದ್ ಪುದರ್ ದೀಯೆರ್, ಅತ್ತಂದೆ ಬೇತೆ ಬೇತೆ ರೀತಿದ ಆಟ ಕೂಟೊಲು ನಡಪರ ಸುರು ಆಂಡ್.<ref>{{cite web |title=ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ೨ ತಿಂಗಳು ಬಂದ್ |url=https://udayavani.com/dakshina-kannada-news/mangaluru-mangala-stadium-closed-for-2-months-446890?lang=kn |website=udayavani.com |publisher=udayavani |access-date=28 October 2026}}</ref> ಸುರುಕು ಮುಲ್ಪ ಮಣ್ಣ್‌ದ ಓಟದ ಟ್ರ್ಯಾಕ್ ಇತ್ತ್ಂಡ್. ಕ್ರೀಡಾಪಟುಕುಲೆನ ಮಸ್ತ್ ವರ್ಷದ ಬೇಡಿಕೆದ ಪ್ರಕಾರ ೨೦೧೩ನೇ ಇಸವಿಡ್ ಕ್ರೀಡಾಂಗಣಗ್ ೪೦೦ ಮೀಟರ್‌ದ ಪೊಸ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್‌ನ್ ಉದ್ಘಾಟನೆ ಮಲ್ತೆರ್. == ವ್ಯವಸ್ತೆಲು == ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣೊಡು ಕ್ರೀಡಾಪಟುಕ್ಲೆಗ್ ಬೊಕ್ಕ ಸಾರ್ವಜನಿಕೆರೆಗ್ ಸದ್ಯೊಗು ಇಪ್ಪುನ ಸೌಲಭೊಲು # ಓಟದ ಟ್ರ್ಯಾಕ್- ಬಲಿಪುನ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ತರಬೇತಿ ಮಲ್ಪೆರೆ ೪೦೦ ಮೀಟರ್‌ದ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್ ಮುಲ್ಪ ಉಂಡು. # ಫೀಲ್ಡ್ ಕ್ರೀಡೆಲು - ಕ್ರೀಡಾಂಗಣದ ಉಲಾಯಿಡ್ ಮುಲ್ಪ ಉದ್ದ ಲಾಗಿಯರ, ಗುಂಡು ಎಸೆತ, ಜಾವೆಲಿನ್ ತ್ರೋ, ಚಕ್ರ ಎಸೆತ, ಬೊಕ್ಕ ಹ್ಯಾಮರ್-ತ್ರೋ ಇಂಚಿನ ಗೊಬ್ಬುಲೆಗ್ ಪ್ರತ್ಯೇಕ ವ್ಯವಸ್ಥೆ ಉಂಡು. # ಈಜುಗೊಳ- ಕ್ರೀಡಾಂಗಣದ ಕೈತಲ್ಡ್ ಮೀಂದರ ಕಲ್ಪೆರೆ ಬೊಕ್ಕ ಸ್ಪರ್ಧೆಲೆಗ್ ಬೋಡಾದ್ ಈಜುಗೊಳ ಉಂಡು. # ಗೊಬ್ಬುದ ಮೈದಾನ: ನಡುಟು ಉಪ್ಪುನ ಪಚ್ಚೆ ಮೈದಾನಡ್ ಫುಟ್ಬಾಲ್ ಬೊಕ್ಕ ಬೇತೆ ಕ್ರೀಡೆಲೆನ್ ಗೊಬ್ಬೊಲಿ. # ಗ್ಯಾಲರಿಡ್ ಸಾವಿರಾರು ಜನ ಕುಲ್ಲುನೆಕ್ ಎಡ್ಡೆ ವ್ಯವಸ್ಥೆ ಉಂಡು. == ದುಂಬಗ್ ನಡಪುನ ಅಬಿವೃದ್ಧಿ ಬೇಲೆಲು== ಕರ್ನಾಟಕ ಸರ್ಕಾರದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಕೆಲು ಜಂಟಿಯಾದ್, ದುಂಬುದ ದಿನೊಟು ಈ ಕ್ರೀಡಾಂಗಣಗ್ ಅಬಿವೃದ್ಧಿ ಮಲ್ಪುನ ಮಲ್ಲ ಯೋಜನೆನ್ ಪಾಡೊಂದೆರ್. ಐತ ಬಗೆಟ್ ಮಾಹಿತಿಲು ೩ ಕೋಟಿ ರೂ. ಅಭಿವೃದ್ಧಿ: ರಾಜ್ಯ ಸರ್ಕಾರ ಬೊಕ್ಕ ಮುಖ್ಯಮಂತ್ರಿ ಸಿದ್ದರಾಮಯ್ಯೆರೆನ ಅನುದಾನದಡಿಟ್ ೩ ಕೋಟಿ ರೂಪಾಯಿ ಖರ್ಚ್ ಮಲ್ತ್‌ದ್ ಮಂಗಳ ಕ್ರೀಡಾಂಗಣದ ನವೀಕರಣ ಬೇಲೆಗ್ ಚಾಲನೆ ಕೊರ್ತೆರ್. ಉಂದೆಕ್ ೩ ಕೋಟಿ ರೂ. ಬಜೆಟ್‌ಡ್ ಮೀಸಲಾತ್ಂಡ್ ಬೊಕ್ಕ ೧.೫ ಕೋಟಿ ರೂ. ಹೆಚ್ಚುವರಿಯಾದ್ ಕೊರ್ತೆರ್.<ref>{{cite web |title=Stadium Development |url=https://www.thehindu.com/news/cities/Mangalore/35-crore-for-mangala-stadium-development/article29747722.ece |website=thehindu.com |publisher=thehindu |access-date=28 October 2026}}</ref> ಪೊಸ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್: ಮುಲ್ಪ ಇತ್ತಿನ ೧೫ ವರ್ಷ ಪರತ್ ಆಯಿನ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್ ಬರ್ಸ ಬೊಕ್ಕ ದೊಂಬುಗು ಹಾಳಾದ್ ಜಾರುನಂಚಿತ್ತ್ಂಡ್. ಅಂಚಾದ್ ಪರತ್ ಟ್ರ್ಯಾಕ್ ದೆತ್ತ್‌ದ್ ಪೊಸತ್ ಪಾಡುನ ಬೇಲೆ ನಡತೊಂದು ಉಂಡು.<ref>{{cite web |title=synthetic Turf |url=https://www.thehindu.com/news/cities/Mangalore/mangala-stadium-is-all-set-to-get-fullfledged-synthetic-turf/article2773967.ece |website=thehindu.com |publisher=thehindu |access-date=28 October 2026}}</ref> ಒಳಚರಂಡಿ ವ್ಯವಸ್ಥೆ (Drainage System): ಕುಡ್ಲಡ್ ಬರ್ಸ ಜಾಸ್ತಿ ಬರ್ಪುನೈರ್ದಾವರ ಮೈದಾನಡ್ ನೀರ್ ಉಂತಂದಿಲೆಕ್ಕ ಬೊಕ್ಕ ಟ್ರ್ಯಾಕ್ ಹಾಳಾವಂದಿಲೆಕ್ಕ ಪೊಸ ವೈಜ್ಞಾನಿಕವಾಯಿನ ಒಳಚರಂಡಿ ವ್ಯವಸ್ಥೆನ್ ನಿರ್ಮಾಣ ಮಲ್ತೊಂದು ಉಲ್ಲೆರ್. ಫೀಲ್ಡ್ ಅಪ್‌ಗ್ರೇಡ್: ಜಾವೆಲಿನ್ ತ್ರೋ, ಶಾಟ್ ಪುಟ್ ಬೊಕ್ಕ ಲಾಂಗ್ ಜಂಪ್ ಜಾಗೆನ್ ರಾಷ್ಟ್ರೀಯ ಮಟ್ಟದ ಸ್ಪರ್ಧೆಗ್ ಬೋಡಾಪಿನಂಚೆನೆ ಉನ್ನತೀಕರಣ ಮಲ್ಪುನ ಯೋಜನೆ ಉಂಡು. == ಇಡೆಮುಟ್ಟ ನಡತ್ತಿನ ಮಲ್ಲ ಲೇಸುಲು== ===17ನೇ ರಾಷ್ಟ್ರೀಯ ಯುವಜನೋತ್ಸವ (2012)=== ಭಾರತ ಸರ್ಕಾರದ ಯುವಜನ ವ್ಯವಹಾರ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಸಚಿವಾಲಯದ ವತಿಯಿರ್ದ್ 17ನೇ ರಾಷ್ಟ್ರೀಯ ಯುವಜನೋತ್ಸವ ಮುಲ್ಪ ನಡತ್ಂಡ್. ಈ ಲೇಸ್‌ಡ್ ಭಾರತದ ಬೇತೆ ಬೇತೆ ರಾಜ್ಯೊಲೆರ್ದ್ ಯುವಜನೆರ್ ಪಾಲ್ ಪಡೆದಿತ್ತೆರ್.<ref>{{cite web |title=Mangalore all set for 17th National Youth Festival |url=https://www.mangaloretoday.com/main/Mangalore-all-set-for-17th-National-Youth-Festival.html |website=mangaloretoday.com |publisher=MangaloreToday |access-date=28 October 2026}}</ref> ===ಕರ್ನಾಟಕ ರಾಜ್ಯ ಕ್ರೀಡಾಕೂಟ (2025)=== ಜನವರಿ 2025ಡ್ ನಡತಿನ ರಾಜ್ಯ ಮಟ್ಟದ ಕ್ರೀಡಾಕೂಟನ್ ಮುಖ್ಯಮಂತ್ರಿ ಸಿದ್ದರಾಮಯ್ಯ ಮೇರ್ ಮುಲ್ಪನೆ ಉದ್ಘಾಟನೆ ಮಲ್ತೆರ್. ಈ ಲೇಸ್‌ಡ್ ವಾಲಿಬಾಲ್, ಹ್ಯಾಂಡ್‌ಬಾಲ್ ಬೊಕ್ಕ ನೆಟ್‌ಬಾಲ್ ಪಂತೊಲು ಮಂಗಳ ಸ್ಟೇಡಿಯಂಡ್ ನಡತ್ಂಡ್.<ref>{{cite web |title=Mangaluru: CM Siddaramaiah inaugurates State Games 2025 in city |url=https://daijiworld.com/news/newsDisplay?newsID=1263291#:~:text=Handball%3A%20January%2021%20to%2023%20at%20Mangala,and%2019%20at%20State%20Employees%20Hall%2C%20Hampankatta. |website=daijiworld.com |publisher=daijiworld |access-date=28 October 2026}}</ref> ===ನಶಾ ಮುಕ್ತ ಭಾರತ ವಾಕಥಾನ್ (2025)=== ಯುವಜನೆರೆಡ್ ಮಾದಕವ್ಯಸನದ ಬಗ್ಗೆ ಜಾಗೃತಿ ಮೂಡಾಯೆರೆ ನವೆಂಬರ್ 2025ಕ್ ಮಂಗಳ ಸ್ಟೇಡಿಯಂರ್ದ್ ಕರಾವಳಿ ಮೈದಾನ ಮುಟ್ಟ ಮಲ್ಲ ಮಟ್ಟದ ವಾಕಥಾನ್ ನಡತ್ಂಡ್.<ref>{{cite web |title=ವಾಕಥಾನ್ |url=https://www.varthabharati.in/dakshinakannada/mangalore-massive-walkathon-under-the-auspices-of-rguhs-2101619 |website=varthabharati.in |publisher=ವಾರ್ತಾ ಭಾರತಿ |access-date=28 October 2026}}</ref> ​ಉಂದು ಮಾತ್ರ ಅತ್ತಂದೆ, ದಸರಾ ಕ್ರೀಡಾಕೂಟ, ಬೇತೆ ಬೇತೆ ಸಂಘ-ಸಂಸ್ಥೆಲೆನ ಕ್ರೀಡಾಕೂಟ, ಸ್ವಾತಂತ್ರ್ಯ ದಿನಾಚರಣೆ ಬೊಕ್ಕ ಗಣರಾಜ್ಯೋತ್ಸವದಂಚಿನ ರಾಷ್ಟ್ರೀಯ ಪರ್ಬೊಲೆನ ಪರೇಡ್‌ಲುಲಾ ಮುಲ್ಪನೆ ನಡಪುಂಡು. ==ಉಲ್ಲೇಕೊಲು== {{reflist}} k4y1jojr2agszy8kj9kxb2hhy5x1d77 373904 373900 2026-10-28T07:53:30Z ChiK 1136 /* */ 373904 wikitext text/x-wiki {{Infobox venue | name = ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ | nickname = | image = Near the entrance of Mangala Stadium in Mangalore.jpg | image_caption = ಮಂಗಳೂರುಡುಪ್ಪುನ ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ಬಾಕಿಲ್‌ದ ಕೈತಲ್ | location = [[ಮಂಗಳೂರು]], [[ಕರ್ನಾಟಕ]] | groundbreaking = 2009 | opened = ಅಕ್ಟೋಬರ್ 2011 | owner = [[ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ]] | operator = (ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ) | cost = | architect = | tenants = [[ಕರ್ನಾಟಕ ಕ್ರಿಕೆಟ್ ತಂಡ]] , ([[ಮಂಗಳೂರು ಯುನೈಟೆಡ್]]) <br/> [[ಸೌತ್ ಯುನೈಟೆಡ್ ಎಫ್.ಸಿ.]] (2018-ಇಂಚಿಪೊ) | capacity = 8,000<ref name="capacity">{{Cite news |date=2019-12-20 |title=ಮಂಗಳಾ ಸ್ಟೇಡಿಯಂದ ಸುರೂತ ಹಂತದ ಬೇಲೆಗ್ ಸಿದ್ಧತೆ ಆತ್ಂಡ್ (Stage is set for first phase works of Mangala Stadium) |url=https://timesofindia.indiatimes.com/city/mangaluru/stage-set-for-first-phase-of-redevelopment-of-mangala-stadium/articleshow/72892244.cms |access-date=2026-06-09 |work=The Times of India |issn=0971-8257}}</ref> }} '''ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ''' [[ದಕ್ಷಿಣ ಕನ್ನಡ ಜಿಲ್ಲೆ|ದಕ್ಷಿಣ ಕನ್ನಡ]] ಜಿಲ್ಲೆದ ಕುಡ್ಲಡ್, ಪೇಂಟೆದ ನಡುಟು ಉಪ್ಪುನ ಒಂಜಿ ಪ್ರಮುಖವಾಯಿನ ಮಲ್ಲ ಮೈದಾನ. ಕುಡ್ಲದ ಗ್ರಾಮ ದೇವತೆ ಮಂಗಳಾದೇವಿನ ಪುದರ್‌ನ್ ಈ ಕ್ರೀಡಾಂಗಣಗ್ ದೀತೆರ್. ಈ ಮೈದಾನ ಮಂಗಳೂರು ಮಹಾನಗರ ಪಾಲಿಕೆ ಬೊಕ್ಕ [[ಕರ್ನಾಟಕ]] ರಾಜ್ಯದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆದ ಆಡಳಿತದ ಅಡಿಟ್ ಬರ್ಪುಂಡು. ಕರಾವಳಿ ಭಾಗದ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ಶಾಲೆ ಕಾಲೇಜಿದ ಜೋಕುಲೆಗ್ ಈ ಮೈದಾನ ಒಂಜಿ ಮುಖ್ಯವಾಯಿನ ತರಬೇತಿ ಕೇಂದ್ರ ಆದುಂಡು.<ref>{{cite web |title=Mangala Stadium |url=https://manipalblog.com/mangala-stadium/ |website=manipalblog.com |publisher=ManipalBlog.com |access-date=28 October 2026}}</ref> ==ಇತಿಹಾಸೊ== ಇತ್ತೆ ಇಪ್ಪುನ ಮಲ್ಲ ಮೈದಾನ ದುಂಬು ಎಲ್ಯಡ್ ಇತ್ತ್ಂಡ್. ಐಕ್ ಮಣ್ಣಗುಡ್ಡ ಮೈದಾನ ಪಂದ್ ಪುದರ್ ಇತ್ತ್ಂಡ್. ೧೯೯೫ನೇ ಇಸವಿಡ್ ಇಂದೆನ್ ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ಪಂದ್ ಪುದರ್ ದೀಯೆರ್, ಅತ್ತಂದೆ ಬೇತೆ ಬೇತೆ ರೀತಿದ ಆಟ ಕೂಟೊಲು ನಡಪರ ಸುರು ಆಂಡ್.<ref>{{cite web |title=ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ ೨ ತಿಂಗಳು ಬಂದ್ |url=https://udayavani.com/dakshina-kannada-news/mangaluru-mangala-stadium-closed-for-2-months-446890?lang=kn |website=udayavani.com |publisher=udayavani |access-date=28 October 2026}}</ref> ಸುರುಕು ಮುಲ್ಪ ಮಣ್ಣ್‌ದ ಓಟದ ಟ್ರ್ಯಾಕ್ ಇತ್ತ್ಂಡ್. ಕ್ರೀಡಾಪಟುಕುಲೆನ ಮಸ್ತ್ ವರ್ಷದ ಬೇಡಿಕೆದ ಪ್ರಕಾರ ೨೦೧೩ನೇ ಇಸವಿಡ್ ಕ್ರೀಡಾಂಗಣಗ್ ೪೦೦ ಮೀಟರ್‌ದ ಪೊಸ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್‌ನ್ ಉದ್ಘಾಟನೆ ಮಲ್ತೆರ್. == ವ್ಯವಸ್ತೆಲು == ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣೊಡು ಕ್ರೀಡಾಪಟುಕ್ಲೆಗ್ ಬೊಕ್ಕ ಸಾರ್ವಜನಿಕೆರೆಗ್ ಸದ್ಯೊಗು ಇಪ್ಪುನ ಸೌಲಭೊಲು # ಓಟದ ಟ್ರ್ಯಾಕ್- ಬಲಿಪುನ ಕ್ರೀಡಾಪಟುಕುಲೆಗ್ ತರಬೇತಿ ಮಲ್ಪೆರೆ ೪೦೦ ಮೀಟರ್‌ದ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್ ಮುಲ್ಪ ಉಂಡು. # ಫೀಲ್ಡ್ ಕ್ರೀಡೆಲು - ಕ್ರೀಡಾಂಗಣದ ಉಲಾಯಿಡ್ ಮುಲ್ಪ ಉದ್ದ ಲಾಗಿಯರ, ಗುಂಡು ಎಸೆತ, ಜಾವೆಲಿನ್ ತ್ರೋ, ಚಕ್ರ ಎಸೆತ, ಬೊಕ್ಕ ಹ್ಯಾಮರ್-ತ್ರೋ ಇಂಚಿನ ಗೊಬ್ಬುಲೆಗ್ ಪ್ರತ್ಯೇಕ ವ್ಯವಸ್ಥೆ ಉಂಡು. # ಈಜುಗೊಳ- ಕ್ರೀಡಾಂಗಣದ ಕೈತಲ್ಡ್ ಮೀಂದರ ಕಲ್ಪೆರೆ ಬೊಕ್ಕ ಸ್ಪರ್ಧೆಲೆಗ್ ಬೋಡಾದ್ ಈಜುಗೊಳ ಉಂಡು. # ಗೊಬ್ಬುದ ಮೈದಾನ: ನಡುಟು ಉಪ್ಪುನ ಪಚ್ಚೆ ಮೈದಾನಡ್ ಫುಟ್ಬಾಲ್ ಬೊಕ್ಕ ಬೇತೆ ಕ್ರೀಡೆಲೆನ್ ಗೊಬ್ಬೊಲಿ. # ಗ್ಯಾಲರಿಡ್ ಸಾವಿರಾರು ಜನ ಕುಲ್ಲುನೆಕ್ ಎಡ್ಡೆ ವ್ಯವಸ್ಥೆ ಉಂಡು. == ದುಂಬಗ್ ನಡಪುನ ಅಬಿವೃದ್ಧಿ ಬೇಲೆಲು== ಕರ್ನಾಟಕ ಸರ್ಕಾರದ ಯುವಜನ ಸಬಲೀಕರಣ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಖೆ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಇಲಾಕೆಲು ಜಂಟಿಯಾದ್, ದುಂಬುದ ದಿನೊಟು ಈ ಕ್ರೀಡಾಂಗಣಗ್ ಅಬಿವೃದ್ಧಿ ಮಲ್ಪುನ ಮಲ್ಲ ಯೋಜನೆನ್ ಪಾಡೊಂದೆರ್. ಐತ ಬಗೆಟ್ ಮಾಹಿತಿಲು ೩ ಕೋಟಿ ರೂ. ಅಭಿವೃದ್ಧಿ: ರಾಜ್ಯ ಸರ್ಕಾರ ಬೊಕ್ಕ ಮುಖ್ಯಮಂತ್ರಿ ಸಿದ್ದರಾಮಯ್ಯೆರೆನ ಅನುದಾನದಡಿಟ್ ೩ ಕೋಟಿ ರೂಪಾಯಿ ಖರ್ಚ್ ಮಲ್ತ್‌ದ್ ಮಂಗಳ ಕ್ರೀಡಾಂಗಣದ ನವೀಕರಣ ಬೇಲೆಗ್ ಚಾಲನೆ ಕೊರ್ತೆರ್. ಉಂದೆಕ್ ೩ ಕೋಟಿ ರೂ. ಬಜೆಟ್‌ಡ್ ಮೀಸಲಾತ್ಂಡ್ ಬೊಕ್ಕ ೧.೫ ಕೋಟಿ ರೂ. ಹೆಚ್ಚುವರಿಯಾದ್ ಕೊರ್ತೆರ್.<ref>{{cite web |title=Stadium Development |url=https://www.thehindu.com/news/cities/Mangalore/35-crore-for-mangala-stadium-development/article29747722.ece |website=thehindu.com |publisher=thehindu |access-date=28 October 2026}}</ref> ಪೊಸ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್: ಮುಲ್ಪ ಇತ್ತಿನ ೧೫ ವರ್ಷ ಪರತ್ ಆಯಿನ ಸಿಂಥೆಟಿಕ್ ಟ್ರ್ಯಾಕ್ ಬರ್ಸ ಬೊಕ್ಕ ದೊಂಬುಗು ಹಾಳಾದ್ ಜಾರುನಂಚಿತ್ತ್ಂಡ್. ಅಂಚಾದ್ ಪರತ್ ಟ್ರ್ಯಾಕ್ ದೆತ್ತ್‌ದ್ ಪೊಸತ್ ಪಾಡುನ ಬೇಲೆ ನಡತೊಂದು ಉಂಡು.<ref>{{cite web |title=synthetic Turf |url=https://www.thehindu.com/news/cities/Mangalore/mangala-stadium-is-all-set-to-get-fullfledged-synthetic-turf/article2773967.ece |website=thehindu.com |publisher=thehindu |access-date=28 October 2026}}</ref> ಒಳಚರಂಡಿ ವ್ಯವಸ್ಥೆ (Drainage System): ಕುಡ್ಲಡ್ ಬರ್ಸ ಜಾಸ್ತಿ ಬರ್ಪುನೈರ್ದಾವರ ಮೈದಾನಡ್ ನೀರ್ ಉಂತಂದಿಲೆಕ್ಕ ಬೊಕ್ಕ ಟ್ರ್ಯಾಕ್ ಹಾಳಾವಂದಿಲೆಕ್ಕ ಪೊಸ ವೈಜ್ಞಾನಿಕವಾಯಿನ ಒಳಚರಂಡಿ ವ್ಯವಸ್ಥೆನ್ ನಿರ್ಮಾಣ ಮಲ್ತೊಂದು ಉಲ್ಲೆರ್. ಫೀಲ್ಡ್ ಅಪ್‌ಗ್ರೇಡ್: ಜಾವೆಲಿನ್ ತ್ರೋ, ಶಾಟ್ ಪುಟ್ ಬೊಕ್ಕ ಲಾಂಗ್ ಜಂಪ್ ಜಾಗೆನ್ ರಾಷ್ಟ್ರೀಯ ಮಟ್ಟದ ಸ್ಪರ್ಧೆಗ್ ಬೋಡಾಪಿನಂಚೆನೆ ಉನ್ನತೀಕರಣ ಮಲ್ಪುನ ಯೋಜನೆ ಉಂಡು. == ಇಡೆಮುಟ್ಟ ನಡತ್ತಿನ ಮಲ್ಲ ಲೇಸುಲು== ===17ನೇ ರಾಷ್ಟ್ರೀಯ ಯುವಜನೋತ್ಸವ (2012)=== ಭಾರತ ಸರ್ಕಾರದ ಯುವಜನ ವ್ಯವಹಾರ ಬೊಕ್ಕ ಕ್ರೀಡಾ ಸಚಿವಾಲಯದ ವತಿಯಿರ್ದ್ 17ನೇ ರಾಷ್ಟ್ರೀಯ ಯುವಜನೋತ್ಸವ ಮುಲ್ಪ ನಡತ್ಂಡ್. ಈ ಲೇಸ್‌ಡ್ ಭಾರತದ ಬೇತೆ ಬೇತೆ ರಾಜ್ಯೊಲೆರ್ದ್ ಯುವಜನೆರ್ ಪಾಲ್ ಪಡೆದಿತ್ತೆರ್.<ref>{{cite web |title=Mangalore all set for 17th National Youth Festival |url=https://www.mangaloretoday.com/main/Mangalore-all-set-for-17th-National-Youth-Festival.html |website=mangaloretoday.com |publisher=MangaloreToday |access-date=28 October 2026}}</ref> ===ಕರ್ನಾಟಕ ರಾಜ್ಯ ಕ್ರೀಡಾಕೂಟ (2025)=== ಜನವರಿ 2025ಡ್ ನಡತಿನ ರಾಜ್ಯ ಮಟ್ಟದ ಕ್ರೀಡಾಕೂಟನ್ ಮುಖ್ಯಮಂತ್ರಿ ಸಿದ್ದರಾಮಯ್ಯ ಮೇರ್ ಮುಲ್ಪನೆ ಉದ್ಘಾಟನೆ ಮಲ್ತೆರ್. ಈ ಲೇಸ್‌ಡ್ ವಾಲಿಬಾಲ್, ಹ್ಯಾಂಡ್‌ಬಾಲ್ ಬೊಕ್ಕ ನೆಟ್‌ಬಾಲ್ ಪಂತೊಲು ಮಂಗಳ ಸ್ಟೇಡಿಯಂಡ್ ನಡತ್ಂಡ್.<ref>{{cite web |title=Mangaluru: CM Siddaramaiah inaugurates State Games 2025 in city |url=https://daijiworld.com/news/newsDisplay?newsID=1263291#:~:text=Handball%3A%20January%2021%20to%2023%20at%20Mangala,and%2019%20at%20State%20Employees%20Hall%2C%20Hampankatta. |website=daijiworld.com |publisher=daijiworld |access-date=28 October 2026}}</ref> ===ನಶಾ ಮುಕ್ತ ಭಾರತ ವಾಕಥಾನ್ (2025)=== ಯುವಜನೆರೆಡ್ ಮಾದಕವ್ಯಸನದ ಬಗ್ಗೆ ಜಾಗೃತಿ ಮೂಡಾಯೆರೆ ನವೆಂಬರ್ 2025ಕ್ ಮಂಗಳ ಸ್ಟೇಡಿಯಂರ್ದ್ ಕರಾವಳಿ ಮೈದಾನ ಮುಟ್ಟ ಮಲ್ಲ ಮಟ್ಟದ ವಾಕಥಾನ್ ನಡತ್ಂಡ್.<ref>{{cite web |title=ವಾಕಥಾನ್ |url=https://www.varthabharati.in/dakshinakannada/mangalore-massive-walkathon-under-the-auspices-of-rguhs-2101619 |website=varthabharati.in |publisher=ವಾರ್ತಾ ಭಾರತಿ |access-date=28 October 2026}}</ref> ​ಉಂದು ಮಾತ್ರ ಅತ್ತಂದೆ, ದಸರಾ ಕ್ರೀಡಾಕೂಟ, ಬೇತೆ ಬೇತೆ ಸಂಘ-ಸಂಸ್ಥೆಲೆನ ಕ್ರೀಡಾಕೂಟ, ಸ್ವಾತಂತ್ರ್ಯ ದಿನಾಚರಣೆ ಬೊಕ್ಕ ಗಣರಾಜ್ಯೋತ್ಸವದಂಚಿನ ರಾಷ್ಟ್ರೀಯ ಪರ್ಬೊಲೆನ ಪರೇಡ್‌ಲುಲಾ ಮುಲ್ಪನೆ ನಡಪುಂಡು. ==ಉಲ್ಲೇಕೊಲು== {{reflist}} c18nf25jncm7061hyqn5bjk916vgnv5 ಟೆಂಪ್ಲೇಟ್:Infobox stadium 10 29107 373849 2018-02-23T16:30:06Z en>Primefac 0 Changed protection level for "[[Template:Infobox stadium]]": [[WP:HIGHRISK|high-risk]] template with 4000+ transclusions ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite)) 373849 wikitext text/x-wiki #REDIRECT [[Template:Infobox venue]] {{R from move}} 3jw4m9ixjzvi00mdpr3at13yjmgp36y 373850 373849 2026-10-28T05:54:31Z ChiK 1136 1 revision imported from [[:en:Template:Infobox_stadium]] 373849 wikitext text/x-wiki #REDIRECT [[Template:Infobox venue]] {{R from move}} 3jw4m9ixjzvi00mdpr3at13yjmgp36y ಟೆಂಪ್ಲೇಟ್:Infobox venue 10 29108 373851 2026-10-24T02:17:01Z en>Zackmann08 0 replacing param with full_name to be auto replaced. 373851 wikitext text/x-wiki <includeonly>{{Infobox | child = {{{child|}}} | bodyclass = vcard | autoheaders = yes | headerstyle = background-color:#ccc; color:inherit; | title = {{If empty|{{{name|}}}|{{PAGENAMEBASE}}}} | titleclass = fn org | subheader = {{#if:{{{native_name|}}}|{{#if:{{{native_name_lang|}}}|<div class="nickname" lang="{{{native_name_lang}}}">}}{{{native_name}}}{{#if:{{{native_name_lang|}}}|</div>}} }} | subheader2 = {{#if:{{{nickname|}}}|<div class="nickname">{{{nickname|}}}</div>}} | image = {{#invoke:InfoboxImage|InfoboxImage|image={{{logo_image|}}}|size={{{logo_size|}}}|sizedefault=frameless|upright={{if empty|{{{logo_upright|}}}|1}}|alt={{{logo_alt|}}}|class=notpageimage {{{logo_class|}}}}} | caption = {{{logo_caption|}}} | image2 = {{#invoke:InfoboxImage|InfoboxImage|image={{{image|}}}|size={{{image_size|}}}|upright={{if empty|{{{image_upright|}}}|1}}|alt={{{image_alt|}}}|class=pageimage|data-pageimage=1}} | caption2 = {{{image_caption|}}} | image3 = {{#invoke:InfoboxImage|InfoboxImage|image={{{image_map|}}}|size={{if empty|{{{map_size|}}}|{{{image_size|}}}}}|sizedefault=frameless|upright=1|alt={{{map_alt|}}}|class=notpageimage}} | caption3 = {{{map_caption|}}} | image4 = {{#invoke:Location map|infobox_pushpin_map | pushpin_label = {{if empty|{{{name|}}}|{{PAGENAMEBASE}}}} }} | image5 = {{#invoke:Infobox mapframe|autoWithCaption |onByDefault = {{#if:{{{pushpin_map|}}}{{{image_map|}}}|no|yes}} |mapframe-frame-width = 250 |mapframe-wikidata = yes |mapframe-zoom = 13 |mapframe-marker = stadium |mapframe-caption = Interactive map of {{If empty|{{{name|}}}|{{PAGENAMEBASE}}}} }} | label1 = {{longitem|Full name}} | data1 = {{{full_name|}}} | label2 = {{longitem|Former names}} | data2 = {{{former_names|}}} | class2 = nickname | label3 = Address | data3 = {{br separated entries|1={{{address|}}}|2={{{city|}}}|3={{{country|}}} }} | class3 = label | label4 = Location | data4 = {{{location|}}} | class4 = label | label5 = Coordinates | data5 = {{{coordinates|}}} | label6 = Elevation | data6 = {{{elevation|}}} | label7 = Owner | data7 = {{{owner|}}} | class7 = agent | label8 = Operator | data8 = {{{operator|}}} | class8 = agent | label9 = {{longitem|Seating type}} | data9 = {{{seating_type|}}} | label10 = Capacity | data10 = {{{capacity|}}} | label11 = {{longitem|Executive suites}} | data11 = {{{suites|}}} | label12 = Type | data12 = {{{type|}}} | class12 = category | label13 = Event{{pluralize from text|{{{event|}}}|plural=s}} | data13 = {{{event|}}} | label14 = Roof | data14 = {{{roof|}}} | label15 = Surface | data15 = {{{surface|}}} | label16 = Scoreboard | data16 = {{{scoreboard|}}} | label17 = Screen{{pluralize from text|{{{screens|}}}|plural=s}} | data17 = {{{screens|}}} | label18 = Designation | data18 = {{{designation|}}} | label19 = {{longitem|Main venue}} | data19 = {{br separated entries |1={{{main_venue|}}} |2={{#if:{{{main_venue_capacity|}}}|Capacity: {{{main_venue_capacity|}}}}} }} | label20 = Facilities | data20 = {{{facilities|}}} | label21 = {{longitem|Record attendance}} | data21 = {{{record_attendance|}}} | label22 = Height | data22 = {{{height|}}} | label23 = {{longitem|{{if empty|{{{dimensions_label|}}}|Field size}}}} | data23 = {{{dimensions|}}} | label24 = {{longitem|Field shape}} | data24 = {{{field_shape|}}} | label25 = Acreage | data25 = {{{acreage|}}} | label26 = {{longitem|Current use}} | data26 = {{{current_use|}}} | class26 = category | label27 = Production | data27 = {{{production|}}} | label28 = Public&nbsp;transit | data28 = {{{public_transit|}}} | label29 = Parking | data29 = {{{parking|}}} | header30 = Convention use | label31 = Total&nbsp;space | data31 = {{{total_space|}}} | label32 = Exhibit&nbsp;hall&nbsp;floor | data32 = {{{exhibit|}}} | label33 = Breakout/meeting space | data33 = {{{breakout|}}} | label34 = Ballroom space | data34 = {{{ballroom|}}} | header35 = Construction | label36 = Groundbreaking | data36 = {{{groundbreaking|}}} | label37 = Built | data37 = {{{built|}}} | label38 = Opened | data38 = {{{opened|}}} | label39 = Renovated | data39 = {{{renovated|}}} | label40 = Expanded | data40 = {{{expanded|}}} | label41 = Closed | data41 = {{{closed|}}} | label42 = Reopened | data42 = {{{reopened|}}} | label43 = Demolished | data43 = {{{demolished|}}} | label44 = Rebuilt | data44 = {{{rebuilt|}}} | label45 = {{longitem|Years active}} | data45 = {{{years_active|}}} | label46 = Cost | data46 = {{{cost|}}} | label47 = {{longitem|Architectural style}} | data47 = {{{architectural_style|}}} | label48 = Architect{{pluralize from text|{{{architect|}}}|plural=s}} | data48 = {{{architect|}}} | label49 = Builder{{pluralize from text|{{{builder|}}}|plural=s}} | data49 = {{{builder|}}} | label50 = {{longitem|Project manager{{pluralize from text|{{{project_manager|}}}|plural=s}}}} | data50 = {{{project_manager|}}} | label51 = {{longitem|Structural engineer{{pluralize from text|{{{structural_engineer|}}}|plural=s}}}} | data51 = {{{structural_engineer|}}} | label52 = {{longitem|Services engineer{{pluralize from text|{{{services_engineer|}}}|plural=s}}}} | data52 = {{{services_engineer|}}} | label53 = {{longitem|General contractor{{pluralize from text|{{{general_contractor|}}}|plural=s}}}} | data53 = {{{general_contractor|}}} | label54 = {{longitem|Main contractor{{pluralize from text|{{{main_contractors|}}}|plural=s}}}} | data54 = {{{main_contractors|}}} | header55 = Tenant{{pluralize from text|{{{tenants|}}}|plural=s}} | data56 = {{{tenants|}}} | header57 = Website | data58 = {{{website|}}} | header59 = _BLANK_ | data60 = {{{nrhp|}}} | data61 = {{{embedded|}}} }}</includeonly>{{main other|{{#if:{{both|{{{image_map|}}}|{{{pushpin_map|}}}}}|[[Category:Pages using infobox venue with both image_map and pushpin_map]]}}{{#if:{{both|{{{map_caption|}}}|{{{pushpin_map|}}}}}|[[Category:Pages using infobox venue with both map_caption and pushpin_map]]}}}}{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using infobox venue with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Infobox venue]] with unknown parameter "_VALUE_" | ignoreblank = y | mapframe_args = y | pushpin_map_args = y | acreage | address | architect | architectural_style | ballroom | breakout | builder | built | capacity | child | city | closed | coordinates | cost | country | current_use | demolished | designation | dimensions | dimensions_label | elevation | embedded | event | exhibit | expanded | facilities | field_shape | former_names | full_name | general_contractor | groundbreaking | height | image | image_alt | image_caption | image_map | image_size | image_upright | location | logo_alt | logo_caption | logo_class | logo_image | logo_size | logo_upright | main_contractors | main_venue | main_venue_capacity | map_alt | map_caption | map_size | name | native_name | native_name_lang | nickname | nrhp | opened | operator | owner | parking | production | project_manager | public_transit | rebuilt | record_attendance | renovated | reopened | roof | scoreboard | screens | seating_type | services_engineer | structural_engineer | suites | surface | tenants | total_space | type | website | years_active }}<noinclude> {{documentation}}<!-- Add category links to the /doc subpage, not here! --> </noinclude> h5bmqjt5yl6kcclh9lgussoz7n34vpy 373852 373851 2026-10-28T05:55:25Z ChiK 1136 1 revision imported from [[:en:Template:Infobox_venue]] 373851 wikitext text/x-wiki <includeonly>{{Infobox | child = {{{child|}}} | bodyclass = vcard | autoheaders = yes | headerstyle = background-color:#ccc; color:inherit; | title = {{If empty|{{{name|}}}|{{PAGENAMEBASE}}}} | titleclass = fn org | subheader = {{#if:{{{native_name|}}}|{{#if:{{{native_name_lang|}}}|<div class="nickname" lang="{{{native_name_lang}}}">}}{{{native_name}}}{{#if:{{{native_name_lang|}}}|</div>}} }} | subheader2 = {{#if:{{{nickname|}}}|<div class="nickname">{{{nickname|}}}</div>}} | image = {{#invoke:InfoboxImage|InfoboxImage|image={{{logo_image|}}}|size={{{logo_size|}}}|sizedefault=frameless|upright={{if empty|{{{logo_upright|}}}|1}}|alt={{{logo_alt|}}}|class=notpageimage {{{logo_class|}}}}} | caption = {{{logo_caption|}}} | image2 = {{#invoke:InfoboxImage|InfoboxImage|image={{{image|}}}|size={{{image_size|}}}|upright={{if empty|{{{image_upright|}}}|1}}|alt={{{image_alt|}}}|class=pageimage|data-pageimage=1}} | caption2 = {{{image_caption|}}} | image3 = {{#invoke:InfoboxImage|InfoboxImage|image={{{image_map|}}}|size={{if empty|{{{map_size|}}}|{{{image_size|}}}}}|sizedefault=frameless|upright=1|alt={{{map_alt|}}}|class=notpageimage}} | caption3 = {{{map_caption|}}} | image4 = {{#invoke:Location map|infobox_pushpin_map | pushpin_label = {{if empty|{{{name|}}}|{{PAGENAMEBASE}}}} }} | image5 = {{#invoke:Infobox mapframe|autoWithCaption |onByDefault = {{#if:{{{pushpin_map|}}}{{{image_map|}}}|no|yes}} |mapframe-frame-width = 250 |mapframe-wikidata = yes |mapframe-zoom = 13 |mapframe-marker = stadium |mapframe-caption = Interactive map of {{If empty|{{{name|}}}|{{PAGENAMEBASE}}}} }} | label1 = {{longitem|Full name}} | data1 = {{{full_name|}}} | label2 = {{longitem|Former names}} | data2 = {{{former_names|}}} | class2 = nickname | label3 = Address | data3 = {{br separated entries|1={{{address|}}}|2={{{city|}}}|3={{{country|}}} }} | class3 = label | label4 = Location | data4 = {{{location|}}} | class4 = label | label5 = Coordinates | data5 = {{{coordinates|}}} | label6 = Elevation | data6 = {{{elevation|}}} | label7 = Owner | data7 = {{{owner|}}} | class7 = agent | label8 = Operator | data8 = {{{operator|}}} | class8 = agent | label9 = {{longitem|Seating type}} | data9 = {{{seating_type|}}} | label10 = Capacity | data10 = {{{capacity|}}} | label11 = {{longitem|Executive suites}} | data11 = {{{suites|}}} | label12 = Type | data12 = {{{type|}}} | class12 = category | label13 = Event{{pluralize from text|{{{event|}}}|plural=s}} | data13 = {{{event|}}} | label14 = Roof | data14 = {{{roof|}}} | label15 = Surface | data15 = {{{surface|}}} | label16 = Scoreboard | data16 = {{{scoreboard|}}} | label17 = Screen{{pluralize from text|{{{screens|}}}|plural=s}} | data17 = {{{screens|}}} | label18 = Designation | data18 = {{{designation|}}} | label19 = {{longitem|Main venue}} | data19 = {{br separated entries |1={{{main_venue|}}} |2={{#if:{{{main_venue_capacity|}}}|Capacity: {{{main_venue_capacity|}}}}} }} | label20 = Facilities | data20 = {{{facilities|}}} | label21 = {{longitem|Record attendance}} | data21 = {{{record_attendance|}}} | label22 = Height | data22 = {{{height|}}} | label23 = {{longitem|{{if empty|{{{dimensions_label|}}}|Field size}}}} | data23 = {{{dimensions|}}} | label24 = {{longitem|Field shape}} | data24 = {{{field_shape|}}} | label25 = Acreage | data25 = {{{acreage|}}} | label26 = {{longitem|Current use}} | data26 = {{{current_use|}}} | class26 = category | label27 = Production | data27 = {{{production|}}} | label28 = Public&nbsp;transit | data28 = {{{public_transit|}}} | label29 = Parking | data29 = {{{parking|}}} | header30 = Convention use | label31 = Total&nbsp;space | data31 = {{{total_space|}}} | label32 = Exhibit&nbsp;hall&nbsp;floor | data32 = {{{exhibit|}}} | label33 = Breakout/meeting space | data33 = {{{breakout|}}} | label34 = Ballroom space | data34 = {{{ballroom|}}} | header35 = Construction | label36 = Groundbreaking | data36 = {{{groundbreaking|}}} | label37 = Built | data37 = {{{built|}}} | label38 = Opened | data38 = {{{opened|}}} | label39 = Renovated | data39 = {{{renovated|}}} | label40 = Expanded | data40 = {{{expanded|}}} | label41 = Closed | data41 = {{{closed|}}} | label42 = Reopened | data42 = {{{reopened|}}} | label43 = Demolished | data43 = {{{demolished|}}} | label44 = Rebuilt | data44 = {{{rebuilt|}}} | label45 = {{longitem|Years active}} | data45 = {{{years_active|}}} | label46 = Cost | data46 = {{{cost|}}} | label47 = {{longitem|Architectural style}} | data47 = {{{architectural_style|}}} | label48 = Architect{{pluralize from text|{{{architect|}}}|plural=s}} | data48 = {{{architect|}}} | label49 = Builder{{pluralize from text|{{{builder|}}}|plural=s}} | data49 = {{{builder|}}} | label50 = {{longitem|Project manager{{pluralize from text|{{{project_manager|}}}|plural=s}}}} | data50 = {{{project_manager|}}} | label51 = {{longitem|Structural engineer{{pluralize from text|{{{structural_engineer|}}}|plural=s}}}} | data51 = {{{structural_engineer|}}} | label52 = {{longitem|Services engineer{{pluralize from text|{{{services_engineer|}}}|plural=s}}}} | data52 = {{{services_engineer|}}} | label53 = {{longitem|General contractor{{pluralize from text|{{{general_contractor|}}}|plural=s}}}} | data53 = {{{general_contractor|}}} | label54 = {{longitem|Main contractor{{pluralize from text|{{{main_contractors|}}}|plural=s}}}} | data54 = {{{main_contractors|}}} | header55 = Tenant{{pluralize from text|{{{tenants|}}}|plural=s}} | data56 = {{{tenants|}}} | header57 = Website | data58 = {{{website|}}} | header59 = _BLANK_ | data60 = {{{nrhp|}}} | data61 = {{{embedded|}}} }}</includeonly>{{main other|{{#if:{{both|{{{image_map|}}}|{{{pushpin_map|}}}}}|[[Category:Pages using infobox venue with both image_map and pushpin_map]]}}{{#if:{{both|{{{map_caption|}}}|{{{pushpin_map|}}}}}|[[Category:Pages using infobox venue with both map_caption and pushpin_map]]}}}}{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using infobox venue with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Infobox venue]] with unknown parameter "_VALUE_" | ignoreblank = y | mapframe_args = y | pushpin_map_args = y | acreage | address | architect | architectural_style | ballroom | breakout | builder | built | capacity | child | city | closed | coordinates | cost | country | current_use | demolished | designation | dimensions | dimensions_label | elevation | embedded | event | exhibit | expanded | facilities | field_shape | former_names | full_name | general_contractor | groundbreaking | height | image | image_alt | image_caption | image_map | image_size | image_upright | location | logo_alt | logo_caption | logo_class | logo_image | logo_size | logo_upright | main_contractors | main_venue | main_venue_capacity | map_alt | map_caption | map_size | name | native_name | native_name_lang | nickname | nrhp | opened | operator | owner | parking | production | project_manager | public_transit | rebuilt | record_attendance | renovated | reopened | roof | scoreboard | screens | seating_type | services_engineer | structural_engineer | suites | surface | tenants | total_space | type | website | years_active }}<noinclude> {{documentation}}<!-- Add category links to the /doc subpage, not here! --> </noinclude> h5bmqjt5yl6kcclh9lgussoz7n34vpy ಟೆಂಪ್ಲೇಟ್:Primary source inline 10 29109 373859 2024-04-28T23:57:54Z en>El C 0 Changed protection settings for "[[Template:Primary source inline]]": [[WP:High-risk templates|High-risk template or module]] ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite)) 373859 wikitext text/x-wiki {{ {{{|safesubst:}}}#invoke:Unsubst||date=__DATE__ |$B= {{Fix | subst = <includeonly>{{subst:substcheck}}</includeonly> | link = Wikipedia:No original research#Primary, secondary and tertiary sources | text = non-primary source{{#if:{{{plural|}}}|s|}} needed | class = noprint Template-Fact | title = {{{reason|This claim needs references to reliable secondary sources.}}} | date = {{{date|}}} | cat = {{#if:{{{demo|}}}{{{nocat|}}}||[[Category:All pages needing factual verification]]}} | cat-date = {{#if:{{{demo|}}}{{{nocat|}}}||Category:Wikipedia articles needing factual verification}}}} }}<noinclude> <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> {{Documentation}} </noinclude> fb9agpgin7g1illn9bgc61za5qusowt 373860 373859 2026-10-28T05:55:27Z ChiK 1136 1 revision imported from [[:en:Template:Primary_source_inline]] 373859 wikitext text/x-wiki {{ {{{|safesubst:}}}#invoke:Unsubst||date=__DATE__ |$B= {{Fix | subst = <includeonly>{{subst:substcheck}}</includeonly> | link = Wikipedia:No original research#Primary, secondary and tertiary sources | text = non-primary source{{#if:{{{plural|}}}|s|}} needed | class = noprint Template-Fact | title = {{{reason|This claim needs references to reliable secondary sources.}}} | date = {{{date|}}} | cat = {{#if:{{{demo|}}}{{{nocat|}}}||[[Category:All pages needing factual verification]]}} | cat-date = {{#if:{{{demo|}}}{{{nocat|}}}||Category:Wikipedia articles needing factual verification}}}} }}<noinclude> <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> {{Documentation}} </noinclude> fb9agpgin7g1illn9bgc61za5qusowt ಟೆಂಪ್ಲೇಟ್:Cr 10 29110 373861 2026-04-18T13:24:05Z en>Primefac 0 Primefac moved page [[Template:Cr]] to [[Template:National men's cricket team]]: expand name for clarity 373861 wikitext text/x-wiki #REDIRECT [[Template:National men's cricket team]] {{Redirect category shell| {{R from move}} }} q24ewbe5zxzgj1pjxnvtjpq9qvg5jqm 373862 373861 2026-10-28T05:55:27Z ChiK 1136 1 revision imported from [[:en:Template:Cr]] 373861 wikitext text/x-wiki #REDIRECT [[Template:National men's cricket team]] {{Redirect category shell| {{R from move}} }} q24ewbe5zxzgj1pjxnvtjpq9qvg5jqm ಟೆಂಪ್ಲೇಟ್:Cite tweet 10 29111 373863 2023-08-14T09:22:29Z en>RMCD bot 0 Removing notice of move discussion 373863 wikitext text/x-wiki <includeonly>{{#invoke:cite tweet|main}}</includeonly><noinclude>{{documentation}}</noinclude> 68a6vc2qauxvburafhefmwiuimiwhwt 373864 373863 2026-10-28T05:55:27Z ChiK 1136 1 revision imported from [[:en:Template:Cite_tweet]] 373863 wikitext text/x-wiki <includeonly>{{#invoke:cite tweet|main}}</includeonly><noinclude>{{documentation}}</noinclude> 68a6vc2qauxvburafhefmwiuimiwhwt ಮೋಡ್ಯೂಲ್:Cite tweet 828 29112 373865 2026-03-15T11:04:49Z en>Trappist the monk 0 373865 Scribunto text/plain local TwitterSnowflake = require('Module:TwitterSnowflake') local err_msgs_t = { -- a sequence of snowflake date error messages; all must be terminated with a semicolon (;) ' <kbd>&#124;date=</kbd> / <kbd>&#124;number=</kbd> mismatch;', -- [1] ' <kbd>&#124;date=</kbd> required;', -- [2] ' Invalid <kbd>&#124;number=</kbd>;', -- [3] ' Missing or empty <kbd>&#124;number=</kbd>;', -- [4] ' Missing or empty <kbd>&#124;user=</kbd>;' -- [5] } --[[--------------------------< S U P P R E S S _ U R L _ I N _ T I T L E >------------------------------------ This function searches for and suppresses urls in |title=, |script-title=, and |trans-title= parameters so that {{cite web}} won't emit 'External link in |title=' error messages when rendered In the redering, urls are correctly formed as they were in the original tweet. The function looks for valid schemes and then wraps them in <nowiki>..</nowiki> tags. ]] local function suppress_url_in_title (frame, title) local schemes = { -- schemes commonly found in tweets 'https://', 'http://', 'ftp://', } if title then -- when there is a title, suppress any urls with known schemes; abandon else for _, scheme in ipairs (schemes) do -- spin through the list of schemes looking for a match title = title:gsub (scheme, frame:callParserFunction ('#tag', {'nowiki', scheme})); -- replace the scheme with its nowiki'd form (a strip marker) end end return title; -- done; return <title> modified or not end --[[--------------------------< D A T E _ N U M B E R _ U R L _ G E T >---------------------------------------- extract |date= and |number= parameter values if present. Extract date from |number= and compare to |date=. contruct |url= for {{cite web}} from the base url and |number= and |user= returns nothing; adds date, number, url to <cite_args_t>; adds error message(s) to <errors_t>. ]] local function date_number_url_get (args_t, cite_args_t, errors_t) local err_msg_index; cite_args_t.url = 'https://x.com/'; -- initialize with minimal base url because {{cite web}} requires |url= if not args_t.user then table.insert (errors_t, err_msgs_t[5]); -- error: missing or empty |user= end if not args_t.date and not args_t.number then err_msg_index = 4; -- error: missing or empty |number= elseif tonumber (args_t.number) then -- |number= without |date=? use number if tonumber(args_t.number) then cite_args_t.date = args_t.date or (args_t.number and TwitterSnowflake.snowflakeToDate{ args = {id_str = args_t.number} }); -- prefer |date=; extract date from |number= else else cite_args_t.date = args_t.date; -- |number= appears to be invalid; use |date= if provided end cite_args_t.number = args_t.number; -- use |number= valid or not if args_t.user then -- |number= appears to have a valid value; if |user= has a value local lang_obj = mw.getContentLanguage(); local good, test_date = pcall (lang_obj.formatDate, lang_obj, 'Ymd', cite_args_t.date); if good then if 20240517 > tonumber (test_date) then -- the switch to x.com was completed 2024-05-17 cite_args_t.url = 'https://twitter.com/'; end if 20230723 > tonumber (test_date) then -- rebranded to x on 2023-07-23 cite_args_t.via = args_t.link == 'no' and 'Twitter' or '[[Twitter]]'; else cite_args_t.via = args_t.link == 'no' and 'X (formerly Twitter)' or '[[X (formerly Twitter)]]'; end end cite_args_t.url = cite_args_t.url .. args_t.user .. '/status/' .. args_t.number; -- construct |url= for {{cite web}} end elseif args_t.number then -- |number= with a value that can't be converted to a number; invalid err_msg_index = 3; -- error: invalid number (couldn't convert to number) elseif not args_t.number then -- |date= without |number= use date cite_args_t.date = args_t.date; -- |date= has a value, use it err_msg_index = 4; -- error: missing or empty |number= end if err_msg_index then table.insert (errors_t, err_msgs_t[err_msg_index]); -- invalid number or missing necessary parameters so abandon return; end err_msg_index = TwitterSnowflake.datecheck ({ args = { -- returns error message index number on error; nil else id_str = args_t.number or '', date = args_t.date or '', error1 = 1, -- these numbers are indexes into <err_msgs_t> to override snowflake default error messages error2 = 2, -- done this way to avoid long string comparison looking for error3 = 3 -- the undated-pre-twitter-epoch-post message }}); if 2 == err_msg_index then -- when no date and posted before twitter epoch cite_args_t.date = nil; -- suppress default date because {{cite tweet}} should not claim in its own voice that the undated post was posted 2010-11-04 end table.insert (errors_t, err_msgs_t[err_msg_index]); -- add error message end --[[--------------------------< M A I N >---------------------------------------------------------------------- construct parameter set for {{cite web}} from {{cite tweet}} parameters; do some error checking ]] local function main (frame) local args_t = require ('Module:Arguments').getArgs (frame); local cite_args_t = { title = suppress_url_in_title (frame, args_t.title), ['script-title'] = suppress_url_in_title (frame, args_t['script-title']), ['trans-title'] = suppress_url_in_title (frame, args_t['trans-title']), language = args_t.language, last1 = args_t.last1 or args_t.last, first1 = args_t.first1 or args_t.first, author1 = args_t.author1 or args_t.author, ['author-link'] = args_t['author-link'] or args_t.authorlink, others = args_t.retweet and ('Retweeted by ' .. args_t.retweet), type = args_t.link == 'no' and 'Tweet' or '[[Tweet (social media)|Tweet]]', location = args_t.location, -- why |location=? tweets are online; there is no publication place ['access-date'] = args_t['access-date'] or args_t.accessdate, ['archive-date'] = args_t['archive-date'] or args_t.archivedate, ['archive-url'] = args_t['archive-url'] or args_t.archiveurl, ['url-status'] = args_t['url-status'], ['url-access'] = args_t['url-access'], quote = args_t.quote, ref = args_t.ref, df = args_t.df, mode = args_t.mode } local errors_t = {'<span class="cs1-visible-error citation-comment"> <kbd>{{[[Template:Cite tweet|Cite tweet]]}}</kbd>:'}; -- initialize sequence of error messages with style tag date_number_url_get (args_t, cite_args_t, errors_t); -- add |date=, |number=, |url= to <cite_args_t> local author = ((cite_args_t.last1 and cite_args_t.first1) and cite_args_t.last1 .. ', ' .. cite_args_t.first1) or -- concatenate |last= with |first= for |author-mask= (cite_args_t.last1 and cite_args_t.last1) or -- only |last= for |author-mask= (cite_args_t.author1 and cite_args_t.author1:gsub('^%(%((.+)%)%)$', '%1')); -- |author= or |author1= stripped of accept-as-written markup for |author-mask= if author and args_t.user then cite_args_t['author-mask'] = author .. ' [@' .. (args_t.user or '') .. ']' -- concatenate <author> and |user= into |author-mask= elseif args_t.user then cite_args_t.author1 = '((' .. args_t.user .. '))'; -- just the user name for cs1|2 metadata cite_args_t['author-mask'] = '@' .. args_t.user; -- make a mask for display else -- here when neither <author> nor |user= cite_args_t.author1 = nil; -- so unset end local rendering = require ('Module:Citation/CS1')._citation (nil, cite_args_t, {CitationClass = 'web'}); ---------- error messaging ---------- if errors_t[2] then -- errors_t[2] nil when no errors if rendering:find ('cs1-visible-error', 1, true) then -- rendered {{cite web}} with errors will have this string errors_t[1] = errors_t[1]:gsub ('> <', '>; <'); -- insert semicolon to terminate cs1|2 error message string end errors_t[#errors_t] = errors_t[#errors_t]:gsub (';$',' ([[Template:Cite_tweet#Error_detection|help]])'); -- replace trailing semicolon with help link table.insert (errors_t, '</span>'); -- close style span tag if mw.title.getCurrentTitle():inNamespace (0) then -- mainspace only table.insert (errors_t, '[[Category:Cite tweet templates with errors]]'); -- add error category end rendering = rendering .. table.concat (errors_t); -- append error messaging, help links and catagories end return rendering; end --[[--------------------------< E X P O R T S >---------------------------------------------------------------- ]] return { main = main, -- entry points; {{#invoke:cite tweet|main|...}} is preferred [''] = main, -- but {{#invoke:cite tweet||...}} is also acceptable } ta5t21jgn7hypav1bwn6tqln3ap0f3b 373866 373865 2026-10-28T05:55:27Z ChiK 1136 1 revision imported from [[:en:Module:Cite_tweet]] 373865 Scribunto text/plain local TwitterSnowflake = require('Module:TwitterSnowflake') local err_msgs_t = { -- a sequence of snowflake date error messages; all must be terminated with a semicolon (;) ' <kbd>&#124;date=</kbd> / <kbd>&#124;number=</kbd> mismatch;', -- [1] ' <kbd>&#124;date=</kbd> required;', -- [2] ' Invalid <kbd>&#124;number=</kbd>;', -- [3] ' Missing or empty <kbd>&#124;number=</kbd>;', -- [4] ' Missing or empty <kbd>&#124;user=</kbd>;' -- [5] } --[[--------------------------< S U P P R E S S _ U R L _ I N _ T I T L E >------------------------------------ This function searches for and suppresses urls in |title=, |script-title=, and |trans-title= parameters so that {{cite web}} won't emit 'External link in |title=' error messages when rendered In the redering, urls are correctly formed as they were in the original tweet. The function looks for valid schemes and then wraps them in <nowiki>..</nowiki> tags. ]] local function suppress_url_in_title (frame, title) local schemes = { -- schemes commonly found in tweets 'https://', 'http://', 'ftp://', } if title then -- when there is a title, suppress any urls with known schemes; abandon else for _, scheme in ipairs (schemes) do -- spin through the list of schemes looking for a match title = title:gsub (scheme, frame:callParserFunction ('#tag', {'nowiki', scheme})); -- replace the scheme with its nowiki'd form (a strip marker) end end return title; -- done; return <title> modified or not end --[[--------------------------< D A T E _ N U M B E R _ U R L _ G E T >---------------------------------------- extract |date= and |number= parameter values if present. Extract date from |number= and compare to |date=. contruct |url= for {{cite web}} from the base url and |number= and |user= returns nothing; adds date, number, url to <cite_args_t>; adds error message(s) to <errors_t>. ]] local function date_number_url_get (args_t, cite_args_t, errors_t) local err_msg_index; cite_args_t.url = 'https://x.com/'; -- initialize with minimal base url because {{cite web}} requires |url= if not args_t.user then table.insert (errors_t, err_msgs_t[5]); -- error: missing or empty |user= end if not args_t.date and not args_t.number then err_msg_index = 4; -- error: missing or empty |number= elseif tonumber (args_t.number) then -- |number= without |date=? use number if tonumber(args_t.number) then cite_args_t.date = args_t.date or (args_t.number and TwitterSnowflake.snowflakeToDate{ args = {id_str = args_t.number} }); -- prefer |date=; extract date from |number= else else cite_args_t.date = args_t.date; -- |number= appears to be invalid; use |date= if provided end cite_args_t.number = args_t.number; -- use |number= valid or not if args_t.user then -- |number= appears to have a valid value; if |user= has a value local lang_obj = mw.getContentLanguage(); local good, test_date = pcall (lang_obj.formatDate, lang_obj, 'Ymd', cite_args_t.date); if good then if 20240517 > tonumber (test_date) then -- the switch to x.com was completed 2024-05-17 cite_args_t.url = 'https://twitter.com/'; end if 20230723 > tonumber (test_date) then -- rebranded to x on 2023-07-23 cite_args_t.via = args_t.link == 'no' and 'Twitter' or '[[Twitter]]'; else cite_args_t.via = args_t.link == 'no' and 'X (formerly Twitter)' or '[[X (formerly Twitter)]]'; end end cite_args_t.url = cite_args_t.url .. args_t.user .. '/status/' .. args_t.number; -- construct |url= for {{cite web}} end elseif args_t.number then -- |number= with a value that can't be converted to a number; invalid err_msg_index = 3; -- error: invalid number (couldn't convert to number) elseif not args_t.number then -- |date= without |number= use date cite_args_t.date = args_t.date; -- |date= has a value, use it err_msg_index = 4; -- error: missing or empty |number= end if err_msg_index then table.insert (errors_t, err_msgs_t[err_msg_index]); -- invalid number or missing necessary parameters so abandon return; end err_msg_index = TwitterSnowflake.datecheck ({ args = { -- returns error message index number on error; nil else id_str = args_t.number or '', date = args_t.date or '', error1 = 1, -- these numbers are indexes into <err_msgs_t> to override snowflake default error messages error2 = 2, -- done this way to avoid long string comparison looking for error3 = 3 -- the undated-pre-twitter-epoch-post message }}); if 2 == err_msg_index then -- when no date and posted before twitter epoch cite_args_t.date = nil; -- suppress default date because {{cite tweet}} should not claim in its own voice that the undated post was posted 2010-11-04 end table.insert (errors_t, err_msgs_t[err_msg_index]); -- add error message end --[[--------------------------< M A I N >---------------------------------------------------------------------- construct parameter set for {{cite web}} from {{cite tweet}} parameters; do some error checking ]] local function main (frame) local args_t = require ('Module:Arguments').getArgs (frame); local cite_args_t = { title = suppress_url_in_title (frame, args_t.title), ['script-title'] = suppress_url_in_title (frame, args_t['script-title']), ['trans-title'] = suppress_url_in_title (frame, args_t['trans-title']), language = args_t.language, last1 = args_t.last1 or args_t.last, first1 = args_t.first1 or args_t.first, author1 = args_t.author1 or args_t.author, ['author-link'] = args_t['author-link'] or args_t.authorlink, others = args_t.retweet and ('Retweeted by ' .. args_t.retweet), type = args_t.link == 'no' and 'Tweet' or '[[Tweet (social media)|Tweet]]', location = args_t.location, -- why |location=? tweets are online; there is no publication place ['access-date'] = args_t['access-date'] or args_t.accessdate, ['archive-date'] = args_t['archive-date'] or args_t.archivedate, ['archive-url'] = args_t['archive-url'] or args_t.archiveurl, ['url-status'] = args_t['url-status'], ['url-access'] = args_t['url-access'], quote = args_t.quote, ref = args_t.ref, df = args_t.df, mode = args_t.mode } local errors_t = {'<span class="cs1-visible-error citation-comment"> <kbd>{{[[Template:Cite tweet|Cite tweet]]}}</kbd>:'}; -- initialize sequence of error messages with style tag date_number_url_get (args_t, cite_args_t, errors_t); -- add |date=, |number=, |url= to <cite_args_t> local author = ((cite_args_t.last1 and cite_args_t.first1) and cite_args_t.last1 .. ', ' .. cite_args_t.first1) or -- concatenate |last= with |first= for |author-mask= (cite_args_t.last1 and cite_args_t.last1) or -- only |last= for |author-mask= (cite_args_t.author1 and cite_args_t.author1:gsub('^%(%((.+)%)%)$', '%1')); -- |author= or |author1= stripped of accept-as-written markup for |author-mask= if author and args_t.user then cite_args_t['author-mask'] = author .. ' [@' .. (args_t.user or '') .. ']' -- concatenate <author> and |user= into |author-mask= elseif args_t.user then cite_args_t.author1 = '((' .. args_t.user .. '))'; -- just the user name for cs1|2 metadata cite_args_t['author-mask'] = '@' .. args_t.user; -- make a mask for display else -- here when neither <author> nor |user= cite_args_t.author1 = nil; -- so unset end local rendering = require ('Module:Citation/CS1')._citation (nil, cite_args_t, {CitationClass = 'web'}); ---------- error messaging ---------- if errors_t[2] then -- errors_t[2] nil when no errors if rendering:find ('cs1-visible-error', 1, true) then -- rendered {{cite web}} with errors will have this string errors_t[1] = errors_t[1]:gsub ('> <', '>; <'); -- insert semicolon to terminate cs1|2 error message string end errors_t[#errors_t] = errors_t[#errors_t]:gsub (';$',' ([[Template:Cite_tweet#Error_detection|help]])'); -- replace trailing semicolon with help link table.insert (errors_t, '</span>'); -- close style span tag if mw.title.getCurrentTitle():inNamespace (0) then -- mainspace only table.insert (errors_t, '[[Category:Cite tweet templates with errors]]'); -- add error category end rendering = rendering .. table.concat (errors_t); -- append error messaging, help links and catagories end return rendering; end --[[--------------------------< E X P O R T S >---------------------------------------------------------------- ]] return { main = main, -- entry points; {{#invoke:cite tweet|main|...}} is preferred [''] = main, -- but {{#invoke:cite tweet||...}} is also acceptable } ta5t21jgn7hypav1bwn6tqln3ap0f3b ಮೋಡ್ಯೂಲ್:TwitterSnowflake 828 29113 373867 2023-01-24T23:20:20Z en>Pppery 0 Fix a Lua error appearing on pages such as [[August 11]] when there's no date 373867 Scribunto text/plain local p = {} local Date = require('Module:Date')._Date function p.snowflakeToDate(frame) local format = frame.args.format or "%B %e, %Y" local epoch = tonumber(frame.args.epoch) or 1288834974 local id_str = frame.args.id_str if type(id_str) ~= "string" then error("bad argument #1 (expected string, got " .. type(id_str) .. ")", 2) end if type(format) ~= "string" then error("bad argument #2 (expected string, got " .. type(format) .. ")", 2) end if type(epoch) ~= "number" then error("bad argument #3 (expected number, got " .. type(epoch) .. ")", 2) end local hi, lo = 0, 0 local hiexp = 1 local two32 = 2^32 for c in id_str:gmatch(".") do lo = lo * 10 + c if lo >= two32 then hi, lo = hi * 10^hiexp + math.floor(lo / two32), lo % two32 hiexp = 1 else hiexp = hiexp + 1 end end hi = hi * 10^(hiexp-1) local timestamp = math.floor((hi * 1024 + math.floor(lo / 4194304)) / 1000) + epoch return os.date(format, timestamp) end function p.getDate(frame) -- just pass frame directly to snowflakeToDate, this wraps it but the args are the same plus if (frame.args.id_str):match("%D") then -- not a number, so return -2 return -2 end frame.args.format = "%B %e, %Y" if frame.args.date then frame.args.date = mw.ustring.gsub(frame.args.date, "(%d%d%d%d)%a", "%1") end frame.args.epoch = tonumber(frame.args.epoch) or 1288834974 local epochdate = Date(os.date("%B %e, %Y", frame.args.epoch)) local twitterdate = Date(p.snowflakeToDate(frame)) if twitterdate == epochdate then -- created before epoch, so can't determine the date return -1 end local date = Date(frame.args.date) or 0 -- if we error here, then an input of no date causes an error, which is contrary to the entire way {{TwitterSnowflake/datecheck}} works return date - twitterdate end local function abs_datediff(x) if type(x) == 'number' then return math.abs(x) end return math.abs(x.age_days) end function p.datecheck(frame) local args = frame.args if not (args.date and args.id_str) then error('Must define date and id_str, even if they are blank.') end local errors = { args.error1 or 'Date mismatch of two or more days', args.error2 or 'No date, and posted before November 4, 2010', args.error3 or 'Invalid id_str' } if mw.title.getCurrentTitle():inNamespace(0) and args.error_cat then for i = 1, 3 do errors[i] = errors[i] .. '[[' .. args.error_cat .. ']]' end end if not args.date:match('^%s*$') then -- #if:{{{date|}}} local testResult = p.getDate{ args = { date = args.date, id_str = args.id_str }} if testResult == -2 then return errors[3] end if abs_datediff(testResult) > 1 then return errors[1] end elseif not args.id_str:match('^%s*$') then local testResult = p.getDate{ args = { id_str = args.id_str }} if testResult == -1 then return errors[2] end if testResult == -2 then return errors[3] end end end return p khfowsd9glcvpr7q9l5wtfn1h6n245w 373868 373867 2026-10-28T05:55:27Z ChiK 1136 1 revision imported from [[:en:Module:TwitterSnowflake]] 373867 Scribunto text/plain local p = {} local Date = require('Module:Date')._Date function p.snowflakeToDate(frame) local format = frame.args.format or "%B %e, %Y" local epoch = tonumber(frame.args.epoch) or 1288834974 local id_str = frame.args.id_str if type(id_str) ~= "string" then error("bad argument #1 (expected string, got " .. type(id_str) .. ")", 2) end if type(format) ~= "string" then error("bad argument #2 (expected string, got " .. type(format) .. ")", 2) end if type(epoch) ~= "number" then error("bad argument #3 (expected number, got " .. type(epoch) .. ")", 2) end local hi, lo = 0, 0 local hiexp = 1 local two32 = 2^32 for c in id_str:gmatch(".") do lo = lo * 10 + c if lo >= two32 then hi, lo = hi * 10^hiexp + math.floor(lo / two32), lo % two32 hiexp = 1 else hiexp = hiexp + 1 end end hi = hi * 10^(hiexp-1) local timestamp = math.floor((hi * 1024 + math.floor(lo / 4194304)) / 1000) + epoch return os.date(format, timestamp) end function p.getDate(frame) -- just pass frame directly to snowflakeToDate, this wraps it but the args are the same plus if (frame.args.id_str):match("%D") then -- not a number, so return -2 return -2 end frame.args.format = "%B %e, %Y" if frame.args.date then frame.args.date = mw.ustring.gsub(frame.args.date, "(%d%d%d%d)%a", "%1") end frame.args.epoch = tonumber(frame.args.epoch) or 1288834974 local epochdate = Date(os.date("%B %e, %Y", frame.args.epoch)) local twitterdate = Date(p.snowflakeToDate(frame)) if twitterdate == epochdate then -- created before epoch, so can't determine the date return -1 end local date = Date(frame.args.date) or 0 -- if we error here, then an input of no date causes an error, which is contrary to the entire way {{TwitterSnowflake/datecheck}} works return date - twitterdate end local function abs_datediff(x) if type(x) == 'number' then return math.abs(x) end return math.abs(x.age_days) end function p.datecheck(frame) local args = frame.args if not (args.date and args.id_str) then error('Must define date and id_str, even if they are blank.') end local errors = { args.error1 or 'Date mismatch of two or more days', args.error2 or 'No date, and posted before November 4, 2010', args.error3 or 'Invalid id_str' } if mw.title.getCurrentTitle():inNamespace(0) and args.error_cat then for i = 1, 3 do errors[i] = errors[i] .. '[[' .. args.error_cat .. ']]' end end if not args.date:match('^%s*$') then -- #if:{{{date|}}} local testResult = p.getDate{ args = { date = args.date, id_str = args.id_str }} if testResult == -2 then return errors[3] end if abs_datediff(testResult) > 1 then return errors[1] end elseif not args.id_str:match('^%s*$') then local testResult = p.getDate{ args = { id_str = args.id_str }} if testResult == -1 then return errors[2] end if testResult == -2 then return errors[3] end end end return p khfowsd9glcvpr7q9l5wtfn1h6n245w ಟೆಂಪ್ಲೇಟ್:Rcb 10 29114 373873 2025-08-11T23:24:16Z en>Pppery 0 Changed protection settings for "[[Template:Rcb]]" ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite)) 373873 wikitext text/x-wiki #REDIRECT [[Template:Rail color box]] hn08it8gws98wut5a7rb5e1v19xw4ag 373874 373873 2026-10-28T05:55:28Z ChiK 1136 1 revision imported from [[:en:Template:Rcb]] 373873 wikitext text/x-wiki #REDIRECT [[Template:Rail color box]] hn08it8gws98wut5a7rb5e1v19xw4ag ಟೆಂಪ್ಲೇಟ್:Infobox cricket ground 10 29115 373877 2026-04-19T14:07:01Z en>Mashfi23 0 373877 wikitext text/x-wiki {{Infobox |child = {{lc:{{{embed|}}}}} |bodyclass = vcard |titleclass = adr |title = {{#ifeq:{{lc:{{{embed|}}}}}|yes||<span class="fn org extended-address">{{if empty|{{{ground_name|}}}|{{{ground|}}}|<includeonly>{{PAGENAMEBASE}}</includeonly>}}</span>}} |subheader = {{#if:{{{nickname|{{{othernames|}}}}}}|<span class="nickname">{{{nickname|{{{othernames|}}}}}}</span>}} |image = {{#invoke:InfoboxImage|InfoboxImage|image={{{logo_image|}}}|size={{{logosize|{{{logo_size|}}}}}}|sizedefault=frameless}} |caption = {{{logo_caption|}}} |image2 = {{#invoke:InfoboxImage|InfoboxImage|image={{{image|}}}|size={{{imagesize|{{{image_size|}}}}}}|sizedefault=270px}} |caption2 = {{{caption|}}} |image3 = {{{map|}}} |image4 ={{#invoke:Infobox mapframe|autoWithCaption |onByDefault={{#if:{{{embed|}}}|no|yes}} |mapframe-marker=cricket |mapframe-wikidata=yes |mapframe-zoom=13 |mapframe-caption = Interactive map of {{if empty|{{{ground_name|}}}|{{{ground|}}}|{{PAGENAMEBASE}}}} }} |headerstyle = background:lavender;color:inherit; |header1 = {{#if:{{{international|}}}{{{club1|}}}{{#ifeq:{{lc:{{{embed|}}}}}|yes|yes}}|Ground information}}<!-- suppress first header if it's the only header --> |label2 = Location |data2 = {{{location|}}} |label3 = Country |data3 = {{{country|}}} |label4 = Coordinates |data4 = {{{coordinates|{{{coord|}}} }}} |label5 = Home club |data5 = {{{home_club|{{{home club|}}}}}} |label6 = County club |data6 = {{{county_club|{{{county club|}}}}}} |label7 = Establishment |data7 = {{{establishment|{{{established|}}}}}} |label8 = Demolished |data8 = {{{demolished|}}} |label9 = Capacity |data9 = {{{seating_capacity|}}} |label10 = Owner |data10 = {{{owner|}}} |label11 = Architect |data11 = {{{architect|}}} |label12 = Contractor |data12 = {{{contractor|}}} |label13 = Operator |data13 = {{{operator|}}} |label14 = Tenants |data14 = {{{tenants|}}} |label15 = Website |data15 = {{{website|}}} |label16 = Last used |data16 = {{{last_used|{{{last used|}}}}}} |data17 = {{#if:{{{end1|}}}{{{end2|}}}|'''End names'''}} |data18 = {{br separated entries|1={{{end1|}}}|2={{{end2|}}}}} |header19= {{#if:{{{international|}}}|International information}} |label20 = First men's Test |data20 = {{#if:{{{firsttestdate|}}}|{{{firsttestdate|}}} {{{firsttestyear|}}}:<br>{{cr|{{{firsttesthome|}}}|{{{firsttesthomevar|}}}}} v {{cr|{{{firsttestaway|}}}|{{{firsttestawayvar|}}}}}}} |label21 = Last men's Test |data21 = {{#if:{{{lasttestdate|}}}|{{{lasttestdate|}}} {{{lasttestyear|}}}:<br>{{cr|{{{lasttesthome|}}}|{{{lasttesthomevar|}}}}} v {{cr|{{{lasttestaway|}}}|{{{lasttestawayvar|}}}}}}} |label22 = Only men's Test |data22 = {{#if:{{{onlytestdate|}}}|{{{onlytestdate|}}} {{{onlytestyear|}}}:<br>{{cr|{{{onlytesthome|}}}|{{{onlytesthomevar|}}}}} v {{cr|{{{onlytestaway|}}}|{{{onlytestawayvar|}}}}}}} |label23 = First men's ODI |data23 = {{#if:{{{firstodidate|}}}|{{{firstodidate|}}} {{{firstodiyear|}}}:<br>{{cr|{{{firstodihome|}}}|{{{firstodihomevar|}}}}} v {{cr|{{{firstodiaway|}}}|{{{firstodiawayvar|}}}}}}} |label24 = Last men's ODI |data24 = {{#if:{{{lastodidate|}}}|{{{lastodidate|}}} {{{lastodiyear|}}}:<br>{{cr|{{{lastodihome|}}}|{{{lastodihomevar|}}}}} v {{cr|{{{lastodiaway|}}}|{{{lastodiawayvar|}}}}}}} |label25 = Only men's ODI |data25 = {{#if:{{{onlyodidate|}}}|{{{onlyodidate|}}} {{{onlyodiyear|}}}:<br>{{cr|{{{onlyodihome|}}}|{{{onlyodihomevar|}}}}} v {{cr|{{{onlyodiaway|}}}|{{{onlyodiawayvar|}}}}}}} |label26 = First men's T20I |data26 = {{#if:{{{firstt20idate|}}}|{{{firstt20idate|}}} {{{firstt20iyear|}}}:<br>{{cr|{{{firstt20ihome|}}}|{{{firstt20ihomevar|}}}}} v {{cr|{{{firstt20iaway|}}}|{{{firstt20iawayvar|}}}}}}} |label27 = Last men's T20I |data27 = {{#if:{{{lastt20idate|}}}|{{{lastt20idate|}}} {{{lastt20iyear|}}}:<br>{{#ifeq:{{{lastt20ihomeflag|}}}|no|{{{lastt20ihome|}}}|{{cr|{{{lastt20ihome|}}}|{{{lastt20ihomevar|}}}}}}} v {{cr|{{{lastt20iaway|}}}|{{{lastt20iawayvar|}}}}}}} |label28 = Only men's T20I |data28 = {{#if:{{{onlyt20idate|}}}|{{{onlyt20idate|}}} {{{onlyt20iyear|}}}:<br>{{cr|{{{onlyt20ihome|}}}|{{{onlyt20ihomevar|}}}}} v {{cr|{{{onlyt20iaway|}}}|{{{onlyt20iawayvar|}}}}}}} |label29 = First women's Test |data29 = {{#if:{{{firstwtestdate|}}}|{{{firstwtestdate|}}} {{{firstwtestyear|}}}:<br>{{crw|{{{firstwtesthome|}}}|{{{firstwtesthomevar|}}}}} v {{crw|{{{firstwtestaway|}}}|{{{firstwtestawayvar|}}}}}}} |label30 = Last women's Test |data30 = {{#if:{{{lastwtestdate|}}}|{{{lastwtestdate|}}} {{{lastwtestyear|}}}:<br>{{crw|{{{lastwtesthome|}}}|{{{lastwtesthomevar|}}}}} v {{crw|{{{lastwtestaway|}}}|{{{lastwtestawayvar|}}}}}}} |label31 = Only women's Test |data31 = {{#if:{{{onlywtestdate|}}}|{{{onlywtestdate|}}} {{{onlywtestyear|}}}:<br>{{crw|{{{onlywtesthome|}}}|{{{onlywtesthomevar|}}}}} v {{crw|{{{onlywtestaway|}}}|{{{onlywtestawayvar|}}}}}}} |label32 = First women's ODI |data32 = {{#if:{{{firstwodidate|}}}|{{{firstwodidate|}}} {{{firstwodiyear|}}}:<br>{{crw|{{{firstwodihome|}}}|{{{firstwodihomevar|}}}}} v {{crw|{{{firstwodiaway|}}}|{{{firstwodiawayvar|}}}}}}} |label33 = Last women's ODI |data33 = {{#if:{{{lastwodidate|}}}|{{{lastwodidate|}}} {{{lastwodiyear|}}}:<br>{{crw|{{{lastwodihome|}}}|{{{lastwodihomevar|}}}}} v {{crw|{{{lastwodiaway|}}}|{{{lastwodiawayvar|}}}}}}} |label34 = Only women's ODI |data34 = {{#if:{{{onlywodidate|}}}|{{{onlywodidate|}}} {{{onlywodiyear|}}}:<br>{{crw|{{{onlywodihome|}}}|{{{onlywodihomevar|}}}}} v {{crw|{{{onlywodiaway|}}}|{{{onlywodiawayvar|}}}}}}} |label35 = First women's T20I |data35 = {{#if:{{{firstwt20idate|}}}|{{{firstwt20idate|}}} {{{firstwt20iyear|}}}:<br>{{crw|{{{firstwt20ihome|}}}|{{{firstwt20ihomevar|}}}}} v {{crw|{{{firstwt20iaway|}}}|{{{firstwt20iawayvar|}}}}}}} |label36 = Last women's T20I |data36 = {{#if:{{{lastwt20idate|}}}|{{{lastwt20idate|}}} {{{lastwt20iyear|}}}:<br>{{crw|{{{lastwt20ihome|}}}|{{{lastwt20ihomevar|}}}}} v {{crw|{{{lastwt20iaway|}}}|{{{lastwt20iawayvar|}}}}}}} |label37 = Only women's T20I |data37 = {{#if:{{{onlywt20idate|}}}|{{{onlywt20idate|}}} {{{onlywt20iyear|}}}:<br>{{crw|{{{onlywt20ihome|}}}|{{{onlywt20ihomevar|}}}}} v {{crw|{{{onlywt20iaway|}}}|{{{onlywt20iawayvar|}}}}}}} |header38= {{#if:{{{club1|}}}|Team information}} |data39 = {{#if:{{{club1|}}}|<table style="width:100%"> {{#if:{{{club1|}}}|<tr><th style="font-weight:normal;text-align:left">{{{club1}}}</th> <td style="text-align:right">{{#if:{{{year1|}}}|({{{year1|}}})}}</td></tr> }}{{#if:{{{club2|}}}|<tr><th style="font-weight:normal;text-align:left">{{{club2}}}</th> <td style="text-align:right">{{#if:{{{year2|}}}|({{{year2|}}})}}</td></tr> }}{{#if:{{{club3|}}}|<tr><th style="font-weight:normal;text-align:left">{{{club3}}}</th> <td style="text-align:right">{{#if:{{{year3|}}}|({{{year3|}}})}}</td></tr> }}{{#if:{{{club4|}}}|<tr><th style="font-weight:normal;text-align:left">{{{club4}}}</th> <td style="text-align:right">{{#if:{{{year4|}}}|({{{year4|}}})}}</td></tr> }}{{#if:{{{club5|}}}|<tr><th style="font-weight:normal;text-align:left">{{{club5}}}</th> <td style="text-align:right">{{#if:{{{year5|}}}|({{{year5|}}})}}</td></tr> }}{{#if:{{{club6|}}}|<tr><th style="font-weight:normal;text-align:left">{{{club6}}}</th> <td style="text-align:right">{{#if:{{{year6|}}}|({{{year6|}}})}}</td></tr> }}{{#if:{{{club7|}}}|<tr><th style="font-weight:normal;text-align:left">{{{club7}}}</th> <td style="text-align:right">{{#if:{{{year7|}}}|({{{year7|}}})}}</td></tr> }}{{#if:{{{club8|}}}|<tr><th style="font-weight:normal;text-align:left">{{{club8}}}</th> <td style="text-align:right">{{#if:{{{year8|}}}|({{{year8|}}})}}</td></tr> }}{{#if:{{{club9|}}}|<tr><th style="font-weight:normal;text-align:left">{{{club9}}}</th> <td style="text-align:right">{{#if:{{{year9|}}}|({{{year9|}}})}}</td></tr> }}{{#if:{{{club10|}}}|<tr><th style="font-weight:normal;text-align:left">{{{club10}}}</th> <td style="text-align:right">{{#if:{{{year10|}}}|({{{year10|}}})}}</td></tr> }}</table>}} |belowstyle = border-top:#ccc 1px solid;font-size:smaller; |below = {{br separated entries |1= {{#if:{{{date|}}} {{{year|}}}|As of {{{date|}}} {{{year|}}}}} |2= {{#if:{{{source|}}}|Source: {{#ifeq:{{Str left|{{{source}}}|4}}|http|[{{{source}}}]|{{{source}}}}}}} }} }}{{#if:{{{source|}}}|{{#ifeq:{{Str left|{{{source}}}|4}}|http||[[Category:Infobox cricket ground maintenance]] }}}}{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using infobox cricket ground with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Infobox cricket ground]] with unknown parameter "_VALUE_"|ignoreblank=y|mapframe_args=y| architect | caption | club1 | club2 | club3 | club4 | club5 | club6 | club7 | club8 | club9 | club10 | contractor | coord | coordinates | country | county club | county_club | date | demolished | embed | end1 | end2 | established | establishment | firstodiaway | firstodiawayvar | firstodidate | firstodihome | firstodihomevar | firstodiyear | firstt20iaway | firstt20iawayvar | firstt20idate | firstt20ihome | firstt20ihomevar | firstt20iyear | firsttestaway | firsttestawayvar | firsttestdate | firsttesthome | firsttesthomevar | firsttestyear | firstwodiaway | firstwodiawayvar | firstwodidate | firstwodihome | firstwodihomevar | firstwodiyear | firstwt20iaway | firstwt20iawayvar | firstwt20idate | firstwt20ihome | firstwt20ihomevar | firstwt20iyear | firstwtestaway | firstwtestawayvar | firstwtestdate | firstwtesthome | firstwtesthomevar | firstwtestyear | ground | ground_name | home club | home_club | image | image_size | imagesize | international | last used | last_used | lastodiaway | lastodiawayvar | lastodidate | lastodihome | lastodihomevar | lastodiyear | lastt20iaway | lastt20iawayvar | lastt20idate | lastt20ihome | lastt20ihomeflag | lastt20ihomevar | lastt20iyear | lasttestaway | lasttestawayvar | lasttestdate | lasttesthome | lasttesthomevar | lasttestyear | lastwodiaway | lastwodiawayvar | lastwodidate | lastwodihome | lastwodihomevar | lastwodiyear | lastwt20iaway | lastwt20iawayvar | lastwt20idate | lastwt20ihome | lastwt20ihomevar | lastwt20iyear | lastwtestaway | lastwtestawayvar | lastwtestdate | lastwtesthome | lastwtesthomevar | lastwtestyear | location | logo_caption | logo_image | logo_size | logosize | map | nickname | onlyodiaway | onlyodiawayvar | onlyodidate | onlyodihome | onlyodihomevar | onlyodiyear | onlyt20iaway | onlyt20iawayvar | onlyt20idate | onlyt20ihome | onlyt20ihomevar | onlyt20iyear | onlytestaway | onlytestawayvar | onlytestdate | onlytesthome | onlytesthomevar | onlytestyear | onlywodiaway | onlywodiawayvar | onlywodidate | onlywodihome | onlywodihomevar | onlywodiyear | onlywt20iaway | onlywt20iawayvar | onlywt20idate | onlywt20ihome | onlywt20ihomevar | onlywt20iyear | onlywtestaway | onlywtestawayvar | onlywtestdate | onlywtesthome | onlywtesthomevar | onlywtestyear | operator | othernames | owner | seating_capacity | source | tenants | website | year | year1 | year2 | year3 | year4 | year5 | year6 | year7 | year8 | year9 | year10 }}<noinclude>{{template doc}}</noinclude> 05626gb5atsr42gdo8bfys2gcprwpg6 373878 373877 2026-10-28T05:55:28Z ChiK 1136 1 revision imported from [[:en:Template:Infobox_cricket_ground]] 373877 wikitext text/x-wiki {{Infobox |child = {{lc:{{{embed|}}}}} |bodyclass = vcard |titleclass = adr |title = {{#ifeq:{{lc:{{{embed|}}}}}|yes||<span class="fn org extended-address">{{if empty|{{{ground_name|}}}|{{{ground|}}}|<includeonly>{{PAGENAMEBASE}}</includeonly>}}</span>}} |subheader = {{#if:{{{nickname|{{{othernames|}}}}}}|<span class="nickname">{{{nickname|{{{othernames|}}}}}}</span>}} |image = {{#invoke:InfoboxImage|InfoboxImage|image={{{logo_image|}}}|size={{{logosize|{{{logo_size|}}}}}}|sizedefault=frameless}} |caption = {{{logo_caption|}}} |image2 = {{#invoke:InfoboxImage|InfoboxImage|image={{{image|}}}|size={{{imagesize|{{{image_size|}}}}}}|sizedefault=270px}} |caption2 = {{{caption|}}} |image3 = {{{map|}}} |image4 ={{#invoke:Infobox mapframe|autoWithCaption |onByDefault={{#if:{{{embed|}}}|no|yes}} |mapframe-marker=cricket |mapframe-wikidata=yes |mapframe-zoom=13 |mapframe-caption = Interactive map of {{if empty|{{{ground_name|}}}|{{{ground|}}}|{{PAGENAMEBASE}}}} }} |headerstyle = background:lavender;color:inherit; |header1 = {{#if:{{{international|}}}{{{club1|}}}{{#ifeq:{{lc:{{{embed|}}}}}|yes|yes}}|Ground information}}<!-- suppress first header if it's the only header --> |label2 = Location |data2 = {{{location|}}} |label3 = Country |data3 = {{{country|}}} |label4 = Coordinates |data4 = {{{coordinates|{{{coord|}}} }}} |label5 = Home club |data5 = {{{home_club|{{{home club|}}}}}} |label6 = County club |data6 = {{{county_club|{{{county club|}}}}}} |label7 = Establishment |data7 = {{{establishment|{{{established|}}}}}} |label8 = Demolished |data8 = {{{demolished|}}} |label9 = Capacity |data9 = {{{seating_capacity|}}} |label10 = Owner |data10 = {{{owner|}}} |label11 = Architect |data11 = {{{architect|}}} |label12 = Contractor |data12 = {{{contractor|}}} |label13 = Operator |data13 = {{{operator|}}} |label14 = Tenants |data14 = {{{tenants|}}} |label15 = Website |data15 = {{{website|}}} |label16 = Last used |data16 = {{{last_used|{{{last used|}}}}}} |data17 = {{#if:{{{end1|}}}{{{end2|}}}|'''End names'''}} |data18 = {{br separated entries|1={{{end1|}}}|2={{{end2|}}}}} |header19= {{#if:{{{international|}}}|International information}} |label20 = First men's Test |data20 = {{#if:{{{firsttestdate|}}}|{{{firsttestdate|}}} {{{firsttestyear|}}}:<br>{{cr|{{{firsttesthome|}}}|{{{firsttesthomevar|}}}}} v {{cr|{{{firsttestaway|}}}|{{{firsttestawayvar|}}}}}}} |label21 = Last men's Test |data21 = {{#if:{{{lasttestdate|}}}|{{{lasttestdate|}}} {{{lasttestyear|}}}:<br>{{cr|{{{lasttesthome|}}}|{{{lasttesthomevar|}}}}} v {{cr|{{{lasttestaway|}}}|{{{lasttestawayvar|}}}}}}} |label22 = Only men's Test |data22 = {{#if:{{{onlytestdate|}}}|{{{onlytestdate|}}} {{{onlytestyear|}}}:<br>{{cr|{{{onlytesthome|}}}|{{{onlytesthomevar|}}}}} v {{cr|{{{onlytestaway|}}}|{{{onlytestawayvar|}}}}}}} |label23 = First men's ODI |data23 = {{#if:{{{firstodidate|}}}|{{{firstodidate|}}} {{{firstodiyear|}}}:<br>{{cr|{{{firstodihome|}}}|{{{firstodihomevar|}}}}} v {{cr|{{{firstodiaway|}}}|{{{firstodiawayvar|}}}}}}} |label24 = Last men's ODI |data24 = {{#if:{{{lastodidate|}}}|{{{lastodidate|}}} {{{lastodiyear|}}}:<br>{{cr|{{{lastodihome|}}}|{{{lastodihomevar|}}}}} v {{cr|{{{lastodiaway|}}}|{{{lastodiawayvar|}}}}}}} |label25 = Only men's ODI |data25 = {{#if:{{{onlyodidate|}}}|{{{onlyodidate|}}} {{{onlyodiyear|}}}:<br>{{cr|{{{onlyodihome|}}}|{{{onlyodihomevar|}}}}} v {{cr|{{{onlyodiaway|}}}|{{{onlyodiawayvar|}}}}}}} |label26 = First men's T20I |data26 = {{#if:{{{firstt20idate|}}}|{{{firstt20idate|}}} {{{firstt20iyear|}}}:<br>{{cr|{{{firstt20ihome|}}}|{{{firstt20ihomevar|}}}}} v {{cr|{{{firstt20iaway|}}}|{{{firstt20iawayvar|}}}}}}} |label27 = Last men's T20I |data27 = {{#if:{{{lastt20idate|}}}|{{{lastt20idate|}}} {{{lastt20iyear|}}}:<br>{{#ifeq:{{{lastt20ihomeflag|}}}|no|{{{lastt20ihome|}}}|{{cr|{{{lastt20ihome|}}}|{{{lastt20ihomevar|}}}}}}} v {{cr|{{{lastt20iaway|}}}|{{{lastt20iawayvar|}}}}}}} |label28 = Only men's T20I |data28 = {{#if:{{{onlyt20idate|}}}|{{{onlyt20idate|}}} {{{onlyt20iyear|}}}:<br>{{cr|{{{onlyt20ihome|}}}|{{{onlyt20ihomevar|}}}}} v {{cr|{{{onlyt20iaway|}}}|{{{onlyt20iawayvar|}}}}}}} |label29 = First women's Test |data29 = {{#if:{{{firstwtestdate|}}}|{{{firstwtestdate|}}} {{{firstwtestyear|}}}:<br>{{crw|{{{firstwtesthome|}}}|{{{firstwtesthomevar|}}}}} v {{crw|{{{firstwtestaway|}}}|{{{firstwtestawayvar|}}}}}}} |label30 = Last women's Test |data30 = {{#if:{{{lastwtestdate|}}}|{{{lastwtestdate|}}} {{{lastwtestyear|}}}:<br>{{crw|{{{lastwtesthome|}}}|{{{lastwtesthomevar|}}}}} v {{crw|{{{lastwtestaway|}}}|{{{lastwtestawayvar|}}}}}}} |label31 = Only women's Test |data31 = {{#if:{{{onlywtestdate|}}}|{{{onlywtestdate|}}} {{{onlywtestyear|}}}:<br>{{crw|{{{onlywtesthome|}}}|{{{onlywtesthomevar|}}}}} v {{crw|{{{onlywtestaway|}}}|{{{onlywtestawayvar|}}}}}}} |label32 = First women's ODI |data32 = {{#if:{{{firstwodidate|}}}|{{{firstwodidate|}}} {{{firstwodiyear|}}}:<br>{{crw|{{{firstwodihome|}}}|{{{firstwodihomevar|}}}}} v {{crw|{{{firstwodiaway|}}}|{{{firstwodiawayvar|}}}}}}} |label33 = Last women's ODI |data33 = {{#if:{{{lastwodidate|}}}|{{{lastwodidate|}}} {{{lastwodiyear|}}}:<br>{{crw|{{{lastwodihome|}}}|{{{lastwodihomevar|}}}}} v {{crw|{{{lastwodiaway|}}}|{{{lastwodiawayvar|}}}}}}} |label34 = Only women's ODI |data34 = {{#if:{{{onlywodidate|}}}|{{{onlywodidate|}}} {{{onlywodiyear|}}}:<br>{{crw|{{{onlywodihome|}}}|{{{onlywodihomevar|}}}}} v {{crw|{{{onlywodiaway|}}}|{{{onlywodiawayvar|}}}}}}} |label35 = First women's T20I |data35 = {{#if:{{{firstwt20idate|}}}|{{{firstwt20idate|}}} {{{firstwt20iyear|}}}:<br>{{crw|{{{firstwt20ihome|}}}|{{{firstwt20ihomevar|}}}}} v {{crw|{{{firstwt20iaway|}}}|{{{firstwt20iawayvar|}}}}}}} |label36 = Last women's T20I |data36 = {{#if:{{{lastwt20idate|}}}|{{{lastwt20idate|}}} {{{lastwt20iyear|}}}:<br>{{crw|{{{lastwt20ihome|}}}|{{{lastwt20ihomevar|}}}}} v {{crw|{{{lastwt20iaway|}}}|{{{lastwt20iawayvar|}}}}}}} |label37 = Only women's T20I |data37 = {{#if:{{{onlywt20idate|}}}|{{{onlywt20idate|}}} {{{onlywt20iyear|}}}:<br>{{crw|{{{onlywt20ihome|}}}|{{{onlywt20ihomevar|}}}}} v {{crw|{{{onlywt20iaway|}}}|{{{onlywt20iawayvar|}}}}}}} |header38= {{#if:{{{club1|}}}|Team information}} |data39 = {{#if:{{{club1|}}}|<table style="width:100%"> {{#if:{{{club1|}}}|<tr><th style="font-weight:normal;text-align:left">{{{club1}}}</th> <td style="text-align:right">{{#if:{{{year1|}}}|({{{year1|}}})}}</td></tr> }}{{#if:{{{club2|}}}|<tr><th style="font-weight:normal;text-align:left">{{{club2}}}</th> <td style="text-align:right">{{#if:{{{year2|}}}|({{{year2|}}})}}</td></tr> }}{{#if:{{{club3|}}}|<tr><th style="font-weight:normal;text-align:left">{{{club3}}}</th> <td style="text-align:right">{{#if:{{{year3|}}}|({{{year3|}}})}}</td></tr> }}{{#if:{{{club4|}}}|<tr><th style="font-weight:normal;text-align:left">{{{club4}}}</th> <td style="text-align:right">{{#if:{{{year4|}}}|({{{year4|}}})}}</td></tr> }}{{#if:{{{club5|}}}|<tr><th style="font-weight:normal;text-align:left">{{{club5}}}</th> <td style="text-align:right">{{#if:{{{year5|}}}|({{{year5|}}})}}</td></tr> }}{{#if:{{{club6|}}}|<tr><th style="font-weight:normal;text-align:left">{{{club6}}}</th> <td style="text-align:right">{{#if:{{{year6|}}}|({{{year6|}}})}}</td></tr> }}{{#if:{{{club7|}}}|<tr><th style="font-weight:normal;text-align:left">{{{club7}}}</th> <td style="text-align:right">{{#if:{{{year7|}}}|({{{year7|}}})}}</td></tr> }}{{#if:{{{club8|}}}|<tr><th style="font-weight:normal;text-align:left">{{{club8}}}</th> <td style="text-align:right">{{#if:{{{year8|}}}|({{{year8|}}})}}</td></tr> }}{{#if:{{{club9|}}}|<tr><th style="font-weight:normal;text-align:left">{{{club9}}}</th> <td style="text-align:right">{{#if:{{{year9|}}}|({{{year9|}}})}}</td></tr> }}{{#if:{{{club10|}}}|<tr><th style="font-weight:normal;text-align:left">{{{club10}}}</th> <td style="text-align:right">{{#if:{{{year10|}}}|({{{year10|}}})}}</td></tr> }}</table>}} |belowstyle = border-top:#ccc 1px solid;font-size:smaller; |below = {{br separated entries |1= {{#if:{{{date|}}} {{{year|}}}|As of {{{date|}}} {{{year|}}}}} |2= {{#if:{{{source|}}}|Source: {{#ifeq:{{Str left|{{{source}}}|4}}|http|[{{{source}}}]|{{{source}}}}}}} }} }}{{#if:{{{source|}}}|{{#ifeq:{{Str left|{{{source}}}|4}}|http||[[Category:Infobox cricket ground maintenance]] }}}}{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using infobox cricket ground with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Infobox cricket ground]] with unknown parameter "_VALUE_"|ignoreblank=y|mapframe_args=y| architect | caption | club1 | club2 | club3 | club4 | club5 | club6 | club7 | club8 | club9 | club10 | contractor | coord | coordinates | country | county club | county_club | date | demolished | embed | end1 | end2 | established | establishment | firstodiaway | firstodiawayvar | firstodidate | firstodihome | firstodihomevar | firstodiyear | firstt20iaway | firstt20iawayvar | firstt20idate | firstt20ihome | firstt20ihomevar | firstt20iyear | firsttestaway | firsttestawayvar | firsttestdate | firsttesthome | firsttesthomevar | firsttestyear | firstwodiaway | firstwodiawayvar | firstwodidate | firstwodihome | firstwodihomevar | firstwodiyear | firstwt20iaway | firstwt20iawayvar | firstwt20idate | firstwt20ihome | firstwt20ihomevar | firstwt20iyear | firstwtestaway | firstwtestawayvar | firstwtestdate | firstwtesthome | firstwtesthomevar | firstwtestyear | ground | ground_name | home club | home_club | image | image_size | imagesize | international | last used | last_used | lastodiaway | lastodiawayvar | lastodidate | lastodihome | lastodihomevar | lastodiyear | lastt20iaway | lastt20iawayvar | lastt20idate | lastt20ihome | lastt20ihomeflag | lastt20ihomevar | lastt20iyear | lasttestaway | lasttestawayvar | lasttestdate | lasttesthome | lasttesthomevar | lasttestyear | lastwodiaway | lastwodiawayvar | lastwodidate | lastwodihome | lastwodihomevar | lastwodiyear | lastwt20iaway | lastwt20iawayvar | lastwt20idate | lastwt20ihome | lastwt20ihomevar | lastwt20iyear | lastwtestaway | lastwtestawayvar | lastwtestdate | lastwtesthome | lastwtesthomevar | lastwtestyear | location | logo_caption | logo_image | logo_size | logosize | map | nickname | onlyodiaway | onlyodiawayvar | onlyodidate | onlyodihome | onlyodihomevar | onlyodiyear | onlyt20iaway | onlyt20iawayvar | onlyt20idate | onlyt20ihome | onlyt20ihomevar | onlyt20iyear | onlytestaway | onlytestawayvar | onlytestdate | onlytesthome | onlytesthomevar | onlytestyear | onlywodiaway | onlywodiawayvar | onlywodidate | onlywodihome | onlywodihomevar | onlywodiyear | onlywt20iaway | onlywt20iawayvar | onlywt20idate | onlywt20ihome | onlywt20ihomevar | onlywt20iyear | onlywtestaway | onlywtestawayvar | onlywtestdate | onlywtesthome | onlywtesthomevar | onlywtestyear | operator | othernames | owner | seating_capacity | source | tenants | website | year | year1 | year2 | year3 | year4 | year5 | year6 | year7 | year8 | year9 | year10 }}<noinclude>{{template doc}}</noinclude> 05626gb5atsr42gdo8bfys2gcprwpg6 ಟೆಂಪ್ಲೇಟ್:Infobox venue/doc 10 29116 373883 2026-10-06T14:37:19Z en>Jdcomix 0 Reverted edit by [[Special:Contribs/Mohammed Abdi Aliyi|Mohammed Abdi Aliyi]] ([[User talk:Mohammed Abdi Aliyi|talk]]) to last version by ~2026-52167-99 373883 wikitext text/x-wiki {{Documentation subpage}} <!-- Please place categories where indicated at the bottom of this page and interwikis at Wikidata (see [[Wikipedia:Wikidata]]) --> {{High-use}} {{Lua|Module:Infobox|Module:InfoboxImage|Module:Location map|Module:Check for unknown parameters}} This templates generates an infobox to summarize information about stadiums, arenas, or other sporting venues, as well as theatres and cinemas. == Usage == <!--Do not preview "{{{pushpin_map}}}" (and associated parameters) since it will cause an error with the module as it looks for the map "{{{pushpin_map}}}" which is invalid--> {{Parameter names example | acreage | address | architect | architectural_style | groundbreaking | builder | built | capacity | city | closed | coordinates = {{coords|0|0}} | cost | country | current_use | demolished | designation | dimensions | elevation | embedded | event | expanded | facilities | field_shape | former_names | fullname | general_contractor | height | image | image_alt | image_caption | image_map | image_size | image_upright | location | logo_alt | logo_caption | logo_class | logo_image | logo_size | logo_upright | main_contractors | main_venue | main_venue_capacity | map_alt | map_caption | map_size | name | native_name | native_name_lang | nickname | nrhp | opened | operator | owner | parking | production | project_manager | public_transit | pushpin_label | pushpin_label_position | pushpin_map = World | pushpin_caption | pushpin_map_size | pushpin_relief | rebuilt | record_attendance | renovated | reopened | roof | scoreboard | screens | seating_type | services_engineer | structural_engineer | suites | surface | tenants | type | website | years_active }} === Full syntax === <syntaxhighlight lang="wikitext" style="overflow:auto;"> {{Infobox venue | name = | native_name = | native_name_lang = | nickname = | logo_image = | logo_size = | logo_upright = | logo_alt = | logo_caption = | image = | image_size = | image_upright = | image_alt = | image_caption = | image_map = | map_size = | map_alt = | map_caption = | pushpin_map = | pushpin_map_size = | pushpin_caption = | pushpin_label_position = | pushpin_relief = | fullname = | former_names = | address = | city = | country = | location = | coordinates = <!-- {{Coord|LAT|LON|type:landmark|display=inline,title}} --> | height = <!-- {{cvt|...|ft|m}} or {{cvt|...|m|ft}} --> | public_transit = | parking = | owner = | operator = | designation = | type = | event = | seating_type = | suites = | capacity = 77,193 | record_attendance = | dimensions = | field_shape = | acreage = | roof = | surface = | scoreboard = | screens = | current_use = | production = | groundbreaking = | built = | opened = <!-- {{Start date|YYYY|MM|DD|df=y}} --> | renovated = | expanded = | closed = | demolished = | rebuilt = | years_active = | cost = | architectural_style = | architect = | builder = | project_manager = | structural_engineer = | services_engineer = | general_contractor = | main_contractors = | tenants = | website = <!-- {{URL|example.com}} --> | embedded = }} </syntaxhighlight> == Parameters == All attributes are optional. {| class="wikitable" ! style="text-align: left" | Parameter ! style="text-align: left" | Explanation |- | '''name''' | Name of the sporting venue. Defaults to <nowiki>{{PAGENAME}}</nowiki> |- | '''nickname''' | English nickname(s) of the venue |- | '''native_name''' | Name of the venue in native language/script (e.g. दशरथ रंगशाला) |- | '''native_name_lang''' | If {{Para|native_name}} is present, ISO 639-1 code of language/script of value (e.g. {{mono|ne}}) |- | '''fullname''' | Insert the official full name of the venue |- | '''former_names''' | Insert the venue's former name(s). Use the format: <blockquote>'''FormerName (year–year)'''</blockquote> |- | '''logo_image''' | Insert an image link in the form: <code>'''<nowiki>[[File:MyLogo.jpg|250px|alt=My alt text]]</nowiki>'''</code>. For more on alt text, please see [[WP:ALT]]. |- | '''logo_upright''' | Insert a number – see '''[[MOS:UPRIGHT]]''' for more information – default = 1. |- | '''logo_caption''' | Insert a caption for the stadium logo |- | '''image''' | Image name without "File:" or other formatting. e.g. '''MyImage.jpg''' |- | '''image_size''' | Size of the image as a raw number (i.e. without "px"). If not specified, image width defaults to "frameless" (220px). |- | '''image_alt''' | [[MOS:ALT|alt text]] for the image. |- | '''image_caption''' | Insert a caption for the stadium image |- | '''pushpin_map''' | The name of a location map as per [[:Template:Location map]] |- | '''pushpin_map_size''' | The width to display the pushpin map, in pixels. Just the number, without "px". If omitted or left empty, defaults to 250. |- | '''pushpin_caption''' | Caption to display below the pushpin map. If left blank or omitted, a caption will not be displayed. |- | '''pushpin_label''' | Name of the label used on the pushpin map. Defaults to page name but can be used if a longer name causes issue. |- | '''pushpin_label_position''' | The position of the label on the pushpin map relative to the pushpin mark. Valid values are left, right, top and bottom. This defaults to either left or right, depending on the coordinates of the marker and its position relative to the right border of the map image. |- | '''location''' | Insert the venue's location. For "United States" and "United Kingdom", it is preferred that they be abbreviated "U.S." and "UK", but political subdivisions should never be (never "MA" for "Massachusetts", "ON" for "Ontario", etc.). See Notes{{r|location}} for details. |- | '''coordinates''' | Insert the geographical coordinates; use {{tl|Coord}} |- | '''elevation''' | Elevation in meters or feet using {{tl|convert}} |- | '''type''' | Theatre, Stadium, ... |- | '''event''' | music, concerts, sporting events, theatre, dance |- | '''groundbreaking''' | Insert the date when ground was broken to build the venue |- | '''built''' | Insert a date range of when the venue was under construction |- | '''opened''' | Insert the date of when it opened |- | '''renovated''' | Insert the date of when it was renovated |- | '''expanded''' | Insert the date of when it was expanded |- | '''closed''' | Insert the date of when it was closed |- | '''demolished''' | Insert the date of when it was demolished |- | '''owner''' | Insert the name(s) of the venue's owner(s) |- | '''operator''' | Insert the name(s) of the venue's operator(s) |- | '''roof''' | Enter the roof type of the venue if indoors/covered (e.g. retractable, domed, translucent) |- | '''surface''' | Enter the surface of the venue (e.g. grass, sand, artificial turf) |- | '''scoreboard''' | Enter the details of any scoreboard at the venue. If specific details are not known, just enter "Yes" if the venue has a scoreboard or "No" if there is none. |- | '''screens''' | Enter the number of theatre screens. |- | '''current_use''' | Enter the current use of the venue. |- | '''production''' | Enter the theatrical production currently being housed at the venue. |- | '''cost''' | Enter the construction cost, preferably in the currency that the venue is located in (see [[Wikipedia:Manual of Style (dates and numbers)|WP:DATE]] for details) Per its own documentation, the [[:template:inflation|inflation template]] '''must not''' be used. |- | '''architectural_style''' | Insert the name(s) of the venue's architectural style(s) |- | '''architect''' | Insert the name(s) of the venue's architect(s) |- | '''builder''' | Name(s) of the venue's builder(s) |- | '''project_manager''' | Insert the name(s) of the project manager(s) who led the venue's construction |- | '''structural_engineer''' | Insert the name(s) of the venue's structural engineer(s) |- | '''services_engineer''' | Insert the name(s) of the venue's services engineer(s) |- | '''general_contractor''' | Insert the name(s) of the venue's general contractor(s) |- | '''main_contractors''' | Insert the name(s) of the venue's main contractor(s) |- | '''seating_type''' | soft seat, reserved seating |- | '''capacity''' | Insert the seating capacity of the venue. If it is a multi-purpose venue, use the format: <blockquote>'''Capacity (Purpose)'''</blockquote> |- | '''main_venue''' | Name of the main venue in a complex (use only for complexes, not individual venues) |- | '''main_venue_capacity''' | Capacity of the main venue in a complex (use only for complexes, not individual venues) |- | '''facilities''' | List of facilities in a complex (use only for complexes, not individual venues) |- | '''suites''' | Insert the number of suites |- | '''record_attendance''' | Insert the all-time record attendance of the venue. (include the date and event if you wish) If it is a multi-purpose venue, use the format: <blockquote>'''Record Attendance (Date & Event)'''</blockquote> |- | '''dimensions''' | Insert the dimensions of the venue: *For a football (soccer) pitch size, use the format: <blockquote>'''105 × 68 m'''</blockquote> *For baseball dimensions, use the format: <blockquote>'''Left field: 300 ft (91 m)<br/>Center field: 400 ft (122 m)<br/>Right field: 300 ft (91 m)'''</blockquote> |- | '''dimensions_label''' | Override the default label of "Field size". For example if the venue is a pool, can be changed to "Pool size" |- | '''field_shape''' | Oval, rectangular or circular |- | '''acreage''' | Insert the acreage. |- | '''tenants''' | Insert the teams and any other parties who use the venue as their home stadium or arena. Use the format: <blockquote>'''TeamName (league/organization) year–year'''</blockquote> Alternatively, you can use the {{tl|infobox venue/tenantlist}} sub-template to automatically line rows up. |- | '''embedded''' | Embed another infobox with such capability like {{tl|designation list}} and {{tl|infobox NRHP}}. See their respective documentation for more information. |- | '''website''' | Insert the website, preferably with {{tl|URL}} |- | '''public_transit''' | The nearest [[public transport]] stop. <br /> <nowiki> Example: [[Roosevelt/State (CTA)|Roosevelt Station]], [[Chicago Transit Authority]]</nowiki> |} === Mapframe parameters === {{Infobox mapframe/doc/parameters}} === Pushpin map === {{Location map/doc/infobox parameters}} == Notes == {{Reflist|refs= <ref name="location">As per RfC "Naming countries in infoboxes": When identifying a location, city or region in the United States or United Kingdom, the preferred approach is to use the country abbreviations allowed by [[MOS:ACRO]], such as "Portsmouth, New Hampshire, U.S." and "Cardiff, Wales, UK", rather than spelling out the full country name. Avoid using abbreviations for states or provinces in all nations. {{xt|New Hampshire}} rather than {{!xt|NH}}, {{xt|New South Wales}} rather than {{!xt|NSW}}, or {{xt|British Columbia}} rather than {{!xt|BC}} (see [[MOS:POSTABBR]]). Cities such as New York City and London may be rendered as "New York City, U.S." and "London, UK" or simply "New York City" and "London". Also, these should not be linked when the context makes it clear (see [[MOS:OVERLINK]]). If only the country name is included, it may be written out in full. </ref> }} == Example == {{Infobox venue | name = Narendra Modi Stadium | native_name = | native_name_lang = 639-2 | nickname = {{unbulleted list|GCA Stadium|Motera Cricket Stadium}} | logo_image = | logo_size = | logo_caption = | image = Narendra_Modi_Stadium_view_from_the_gallery.jpg | image_size = 300px | image_caption = Inside view of the arena | map_caption = The stadium in India | pushpin_map = India | elevation = 84 m | public_transit = {{rint|Bus}} Narendra Modi Stadium<br />{{rint|Metro}} [[Motera Stadium metro station|Motera Stadium]] {{rcb|Ahmedabad Metro|Red|yes}} | fullname = Narendra Modi Stadium | former_names = {{bulleted list| Sardar Patel stadium (former stadium 1982–2021)| Motera Cricket Stadium}} | address = [[Sardar Vallabhbhai Patel Sports Enclave]], [[Motera]], | city = [[Ahmedabad]], | country = India | location = Ahmedabad, [[Ahmedabad district]], [[Gujarat]], [[India]] | coordinates = {{Coord|23|05|29|N|72|35|50|E}} | groundbreaking = {{ubl|1983 (former structure) |December 2016 (New stadium)}} | built = September 2015- February 2020<ref name=S>{{Cite web |title=Modern Marvel: World's largest stadium |url=https://m.youtube.com/watch?v=nMqdtV9QTro&sa=U&ved=2ahUKEwjy1OP1sYKBAxVDON4KHWnlCWIQtwJ6BAgKEAE&usg=AOvVaw1lZ1vkMULw9vtqp0Q_xO9l |access-date=2023-08-28 |website=YouTube |publisher=[[History TV18]] |archive-date=5 October 2023 |archive-url=https://web.archive.org/web/20231005124506/https://www.youtube.com/watch?app=desktop&v=nMqdtV9QTro&sa=U&ved=2ahUKEwjy1OP1sYKBAxVDON4KHWnlCWIQtwJ6BAgKEAE&usg=AOvVaw1lZ1vkMULw9vtqp0Q_xO9l |url-status=live }}</ref><ref name=India/><br/> 12 November 1983 (former structure) | opened = 24 February 2020 (New stadium)<ref name=India>{{cite web|website=[[India Today]]|title=World's largest cricket stadium in Motera named Narendra Modi stadium|url=https://www.indiatoday.in/sports/cricket/story/world-s-largest-cricket-stadium-in-motera-named-narendra-modi-stadium-1772484-2021-02-24|access-date=24 February 2021|archive-date=4 October 2022|archive-url=https://web.archive.org/web/20221004000110/https://www.indiatoday.in/sports/cricket/story/world-s-largest-cricket-stadium-in-motera-named-narendra-modi-stadium-1772484-2021-02-24|url-status=live}}</ref><br/>12 November 1983 (former structure) | renovated = | expanded = | closed = September 2015 (former Sardar Patel stadium) | demolished = September 2015 (former Saradar Patel stadium)<ref name=S/> | parking = 13000<ref name=Seating>{{cite web|title=Motera Cricket stadium in Ahmedabad of over one lakh to be largest in the world.|url=https://www.indiatimes.com/news/india/motera-cricket-stadium-in-ahmedabad-with-seating-capacity-of-over-a-lakh-to-be-largest-in-the-world-359982.html|website=India times|date=7 January 2019|access-date=12 January 2019|archive-date=12 January 2019|archive-url=https://web.archive.org/web/20190112200545/https://www.indiatimes.com/news/india/motera-cricket-stadium-in-ahmedabad-with-seating-capacity-of-over-a-lakh-to-be-largest-in-the-world-359982.html|url-status=live}}</ref>{{Efn|It is said that parking for 10,000 two-wheelers and 3000 cars is available}} | owner = [[Gujarat Cricket Association]] | operator = Gujarat Cricket Association | acreage = {{convert|63|acre|ha|abbr=on}}<ref name= Populous>{{cite web|title= Narendra Modi stadium |website=Populous.com|url=https://populous.com/project/narendra-modi-stadium&ved=2ahUKEwj-pcPL1aSBAxU6bmwGHdTjB5YQFnoECBoQAQ&usg=AOvVaw0wiQYdH-m542tBncBhe5E3}}</ref> | surface = [[Bermuda grass]]<ref name=S/> | scoreboard = No | cost = {{INRConvert|800|c}} (New stadium 2015-2020)<ref>{{cite news |last1=Umarji |first1=Vinay |title=Kem Chho Trump: World's largest cricket stadium gearing up to host US Prez |url=https://www.business-standard.com/article/current-affairs/world-s-largest-cricket-stadium-gearing-up-to-host-trump-modi-in-gujarat-120021201119_1.html |access-date=25 March 2021 |work=Business Standard India |date=12 February 2020 |archive-date=13 February 2020 |archive-url=https://web.archive.org/web/20200213161424/https://www.business-standard.com/article/current-affairs/world-s-largest-cricket-stadium-gearing-up-to-host-trump-modi-in-gujarat-120021201119_1.html |url-status=live }}</ref> | type = Stadium | event = {{hlist|Sporting events|concerts}} | seating_type = [[Stadium seating]] | suites = 76 | architect = * Andrew James ([[Populous (company)|Populous design firm]]) (Narendra Modi stadium)<ref name=S/> * [[Shashi Prabhu]] (former Sardar Patel stadium)<ref>{{cite web |url=http://www.spa-aec.com/spaweb/allprojects.html |title=Complete Project List |access-date=1 April 2011 |url-status=dead |archive-url=https://web.archive.org/web/20110823063136/http://www.spa-aec.com/spaweb/allprojects.html |archive-date=23 August 2011}}</ref> | builder = [[Larsen and Toubro]]<ref name=AA/> | main_contractors = Larsen and Toubro<ref name=S/> | capacity = 132,000<ref name=AA>{{cite web|url=https://www.indiatoday.in/sports/cricket/story/world-s-largest-cricket-stadium-in-motera-named-narendra-modi-stadium-1772484-2021-02-24|website=[[India Today]]|title=World's largest cricket stadium...|access-date=24 February 2021|archive-date=4 October 2022|archive-url=https://web.archive.org/web/20221004000110/https://www.indiatoday.in/sports/cricket/story/world-s-largest-cricket-stadium-in-motera-named-narendra-modi-stadium-1772484-2021-02-24|url-status=live}}</ref> (2020–present)<ref name="1.32 lakh">{{cite news |last1=Gupta |first1=Rishabh |title=IND vs ENG: 'Outstanding for Indian cricket,' says Virat Kohli on Narendra Modi Stadium |url=https://www.indiatvnews.com/sports/cricket/india-vs-england-virat-kohli-narendra-modi-stadium-outstanding-for-indian-cricket-687042 |access-date=25 March 2020 |work=India TV News |date=24 February 2021 |language=en |archive-date=7 October 2022 |archive-url=https://web.archive.org/web/20221007124500/https://www.indiatvnews.com/sports/cricket/india-vs-england-virat-kohli-narendra-modi-stadium-outstanding-for-indian-cricket-687042 |url-status=live }})</ref> *54,000 (2006–2015)<ref name='htold'>{{cite news|title=Why Sardar Patel Stadium in Motera, Ahmedabad will make cricket history|url=https://www.hindustantimes.com/cricket/why-sardar-patel-stadium-in-motera-ahmedabad-will-make-cricket-history/story-7b59h4SZG5yHl7BGkg9agK.html|access-date=10 December 2016|newspaper=Hindustan Times|date=10 December 2016|archive-date=10 December 2016|archive-url=https://web.archive.org/web/20161210175135/http://www.hindustantimes.com/cricket/why-sardar-patel-stadium-in-motera-ahmedabad-will-make-cricket-history/story-7b59h4SZG5yHl7BGkg9agK.html|url-status=live}}</ref><ref name=Cricinfo>[http://www.espncricinfo.com/ci/content/ground/57851.html Sardar Patel Stadium, Motera, Ahmedabad, India] {{Webarchive|url=https://web.archive.org/web/20181226140409/http://www.espncricinfo.com/ci/content/ground/57851.html |date=26 December 2018 }}. ESPN</ref> *49,000 (1982–2006) | record_attendance = 101,566<ref>{{cite tweet |last=Shah |first=Jay |author-link=Jay Shah |user=JayShah |number=1596822586679504897 |date=27 November 2022 |title=Extremely delighted &amp; proud to receive the Guinness World Record for the largest attendance at a T20 match when 101,566 people witnessed the epic @IPL final at @GCAMotera's magnificent Narendra Modi Stadium on 29 May 2022. A big thanks to our fans for making this possible! @BCCI https://t.co/JHilbDLSB2 |language=en |access-date=14 December 2022 |archive-url=https://web.archive.org/web/20221130125825/https://twitter.com/JayShah/status/1596822586679504897 |archive-date=30 November 2022 |url-status=live}}</ref> <br/> ([[2022 Indian Premier League final|2022 IPL Final]])<br/> {{primary source inline|date=September 2023}} | executive_suites = | dimensions = {{convert|180|yd|order=flip}} x {{convert|150|yd|order=flip}}<ref name="Motera Stadium PM Modi's Vision">{{cite news |last1=Rao |first1=K. Shriniwas |title=New Motera stadium is Prime Minister Narendra Modi's vision, says Amit Shah |url=https://timesofindia.indiatimes.com/sports/cricket/news/new-motera-stadium-is-prime-minister-narendra-modis-vision-says-amit-shah/articleshow/70918902.cms |access-date=25 March 2021 |work=The Times of India |date=31 August 2019 |language=en |archive-date=1 September 2019 |archive-url=https://web.archive.org/web/20190901053105/https://timesofindia.indiatimes.com/sports/cricket/news/new-motera-stadium-is-prime-minister-narendra-modis-vision-says-amit-shah/articleshow/70918902.cms |url-status=live }}</ref> | field_shape = Oval <ref name=S/> | tenants = [[Gujarat cricket team]] (1983–present)<br /> [[Indian national cricket team |India cricket team]] (1983–present)<br/>[[Gujarat women's cricket team]]<br/>[[India women's national cricket team]] (2011–present)<br/>[[Gujarat Titans]] (2022–present)<br />[[Rajasthan Royals]] (2010–2014) | website = {{URL|gujaratcricketassociation.com|Gujrat cricket association's website}} | embedded = {{infobox cricket ground | embed = yes | country = India | location = [[Motera]], [[Ahmedabad]], [[Gujarat]] | establishment = | operator = Gujarat Cricket Association | tenants = | architect = | end1 = Adani Pavilion End{{citation needed|date=September 2023}} | end2 = Reliance End{{citation needed|date=September 2023}} | international = true | firstodidate = 5 October | firstodiyear = 1984 | firstodihome = India | firstodiaway = Australia | lastodidate = 4 November | lastodiyear = 2023 | lastodihome = Australia | lastodiaway = England | firsttestdate = 12–16 November | firsttestyear = 1983 | firsttesthome = India | firsttestaway = West Indies | lasttestdate = 9–13 March | lasttestyear = 2023 | lasttesthome = India | lasttestaway = Australia | firstt20idate = 28 December | firstt20iyear = 2012 | firstt20ihome = India | firstt20iaway = Pakistan | lastt20idate = 1 February | lastt20iyear = 2023 | lastt20ihome = India | lastt20iaway = New Zealand | firstwodidate = 12 March | firstwodiyear = 2012 | firstwodihome = India | firstwodiaway = Australia | lastwodidate = 12 April | lastwodiyear = 2013 | lastwodihome = India | lastwodiaway = Bangladesh | firstwt20idate = 22 January | firstwt20iyear = 2011 | firstwt20ihome = India | firstwt20iaway = West Indies | lastwt20idate = 24 January | lastwt20iyear = 2011 | lastwt20ihome = India | lastwt20iaway = West Indies | date = 9 March 2023 | source = [http://content-uk.cricinfo.com/ci/content/ground/57851.html Cricinfo] }} }} <syntaxhighlight lang="wikitext" style="overflow: auto;"> {{Infobox venue | name = Narendra Modi Stadium | native_name = | native_name_lang = 639-2 | nickname = {{unbulleted list|GCA Stadium|Motera Cricket Stadium}} | logo_image = | logo_size = | logo_caption = | image = Narendra_Modi_Stadium_view_from_the_gallery.jpg | image_size = 300px | image_caption = Inside view of the arena | map_caption = The stadium in India | pushpin_map = India | elevation = 84 m | public_transit = {{rint|Bus}} Narendra Modi Stadium<br />{{rint|Metro}} [[Motera Stadium metro station|Motera Stadium]] {{rcb|Ahmedabad Metro|Red|yes}} | fullname = Narendra Modi Stadium | former_names = {{bulleted list| Sardar Patel stadium (former stadium 1982–2021)| Motera Cricket Stadium}} | address = [[Sardar Vallabhbhai Patel Sports Enclave]], [[Motera]], | city = [[Ahmedabad]], | country = India | location = Ahmedabad, [[Ahmedabad district]], [[Gujarat]], [[India]] | coordinates = {{Coord|23|05|29|N|72|35|50|E}} | groundbreaking = {{ubl|1983 (former structure) |December 2016 (New stadium)}} | built = September 2015- February 2020<ref name=S>{{Cite web |title=Modern Marvel: World's largest stadium |url=https://m.youtube.com/watch?v=nMqdtV9QTro&sa=U&ved=2ahUKEwjy1OP1sYKBAxVDON4KHWnlCWIQtwJ6BAgKEAE&usg=AOvVaw1lZ1vkMULw9vtqp0Q_xO9l |access-date=2023-08-28 |website=YouTube |publisher=[[History TV18]] |archive-date=5 October 2023 |archive-url=https://web.archive.org/web/20231005124506/https://www.youtube.com/watch?app=desktop&v=nMqdtV9QTro&sa=U&ved=2ahUKEwjy1OP1sYKBAxVDON4KHWnlCWIQtwJ6BAgKEAE&usg=AOvVaw1lZ1vkMULw9vtqp0Q_xO9l |url-status=live }}</ref><ref name=India/><br/> 12 November 1983 (former structure) | opened = 24 February 2020 (New stadium)<ref name=India>{{cite web|website=[[India Today]]|title=World's largest cricket stadium in Motera named Narendra Modi stadium|url=https://www.indiatoday.in/sports/cricket/story/world-s-largest-cricket-stadium-in-motera-named-narendra-modi-stadium-1772484-2021-02-24|access-date=24 February 2021|archive-date=4 October 2022|archive-url=https://web.archive.org/web/20221004000110/https://www.indiatoday.in/sports/cricket/story/world-s-largest-cricket-stadium-in-motera-named-narendra-modi-stadium-1772484-2021-02-24|url-status=live}}</ref><br/>12 November 1983 (former structure) | renovated = | expanded = | closed = September 2015 (former Sardar Patel stadium) | demolished = September 2015 (former Saradar Patel stadium)<ref name=S/> | parking = 13000<ref name=Seating>{{cite web|title=Motera Cricket stadium in Ahmedabad of over one lakh to be largest in the world.|url=https://www.indiatimes.com/news/india/motera-cricket-stadium-in-ahmedabad-with-seating-capacity-of-over-a-lakh-to-be-largest-in-the-world-359982.html|website=India times|date=7 January 2019|access-date=12 January 2019|archive-date=12 January 2019|archive-url=https://web.archive.org/web/20190112200545/https://www.indiatimes.com/news/india/motera-cricket-stadium-in-ahmedabad-with-seating-capacity-of-over-a-lakh-to-be-largest-in-the-world-359982.html|url-status=live}}</ref>{{Efn|It is said that parking for 10,000 two-wheelers and 3000 cars is available}} | owner = [[Gujarat Cricket Association]] | operator = Gujarat Cricket Association | acreage = {{convert|63|acre|ha|abbr=on}}<ref name= Populous>{{cite web|title= Narendra Modi stadium |website=Populous.com|url=https://populous.com/project/narendra-modi-stadium&ved=2ahUKEwj-pcPL1aSBAxU6bmwGHdTjB5YQFnoECBoQAQ&usg=AOvVaw0wiQYdH-m542tBncBhe5E3}}</ref> | surface = [[Bermuda grass]]<ref name=S/> | scoreboard = No | cost = {{INRConvert|800|c}} (New stadium 2015-2020)<ref>{{cite news |last1=Umarji |first1=Vinay |title=Kem Chho Trump: World's largest cricket stadium gearing up to host US Prez |url=https://www.business-standard.com/article/current-affairs/world-s-largest-cricket-stadium-gearing-up-to-host-trump-modi-in-gujarat-120021201119_1.html |access-date=25 March 2021 |work=Business Standard India |date=12 February 2020 |archive-date=13 February 2020 |archive-url=https://web.archive.org/web/20200213161424/https://www.business-standard.com/article/current-affairs/world-s-largest-cricket-stadium-gearing-up-to-host-trump-modi-in-gujarat-120021201119_1.html |url-status=live }}</ref> | type = Stadium | event = {{hlist|Sporting events|concerts}} | seating_type = [[Stadium seating]] | suites = 76 | architect = * Andrew James ([[Populous (company)|Populous design firm]]) (Narendra Modi stadium)<ref name=S/> * [[Shashi Prabhu]] (former Sardar Patel stadium)<ref>{{cite web |url=http://www.spa-aec.com/spaweb/allprojects.html |title=Complete Project List |access-date=1 April 2011 |url-status=dead |archive-url=https://web.archive.org/web/20110823063136/http://www.spa-aec.com/spaweb/allprojects.html |archive-date=23 August 2011}}</ref> | builder = [[Larsen and Toubro]]<ref name=AA/> | main_contractors = Larsen and Toubro<ref name=S/> | capacity = 132,000<ref name=AA>{{cite web|url=https://www.indiatoday.in/sports/cricket/story/world-s-largest-cricket-stadium-in-motera-named-narendra-modi-stadium-1772484-2021-02-24|website=[[India Today]]|title=World's largest cricket stadium...|access-date=24 February 2021|archive-date=4 October 2022|archive-url=https://web.archive.org/web/20221004000110/https://www.indiatoday.in/sports/cricket/story/world-s-largest-cricket-stadium-in-motera-named-narendra-modi-stadium-1772484-2021-02-24|url-status=live}}</ref> (2020–present)<ref name="1.32 lakh">{{cite news |last1=Gupta |first1=Rishabh |title=IND vs ENG: 'Outstanding for Indian cricket,' says Virat Kohli on Narendra Modi Stadium |url=https://www.indiatvnews.com/sports/cricket/india-vs-england-virat-kohli-narendra-modi-stadium-outstanding-for-indian-cricket-687042 |access-date=25 March 2020 |work=India TV News |date=24 February 2021 |language=en |archive-date=7 October 2022 |archive-url=https://web.archive.org/web/20221007124500/https://www.indiatvnews.com/sports/cricket/india-vs-england-virat-kohli-narendra-modi-stadium-outstanding-for-indian-cricket-687042 |url-status=live }})</ref> *54,000 (2006–2015)<ref name='htold'>{{cite news|title=Why Sardar Patel Stadium in Motera, Ahmedabad will make cricket history|url=https://www.hindustantimes.com/cricket/why-sardar-patel-stadium-in-motera-ahmedabad-will-make-cricket-history/story-7b59h4SZG5yHl7BGkg9agK.html|access-date=10 December 2016|newspaper=Hindustan Times|date=10 December 2016|author=HT Correspondent|archive-date=10 December 2016|archive-url=https://web.archive.org/web/20161210175135/http://www.hindustantimes.com/cricket/why-sardar-patel-stadium-in-motera-ahmedabad-will-make-cricket-history/story-7b59h4SZG5yHl7BGkg9agK.html|url-status=live}}</ref><ref name=Cricinfo>[http://www.espncricinfo.com/ci/content/ground/57851.html Sardar Patel Stadium, Motera, Ahmedabad, India] {{Webarchive|url=https://web.archive.org/web/20181226140409/http://www.espncricinfo.com/ci/content/ground/57851.html |date=26 December 2018 }}. ESPN</ref> *49,000 (1982–2006) | record_attendance = 101,566<ref>{{cite tweet |last=Shah |first=Jay |author-link=Jay Shah |user=JayShah |number=1596822586679504897 |date=27 November 2022 |title=Extremely delighted &amp; proud to receive the Guinness World Record for the largest attendance at a T20 match when 101,566 people witnessed the epic @IPL final at @GCAMotera's magnificent Narendra Modi Stadium on 29 May 2022. A big thanks to our fans for making this possible! @BCCI https://t.co/JHilbDLSB2 |language=en |access-date=14 December 2022 |archive-url=https://web.archive.org/web/20221130125825/https://twitter.com/JayShah/status/1596822586679504897 |archive-date=30 November 2022 |url-status=live}}</ref> <br/> ([[2022 Indian Premier League final|2022 IPL Final]])<br/> {{primary source inline|date=September 2023}} | executive_suites = | dimensions = {{convert|180|yd|order=flip}} x {{convert|150|yd|order=flip}}<ref name="Motera Stadium PM Modi's Vision">{{cite news |last1=Rao |first1=K. Shriniwas |title=New Motera stadium is Prime Minister Narendra Modi's vision, says Amit Shah |url=https://timesofindia.indiatimes.com/sports/cricket/news/new-motera-stadium-is-prime-minister-narendra-modis-vision-says-amit-shah/articleshow/70918902.cms |access-date=25 March 2021 |work=The Times of India |date=31 August 2019 |language=en |archive-date=1 September 2019 |archive-url=https://web.archive.org/web/20190901053105/https://timesofindia.indiatimes.com/sports/cricket/news/new-motera-stadium-is-prime-minister-narendra-modis-vision-says-amit-shah/articleshow/70918902.cms |url-status=live }}</ref> | field_shape = Oval <ref name=S/> | tenants = [[Gujarat cricket team]] (1983–present)<br /> [[Indian national cricket team |India cricket team]] (1983–present)<br/>[[Gujarat women's cricket team]]<br/>[[India women's national cricket team]] (2011–present)<br/>[[Gujarat Titans]] (2022–present)<br />[[Rajasthan Royals]] (2010–2014) | website = {{URL|gujaratcricketassociation.com|Gujrat cricket association's website}} | embedded = {{infobox cricket ground | embed = yes | country = India | location = [[Motera]], [[Ahmedabad]], [[Gujarat]] | establishment = | operator = Gujarat Cricket Association | tenants = | architect = | end1 = Adani Pavilion End{{citation needed|date=September 2023}} | end2 = Reliance End{{citation needed|date=September 2023}} | international = true | firstodidate = 5 October | firstodiyear = 1984 | firstodihome = India | firstodiaway = Australia | lastodidate = 4 November | lastodiyear = 2023 | lastodihome = Australia | lastodiaway = England | firsttestdate = 12–16 November | firsttestyear = 1983 | firsttesthome = India | firsttestaway = West Indies | lasttestdate = 9–13 March | lasttestyear = 2023 | lasttesthome = India | lasttestaway = Australia | firstt20idate = 28 December | firstt20iyear = 2012 | firstt20ihome = India | firstt20iaway = Pakistan | lastt20idate = 1 February | lastt20iyear = 2023 | lastt20ihome = India | lastt20iaway = New Zealand | firstwodidate = 12 March | firstwodiyear = 2012 | firstwodihome = India | firstwodiaway = Australia | lastwodidate = 12 April | lastwodiyear = 2013 | lastwodihome = India | lastwodiaway = Bangladesh | firstwt20idate = 22 January | firstwt20iyear = 2011 | firstwt20ihome = India | firstwt20iaway = West Indies | lastwt20idate = 24 January | lastwt20iyear = 2011 | lastwt20ihome = India | lastwt20iaway = West Indies | date = 9 March 2023 | source = [http://content-uk.cricinfo.com/ci/content/ground/57851.html Cricinfo] }} }} </syntaxhighlight> '''Explanatory note''' {{reflist|group=lower-alpha}} '''References''' {{reflist}} == Microformat == {{#ifeq:{{SUBPAGENAME}}|sandbox|{{tl|UF-hcard-geo}}|{{UF-hcard-geo}}}} == TemplateData == {{Collapse top|title=[[Wikipedia:TemplateData|TemplateData]] used by [[mw:Extension:TemplateWizard|TemplateWizard]], [[Wikipedia:VisualEditor|VisualEditor]] and other tools}} {{TemplateData header|noheader=1}} <templatedata>{ "description": "This templates generates an infobox to summarize information about stadiums, arenas, or other sporting venues.", "format": "block", "paramOrder": [ "name", "native_name", "native_name_lang", "nickname", "logo_image", "logo_size", "logo_upright", "logo_alt", "logo_caption", "image", "image_size", "image_upright", "image_alt", "image_caption", "image_map", "map_size", "map_alt", "map_caption", "pushpin_map", "pushpin_caption", "pushpin_label_position", "pushpin_relief", "pushpin_label", "pushpin_map_size", "mapframe", "mapframe-caption", "mapframe-custom", "mapframe-id", "mapframe-coord", "mapframe-wikidata", "mapframe-point", "mapframe-shape", "mapframe-frame-width", "mapframe-frame-height", "mapframe-shape-fill", "mapframe-shape-fill-opacity", "mapframe-stroke-color", "mapframe-stroke-width", "mapframe-marker", "mapframe-marker-color", "mapframe-geomask", "mapframe-geomask-stroke-color", "mapframe-geomask-stroke-width", "mapframe-geomask-fill", "mapframe-geomask-fill-opacity", "mapframe-zoom", "mapframe-length_km", "mapframe-length_mi", "mapframe-area_km2", "mapframe-area_mi2", "mapframe-frame-coordinates", "mapframe-switcher", "fullname", "former_names", "address", "city", "country", "location", "coordinates", "elevation", "public_transit", "parking", "owner", "operator", "designation", "type", "event", "seating_type", "suites", "capacity", "record_attendance", "dimensions", "dimensions_label", "acreage", "field_shape", "surface", "scoreboard", "screens", "current_use", "production", "groundbreaking", "built", "opened", "renovated", "expanded", "closed", "reopened", "demolished", "rebuilt", "years_active", "cost", "architectural_style", "architect", "builder", "project_manager", "structural_engineer", "services_engineer", "general_contractor", "main_contractors", "tenants", "website", "nrhp", "embedded" ], "params": { "name": { "label": "Official name", "type": "line", "required": false, "description": "Name of the sporting venue", "default": "{{PAGENAMEBASE}}", "suggested": true }, "nickname": { "label": "Nickname(s)", "type": "line", "required": false, "description": "English alternate names or nickname(s) of the venue" }, "native_name": { "label": "Native name", "type": "string", "required": false, "description": "Name of venue in native language/script" }, "native_name_lang": { "label": "Native name language", "type": "string", "required": false, "description": "If {{{native_name}}} present, ISO 639-1 language code of language/script of its value" }, "fullname": { "label": "Full name", "type": "string", "required": false, "description": "Official full name of the venue" }, "former_names": { "label": "Former name(s)", "type": "string", "required": false, "description": "Venue's former name(s) in format \"FormerName (year–year)\"", "suggested": true }, "logo_image": { "label": "Logo image link", "type": "wiki-file-name", "required": false, "description": "Image link to the logo", "suggested": true }, "logo_caption": { "label": "Logo caption", "type": "string", "required": false, "description": "Caption for the stadium logo" }, "image": { "label": "Image link", "type": "wiki-file-name", "required": false, "description": "Image link", "suggested": true }, "location": { "label": "Location", "type": "line", "required": false }, "coordinates": { "label": "Coordinates", "type": "string", "required": false, "description": "Geographical coordinates", "suggested": true }, "elevation": { "label": "Elevation", "type": "string", "required": false }, "built": { "label": "Build date", "type": "string", "required": false, "description": "Date range of when the venue was under construction" }, "opened": { "label": "Date of opening", "type": "line", "required": false, "description": "Date of when it opened", "suggested": true }, "renovated": { "label": "Date of renovation", "type": "string", "required": false, "description": "Date of when it was renovated" }, "expanded": { "label": "Date of expansion", "type": "string", "required": false, "description": "Date of when it was expanded" }, "closed": { "label": "Date of closing", "type": "line", "required": false, "description": "Date of when it was closed" }, "demolished": { "label": "Date of demolishing", "type": "string", "required": false, "description": "Date of when it was demolished" }, "owner": { "label": "Owner(s)", "type": "string", "required": false, "description": "Name(s) of the venue's owner(s)" }, "operator": { "label": "Operator(s)", "type": "string", "required": false, "description": "Name(s) of the venue's operator(s)" }, "surface": { "label": "Surface", "type": "string", "required": false, "description": "Surface of the venue (e.g. grass, sand, artificial turf)" }, "scoreboard": { "label": "Scoreboard", "type": "string", "required": false, "description": "Details of scoreboard at the venue. If not known, just enter \"Yes\" if the venue has a scoreboard and \"No\" otherwise." }, "cost": { "label": "Cost", "type": "line", "required": false, "description": "Construction cost, preferably in the currency that the venue is located" }, "architectural_style": { "label": "Architectural style", "type": "string", "required": false, "description": "Name(s) of venue's architectural style(s)" }, "architect": { "label": "Architect(s)", "type": "string", "required": false, "description": "Name(s) of venue's architect(s)" }, "structural_engineer": { "label": "Structural engineer(s)", "type": "string", "required": false, "description": "Name(s) of venue's structural engineer(s)" }, "services_engineer": { "label": "Services engineer(s)", "type": "string", "required": false, "description": "Name(s) of venue's services engineer(s)" }, "capacity": { "label": "Max. legal occupancy", "type": "number", "required": false, "suggested": true }, "record_attendance": { "label": "Record attendance", "type": "string", "required": false, "description": "All time record attendance of the venue. If it is a multi-purpose venue, use the format: \"Record Attendance (Date & Event)\"" }, "dimensions": { "label": "Dimensions", "type": "string", "required": false, "description": "Dimensions of the venue" }, "tenants": { "label": "Tenants", "type": "string", "required": false, "description": "The teams and any other parties who use the venue as their home stadium or arena. Use the format: \"TeamName (league/organization) year–year\"" }, "website": { "label": "Website", "type": "string", "required": false, "suggested": true }, "public_transit": { "label": "Public transit", "type": "string", "required": false, "description": "The nearest public transport stop" }, "parking": { "label": "Available parking", "description": "Number of parking spaces available to public", "example": "2,000 spaces", "type": "line" }, "logo_size": { "label": "Logo image size", "type": "line" }, "logo_upright": { "label": "Logo upright size", "type": "number", "default": "1" }, "logo_alt": { "label": "Logo image alternative text", "description": "Accessibility text describing image for screen readers and other assistive technologies", "type": "string" }, "image_size": { "label": "Image size", "type": "line" }, "image_upright": { "label": "Image upright size", "type": "number", "default": "1" }, "image_alt": { "label": "Image alternative text", "description": "Accessibility text describing image for screen readers and other assistive technologies", "type": "string" }, "image_caption": { "aliases": [ "caption" ], "label": "Image caption", "description": "Caption for the image", "type": "string" }, "image_map": { "label": "Map image", "type": "wiki-file-name" }, "map_size": { "label": "Map size", "description": "Map image dimensions, defaults to image_size parameter value if not specified", "type": "line" }, "map_alt": { "label": "Map image alternative text", "description": "Accessibility text describing image for screen readers and other assistive technologies", "type": "string" }, "map_caption": { "label": "Map caption", "description": "Contextual information to display beneath map image", "type": "string" }, "pushpin_map": {}, "pushpin_caption": {}, "pushpin_label_position": {}, "pushpin_relief": {}, "pushpin_label": {}, "pushpin_map_size": {}, "address": { "suggested": true }, "city": { "suggested": true }, "country": { "suggested": true }, "designation": {}, "type": {}, "event": {}, "seating_type": {}, "suites": { "label": "Suites", "description": "Number of suites", "type": "line" }, "field_shape": {}, "acreage": { "label": "Acreage", "type": "line" }, "screens": {}, "current_use": {}, "production": {}, "groundbreaking": { "label": "Ground broke date", "description": "Date when ground was broken to build the venue", "type": "string" }, "reopened": {}, "rebuilt": {}, "years_active": {}, "builder": {}, "project_manager": { "label": "Project manager(s)", "description": "Name(s) of venue's project manager(s)", "type": "string" }, "general_contractor": { "label": "General contractor(s)", "description": "Name(s) of venue's general contractor(s)", "type": "string" }, "main_contractors": { "label": "Main contractor(s)", "description": "Name(s) of venue's main contractor(s)", "type": "string" }, "nrhp": { "label": "NRHP", "description": "Embed a NRHP infobox", "type": "string" }, "embedded": { "label": "Embedded", "description": "Embed another infobox", "type": "string" }, "mapframe": {}, "mapframe-caption": {}, "mapframe-custom": {}, "mapframe-id": {}, "mapframe-coord": {}, "mapframe-wikidata": {}, "mapframe-point": {}, "mapframe-shape": {}, "mapframe-frame-width": {}, "mapframe-frame-height": {}, "mapframe-shape-fill": {}, "mapframe-shape-fill-opacity": {}, "mapframe-stroke-color": { "aliases": [ "mapframe-stroke-colour" ] }, "mapframe-stroke-width": {}, "mapframe-marker": {}, "mapframe-marker-color": { "aliases": [ "mapframe-marker-colour" ] }, "mapframe-geomask": {}, "mapframe-geomask-stroke-color": { "aliases": [ "mapframe-geomask-stroke-colour" ] }, "mapframe-geomask-stroke-width": {}, "mapframe-geomask-fill": {}, "mapframe-geomask-fill-opacity": {}, "mapframe-zoom": {}, "mapframe-length_km": {}, "mapframe-length_mi": {}, "mapframe-area_km2": {}, "mapframe-area_mi2": {}, "mapframe-frame-coordinates": { "aliases": [ "mapframe-frame-coord" ] }, "mapframe-switcher": {}, "dimensions_label": { "label": "Dimensions label", "description": "Override the default label of \"Field size\"", "example": "Pool size", "type": "string", "default": "Field size" } } }</templatedata> {{Collapse bottom}} == Tracking category == {{infobox tracking categories}} * {{clc|Pages using infobox venue with both map caption and pushpin map}} * {{clc|Pages using infobox venue with both image map and pushpin map}} ==See also== {{Buildings and structures infobox templates}} <includeonly>{{Sandbox other|| <!-- ADD CATEGORIES BELOW THIS LINE AND INTERWIKIS TO WIKIDATA, THANK YOU! --> [[Category:Buildings and structures infobox templates|Venue]] [[Category:Music infobox templates|Venue]] [[Category:Sports infobox templates|Venue]] [[Category:Templates that add a tracking category]] }}</includeonly> 4g1go4ibt2ov13egukhu0hlrasixmp0 373884 373883 2026-10-28T05:55:29Z ChiK 1136 1 revision imported from [[:en:Template:Infobox_venue/doc]] 373883 wikitext text/x-wiki {{Documentation subpage}} <!-- Please place categories where indicated at the bottom of this page and interwikis at Wikidata (see [[Wikipedia:Wikidata]]) --> {{High-use}} {{Lua|Module:Infobox|Module:InfoboxImage|Module:Location map|Module:Check for unknown parameters}} This templates generates an infobox to summarize information about stadiums, arenas, or other sporting venues, as well as theatres and cinemas. == Usage == <!--Do not preview "{{{pushpin_map}}}" (and associated parameters) since it will cause an error with the module as it looks for the map "{{{pushpin_map}}}" which is invalid--> {{Parameter names example | acreage | address | architect | architectural_style | groundbreaking | builder | built | capacity | city | closed | coordinates = {{coords|0|0}} | cost | country | current_use | demolished | designation | dimensions | elevation | embedded | event | expanded | facilities | field_shape | former_names | fullname | general_contractor | height | image | image_alt | image_caption | image_map | image_size | image_upright | location | logo_alt | logo_caption | logo_class | logo_image | logo_size | logo_upright | main_contractors | main_venue | main_venue_capacity | map_alt | map_caption | map_size | name | native_name | native_name_lang | nickname | nrhp | opened | operator | owner | parking | production | project_manager | public_transit | pushpin_label | pushpin_label_position | pushpin_map = World | pushpin_caption | pushpin_map_size | pushpin_relief | rebuilt | record_attendance | renovated | reopened | roof | scoreboard | screens | seating_type | services_engineer | structural_engineer | suites | surface | tenants | type | website | years_active }} === Full syntax === <syntaxhighlight lang="wikitext" style="overflow:auto;"> {{Infobox venue | name = | native_name = | native_name_lang = | nickname = | logo_image = | logo_size = | logo_upright = | logo_alt = | logo_caption = | image = | image_size = | image_upright = | image_alt = | image_caption = | image_map = | map_size = | map_alt = | map_caption = | pushpin_map = | pushpin_map_size = | pushpin_caption = | pushpin_label_position = | pushpin_relief = | fullname = | former_names = | address = | city = | country = | location = | coordinates = <!-- {{Coord|LAT|LON|type:landmark|display=inline,title}} --> | height = <!-- {{cvt|...|ft|m}} or {{cvt|...|m|ft}} --> | public_transit = | parking = | owner = | operator = | designation = | type = | event = | seating_type = | suites = | capacity = 77,193 | record_attendance = | dimensions = | field_shape = | acreage = | roof = | surface = | scoreboard = | screens = | current_use = | production = | groundbreaking = | built = | opened = <!-- {{Start date|YYYY|MM|DD|df=y}} --> | renovated = | expanded = | closed = | demolished = | rebuilt = | years_active = | cost = | architectural_style = | architect = | builder = | project_manager = | structural_engineer = | services_engineer = | general_contractor = | main_contractors = | tenants = | website = <!-- {{URL|example.com}} --> | embedded = }} </syntaxhighlight> == Parameters == All attributes are optional. {| class="wikitable" ! style="text-align: left" | Parameter ! style="text-align: left" | Explanation |- | '''name''' | Name of the sporting venue. Defaults to <nowiki>{{PAGENAME}}</nowiki> |- | '''nickname''' | English nickname(s) of the venue |- | '''native_name''' | Name of the venue in native language/script (e.g. दशरथ रंगशाला) |- | '''native_name_lang''' | If {{Para|native_name}} is present, ISO 639-1 code of language/script of value (e.g. {{mono|ne}}) |- | '''fullname''' | Insert the official full name of the venue |- | '''former_names''' | Insert the venue's former name(s). Use the format: <blockquote>'''FormerName (year–year)'''</blockquote> |- | '''logo_image''' | Insert an image link in the form: <code>'''<nowiki>[[File:MyLogo.jpg|250px|alt=My alt text]]</nowiki>'''</code>. For more on alt text, please see [[WP:ALT]]. |- | '''logo_upright''' | Insert a number – see '''[[MOS:UPRIGHT]]''' for more information – default = 1. |- | '''logo_caption''' | Insert a caption for the stadium logo |- | '''image''' | Image name without "File:" or other formatting. e.g. '''MyImage.jpg''' |- | '''image_size''' | Size of the image as a raw number (i.e. without "px"). If not specified, image width defaults to "frameless" (220px). |- | '''image_alt''' | [[MOS:ALT|alt text]] for the image. |- | '''image_caption''' | Insert a caption for the stadium image |- | '''pushpin_map''' | The name of a location map as per [[:Template:Location map]] |- | '''pushpin_map_size''' | The width to display the pushpin map, in pixels. Just the number, without "px". If omitted or left empty, defaults to 250. |- | '''pushpin_caption''' | Caption to display below the pushpin map. If left blank or omitted, a caption will not be displayed. |- | '''pushpin_label''' | Name of the label used on the pushpin map. Defaults to page name but can be used if a longer name causes issue. |- | '''pushpin_label_position''' | The position of the label on the pushpin map relative to the pushpin mark. Valid values are left, right, top and bottom. This defaults to either left or right, depending on the coordinates of the marker and its position relative to the right border of the map image. |- | '''location''' | Insert the venue's location. For "United States" and "United Kingdom", it is preferred that they be abbreviated "U.S." and "UK", but political subdivisions should never be (never "MA" for "Massachusetts", "ON" for "Ontario", etc.). See Notes{{r|location}} for details. |- | '''coordinates''' | Insert the geographical coordinates; use {{tl|Coord}} |- | '''elevation''' | Elevation in meters or feet using {{tl|convert}} |- | '''type''' | Theatre, Stadium, ... |- | '''event''' | music, concerts, sporting events, theatre, dance |- | '''groundbreaking''' | Insert the date when ground was broken to build the venue |- | '''built''' | Insert a date range of when the venue was under construction |- | '''opened''' | Insert the date of when it opened |- | '''renovated''' | Insert the date of when it was renovated |- | '''expanded''' | Insert the date of when it was expanded |- | '''closed''' | Insert the date of when it was closed |- | '''demolished''' | Insert the date of when it was demolished |- | '''owner''' | Insert the name(s) of the venue's owner(s) |- | '''operator''' | Insert the name(s) of the venue's operator(s) |- | '''roof''' | Enter the roof type of the venue if indoors/covered (e.g. retractable, domed, translucent) |- | '''surface''' | Enter the surface of the venue (e.g. grass, sand, artificial turf) |- | '''scoreboard''' | Enter the details of any scoreboard at the venue. If specific details are not known, just enter "Yes" if the venue has a scoreboard or "No" if there is none. |- | '''screens''' | Enter the number of theatre screens. |- | '''current_use''' | Enter the current use of the venue. |- | '''production''' | Enter the theatrical production currently being housed at the venue. |- | '''cost''' | Enter the construction cost, preferably in the currency that the venue is located in (see [[Wikipedia:Manual of Style (dates and numbers)|WP:DATE]] for details) Per its own documentation, the [[:template:inflation|inflation template]] '''must not''' be used. |- | '''architectural_style''' | Insert the name(s) of the venue's architectural style(s) |- | '''architect''' | Insert the name(s) of the venue's architect(s) |- | '''builder''' | Name(s) of the venue's builder(s) |- | '''project_manager''' | Insert the name(s) of the project manager(s) who led the venue's construction |- | '''structural_engineer''' | Insert the name(s) of the venue's structural engineer(s) |- | '''services_engineer''' | Insert the name(s) of the venue's services engineer(s) |- | '''general_contractor''' | Insert the name(s) of the venue's general contractor(s) |- | '''main_contractors''' | Insert the name(s) of the venue's main contractor(s) |- | '''seating_type''' | soft seat, reserved seating |- | '''capacity''' | Insert the seating capacity of the venue. If it is a multi-purpose venue, use the format: <blockquote>'''Capacity (Purpose)'''</blockquote> |- | '''main_venue''' | Name of the main venue in a complex (use only for complexes, not individual venues) |- | '''main_venue_capacity''' | Capacity of the main venue in a complex (use only for complexes, not individual venues) |- | '''facilities''' | List of facilities in a complex (use only for complexes, not individual venues) |- | '''suites''' | Insert the number of suites |- | '''record_attendance''' | Insert the all-time record attendance of the venue. (include the date and event if you wish) If it is a multi-purpose venue, use the format: <blockquote>'''Record Attendance (Date & Event)'''</blockquote> |- | '''dimensions''' | Insert the dimensions of the venue: *For a football (soccer) pitch size, use the format: <blockquote>'''105 × 68 m'''</blockquote> *For baseball dimensions, use the format: <blockquote>'''Left field: 300 ft (91 m)<br/>Center field: 400 ft (122 m)<br/>Right field: 300 ft (91 m)'''</blockquote> |- | '''dimensions_label''' | Override the default label of "Field size". For example if the venue is a pool, can be changed to "Pool size" |- | '''field_shape''' | Oval, rectangular or circular |- | '''acreage''' | Insert the acreage. |- | '''tenants''' | Insert the teams and any other parties who use the venue as their home stadium or arena. Use the format: <blockquote>'''TeamName (league/organization) year–year'''</blockquote> Alternatively, you can use the {{tl|infobox venue/tenantlist}} sub-template to automatically line rows up. |- | '''embedded''' | Embed another infobox with such capability like {{tl|designation list}} and {{tl|infobox NRHP}}. See their respective documentation for more information. |- | '''website''' | Insert the website, preferably with {{tl|URL}} |- | '''public_transit''' | The nearest [[public transport]] stop. <br /> <nowiki> Example: [[Roosevelt/State (CTA)|Roosevelt Station]], [[Chicago Transit Authority]]</nowiki> |} === Mapframe parameters === {{Infobox mapframe/doc/parameters}} === Pushpin map === {{Location map/doc/infobox parameters}} == Notes == {{Reflist|refs= <ref name="location">As per RfC "Naming countries in infoboxes": When identifying a location, city or region in the United States or United Kingdom, the preferred approach is to use the country abbreviations allowed by [[MOS:ACRO]], such as "Portsmouth, New Hampshire, U.S." and "Cardiff, Wales, UK", rather than spelling out the full country name. Avoid using abbreviations for states or provinces in all nations. {{xt|New Hampshire}} rather than {{!xt|NH}}, {{xt|New South Wales}} rather than {{!xt|NSW}}, or {{xt|British Columbia}} rather than {{!xt|BC}} (see [[MOS:POSTABBR]]). Cities such as New York City and London may be rendered as "New York City, U.S." and "London, UK" or simply "New York City" and "London". Also, these should not be linked when the context makes it clear (see [[MOS:OVERLINK]]). If only the country name is included, it may be written out in full. </ref> }} == Example == {{Infobox venue | name = Narendra Modi Stadium | native_name = | native_name_lang = 639-2 | nickname = {{unbulleted list|GCA Stadium|Motera Cricket Stadium}} | logo_image = | logo_size = | logo_caption = | image = Narendra_Modi_Stadium_view_from_the_gallery.jpg | image_size = 300px | image_caption = Inside view of the arena | map_caption = The stadium in India | pushpin_map = India | elevation = 84 m | public_transit = {{rint|Bus}} Narendra Modi Stadium<br />{{rint|Metro}} [[Motera Stadium metro station|Motera Stadium]] {{rcb|Ahmedabad Metro|Red|yes}} | fullname = Narendra Modi Stadium | former_names = {{bulleted list| Sardar Patel stadium (former stadium 1982–2021)| Motera Cricket Stadium}} | address = [[Sardar Vallabhbhai Patel Sports Enclave]], [[Motera]], | city = [[Ahmedabad]], | country = India | location = Ahmedabad, [[Ahmedabad district]], [[Gujarat]], [[India]] | coordinates = {{Coord|23|05|29|N|72|35|50|E}} | groundbreaking = {{ubl|1983 (former structure) |December 2016 (New stadium)}} | built = September 2015- February 2020<ref name=S>{{Cite web |title=Modern Marvel: World's largest stadium |url=https://m.youtube.com/watch?v=nMqdtV9QTro&sa=U&ved=2ahUKEwjy1OP1sYKBAxVDON4KHWnlCWIQtwJ6BAgKEAE&usg=AOvVaw1lZ1vkMULw9vtqp0Q_xO9l |access-date=2023-08-28 |website=YouTube |publisher=[[History TV18]] |archive-date=5 October 2023 |archive-url=https://web.archive.org/web/20231005124506/https://www.youtube.com/watch?app=desktop&v=nMqdtV9QTro&sa=U&ved=2ahUKEwjy1OP1sYKBAxVDON4KHWnlCWIQtwJ6BAgKEAE&usg=AOvVaw1lZ1vkMULw9vtqp0Q_xO9l |url-status=live }}</ref><ref name=India/><br/> 12 November 1983 (former structure) | opened = 24 February 2020 (New stadium)<ref name=India>{{cite web|website=[[India Today]]|title=World's largest cricket stadium in Motera named Narendra Modi stadium|url=https://www.indiatoday.in/sports/cricket/story/world-s-largest-cricket-stadium-in-motera-named-narendra-modi-stadium-1772484-2021-02-24|access-date=24 February 2021|archive-date=4 October 2022|archive-url=https://web.archive.org/web/20221004000110/https://www.indiatoday.in/sports/cricket/story/world-s-largest-cricket-stadium-in-motera-named-narendra-modi-stadium-1772484-2021-02-24|url-status=live}}</ref><br/>12 November 1983 (former structure) | renovated = | expanded = | closed = September 2015 (former Sardar Patel stadium) | demolished = September 2015 (former Saradar Patel stadium)<ref name=S/> | parking = 13000<ref name=Seating>{{cite web|title=Motera Cricket stadium in Ahmedabad of over one lakh to be largest in the world.|url=https://www.indiatimes.com/news/india/motera-cricket-stadium-in-ahmedabad-with-seating-capacity-of-over-a-lakh-to-be-largest-in-the-world-359982.html|website=India times|date=7 January 2019|access-date=12 January 2019|archive-date=12 January 2019|archive-url=https://web.archive.org/web/20190112200545/https://www.indiatimes.com/news/india/motera-cricket-stadium-in-ahmedabad-with-seating-capacity-of-over-a-lakh-to-be-largest-in-the-world-359982.html|url-status=live}}</ref>{{Efn|It is said that parking for 10,000 two-wheelers and 3000 cars is available}} | owner = [[Gujarat Cricket Association]] | operator = Gujarat Cricket Association | acreage = {{convert|63|acre|ha|abbr=on}}<ref name= Populous>{{cite web|title= Narendra Modi stadium |website=Populous.com|url=https://populous.com/project/narendra-modi-stadium&ved=2ahUKEwj-pcPL1aSBAxU6bmwGHdTjB5YQFnoECBoQAQ&usg=AOvVaw0wiQYdH-m542tBncBhe5E3}}</ref> | surface = [[Bermuda grass]]<ref name=S/> | scoreboard = No | cost = {{INRConvert|800|c}} (New stadium 2015-2020)<ref>{{cite news |last1=Umarji |first1=Vinay |title=Kem Chho Trump: World's largest cricket stadium gearing up to host US Prez |url=https://www.business-standard.com/article/current-affairs/world-s-largest-cricket-stadium-gearing-up-to-host-trump-modi-in-gujarat-120021201119_1.html |access-date=25 March 2021 |work=Business Standard India |date=12 February 2020 |archive-date=13 February 2020 |archive-url=https://web.archive.org/web/20200213161424/https://www.business-standard.com/article/current-affairs/world-s-largest-cricket-stadium-gearing-up-to-host-trump-modi-in-gujarat-120021201119_1.html |url-status=live }}</ref> | type = Stadium | event = {{hlist|Sporting events|concerts}} | seating_type = [[Stadium seating]] | suites = 76 | architect = * Andrew James ([[Populous (company)|Populous design firm]]) (Narendra Modi stadium)<ref name=S/> * [[Shashi Prabhu]] (former Sardar Patel stadium)<ref>{{cite web |url=http://www.spa-aec.com/spaweb/allprojects.html |title=Complete Project List |access-date=1 April 2011 |url-status=dead |archive-url=https://web.archive.org/web/20110823063136/http://www.spa-aec.com/spaweb/allprojects.html |archive-date=23 August 2011}}</ref> | builder = [[Larsen and Toubro]]<ref name=AA/> | main_contractors = Larsen and Toubro<ref name=S/> | capacity = 132,000<ref name=AA>{{cite web|url=https://www.indiatoday.in/sports/cricket/story/world-s-largest-cricket-stadium-in-motera-named-narendra-modi-stadium-1772484-2021-02-24|website=[[India Today]]|title=World's largest cricket stadium...|access-date=24 February 2021|archive-date=4 October 2022|archive-url=https://web.archive.org/web/20221004000110/https://www.indiatoday.in/sports/cricket/story/world-s-largest-cricket-stadium-in-motera-named-narendra-modi-stadium-1772484-2021-02-24|url-status=live}}</ref> (2020–present)<ref name="1.32 lakh">{{cite news |last1=Gupta |first1=Rishabh |title=IND vs ENG: 'Outstanding for Indian cricket,' says Virat Kohli on Narendra Modi Stadium |url=https://www.indiatvnews.com/sports/cricket/india-vs-england-virat-kohli-narendra-modi-stadium-outstanding-for-indian-cricket-687042 |access-date=25 March 2020 |work=India TV News |date=24 February 2021 |language=en |archive-date=7 October 2022 |archive-url=https://web.archive.org/web/20221007124500/https://www.indiatvnews.com/sports/cricket/india-vs-england-virat-kohli-narendra-modi-stadium-outstanding-for-indian-cricket-687042 |url-status=live }})</ref> *54,000 (2006–2015)<ref name='htold'>{{cite news|title=Why Sardar Patel Stadium in Motera, Ahmedabad will make cricket history|url=https://www.hindustantimes.com/cricket/why-sardar-patel-stadium-in-motera-ahmedabad-will-make-cricket-history/story-7b59h4SZG5yHl7BGkg9agK.html|access-date=10 December 2016|newspaper=Hindustan Times|date=10 December 2016|archive-date=10 December 2016|archive-url=https://web.archive.org/web/20161210175135/http://www.hindustantimes.com/cricket/why-sardar-patel-stadium-in-motera-ahmedabad-will-make-cricket-history/story-7b59h4SZG5yHl7BGkg9agK.html|url-status=live}}</ref><ref name=Cricinfo>[http://www.espncricinfo.com/ci/content/ground/57851.html Sardar Patel Stadium, Motera, Ahmedabad, India] {{Webarchive|url=https://web.archive.org/web/20181226140409/http://www.espncricinfo.com/ci/content/ground/57851.html |date=26 December 2018 }}. ESPN</ref> *49,000 (1982–2006) | record_attendance = 101,566<ref>{{cite tweet |last=Shah |first=Jay |author-link=Jay Shah |user=JayShah |number=1596822586679504897 |date=27 November 2022 |title=Extremely delighted &amp; proud to receive the Guinness World Record for the largest attendance at a T20 match when 101,566 people witnessed the epic @IPL final at @GCAMotera's magnificent Narendra Modi Stadium on 29 May 2022. A big thanks to our fans for making this possible! @BCCI https://t.co/JHilbDLSB2 |language=en |access-date=14 December 2022 |archive-url=https://web.archive.org/web/20221130125825/https://twitter.com/JayShah/status/1596822586679504897 |archive-date=30 November 2022 |url-status=live}}</ref> <br/> ([[2022 Indian Premier League final|2022 IPL Final]])<br/> {{primary source inline|date=September 2023}} | executive_suites = | dimensions = {{convert|180|yd|order=flip}} x {{convert|150|yd|order=flip}}<ref name="Motera Stadium PM Modi's Vision">{{cite news |last1=Rao |first1=K. Shriniwas |title=New Motera stadium is Prime Minister Narendra Modi's vision, says Amit Shah |url=https://timesofindia.indiatimes.com/sports/cricket/news/new-motera-stadium-is-prime-minister-narendra-modis-vision-says-amit-shah/articleshow/70918902.cms |access-date=25 March 2021 |work=The Times of India |date=31 August 2019 |language=en |archive-date=1 September 2019 |archive-url=https://web.archive.org/web/20190901053105/https://timesofindia.indiatimes.com/sports/cricket/news/new-motera-stadium-is-prime-minister-narendra-modis-vision-says-amit-shah/articleshow/70918902.cms |url-status=live }}</ref> | field_shape = Oval <ref name=S/> | tenants = [[Gujarat cricket team]] (1983–present)<br /> [[Indian national cricket team |India cricket team]] (1983–present)<br/>[[Gujarat women's cricket team]]<br/>[[India women's national cricket team]] (2011–present)<br/>[[Gujarat Titans]] (2022–present)<br />[[Rajasthan Royals]] (2010–2014) | website = {{URL|gujaratcricketassociation.com|Gujrat cricket association's website}} | embedded = {{infobox cricket ground | embed = yes | country = India | location = [[Motera]], [[Ahmedabad]], [[Gujarat]] | establishment = | operator = Gujarat Cricket Association | tenants = | architect = | end1 = Adani Pavilion End{{citation needed|date=September 2023}} | end2 = Reliance End{{citation needed|date=September 2023}} | international = true | firstodidate = 5 October | firstodiyear = 1984 | firstodihome = India | firstodiaway = Australia | lastodidate = 4 November | lastodiyear = 2023 | lastodihome = Australia | lastodiaway = England | firsttestdate = 12–16 November | firsttestyear = 1983 | firsttesthome = India | firsttestaway = West Indies | lasttestdate = 9–13 March | lasttestyear = 2023 | lasttesthome = India | lasttestaway = Australia | firstt20idate = 28 December | firstt20iyear = 2012 | firstt20ihome = India | firstt20iaway = Pakistan | lastt20idate = 1 February | lastt20iyear = 2023 | lastt20ihome = India | lastt20iaway = New Zealand | firstwodidate = 12 March | firstwodiyear = 2012 | firstwodihome = India | firstwodiaway = Australia | lastwodidate = 12 April | lastwodiyear = 2013 | lastwodihome = India | lastwodiaway = Bangladesh | firstwt20idate = 22 January | firstwt20iyear = 2011 | firstwt20ihome = India | firstwt20iaway = West Indies | lastwt20idate = 24 January | lastwt20iyear = 2011 | lastwt20ihome = India | lastwt20iaway = West Indies | date = 9 March 2023 | source = [http://content-uk.cricinfo.com/ci/content/ground/57851.html Cricinfo] }} }} <syntaxhighlight lang="wikitext" style="overflow: auto;"> {{Infobox venue | name = Narendra Modi Stadium | native_name = | native_name_lang = 639-2 | nickname = {{unbulleted list|GCA Stadium|Motera Cricket Stadium}} | logo_image = | logo_size = | logo_caption = | image = Narendra_Modi_Stadium_view_from_the_gallery.jpg | image_size = 300px | image_caption = Inside view of the arena | map_caption = The stadium in India | pushpin_map = India | elevation = 84 m | public_transit = {{rint|Bus}} Narendra Modi Stadium<br />{{rint|Metro}} [[Motera Stadium metro station|Motera Stadium]] {{rcb|Ahmedabad Metro|Red|yes}} | fullname = Narendra Modi Stadium | former_names = {{bulleted list| Sardar Patel stadium (former stadium 1982–2021)| Motera Cricket Stadium}} | address = [[Sardar Vallabhbhai Patel Sports Enclave]], [[Motera]], | city = [[Ahmedabad]], | country = India | location = Ahmedabad, [[Ahmedabad district]], [[Gujarat]], [[India]] | coordinates = {{Coord|23|05|29|N|72|35|50|E}} | groundbreaking = {{ubl|1983 (former structure) |December 2016 (New stadium)}} | built = September 2015- February 2020<ref name=S>{{Cite web |title=Modern Marvel: World's largest stadium |url=https://m.youtube.com/watch?v=nMqdtV9QTro&sa=U&ved=2ahUKEwjy1OP1sYKBAxVDON4KHWnlCWIQtwJ6BAgKEAE&usg=AOvVaw1lZ1vkMULw9vtqp0Q_xO9l |access-date=2023-08-28 |website=YouTube |publisher=[[History TV18]] |archive-date=5 October 2023 |archive-url=https://web.archive.org/web/20231005124506/https://www.youtube.com/watch?app=desktop&v=nMqdtV9QTro&sa=U&ved=2ahUKEwjy1OP1sYKBAxVDON4KHWnlCWIQtwJ6BAgKEAE&usg=AOvVaw1lZ1vkMULw9vtqp0Q_xO9l |url-status=live }}</ref><ref name=India/><br/> 12 November 1983 (former structure) | opened = 24 February 2020 (New stadium)<ref name=India>{{cite web|website=[[India Today]]|title=World's largest cricket stadium in Motera named Narendra Modi stadium|url=https://www.indiatoday.in/sports/cricket/story/world-s-largest-cricket-stadium-in-motera-named-narendra-modi-stadium-1772484-2021-02-24|access-date=24 February 2021|archive-date=4 October 2022|archive-url=https://web.archive.org/web/20221004000110/https://www.indiatoday.in/sports/cricket/story/world-s-largest-cricket-stadium-in-motera-named-narendra-modi-stadium-1772484-2021-02-24|url-status=live}}</ref><br/>12 November 1983 (former structure) | renovated = | expanded = | closed = September 2015 (former Sardar Patel stadium) | demolished = September 2015 (former Saradar Patel stadium)<ref name=S/> | parking = 13000<ref name=Seating>{{cite web|title=Motera Cricket stadium in Ahmedabad of over one lakh to be largest in the world.|url=https://www.indiatimes.com/news/india/motera-cricket-stadium-in-ahmedabad-with-seating-capacity-of-over-a-lakh-to-be-largest-in-the-world-359982.html|website=India times|date=7 January 2019|access-date=12 January 2019|archive-date=12 January 2019|archive-url=https://web.archive.org/web/20190112200545/https://www.indiatimes.com/news/india/motera-cricket-stadium-in-ahmedabad-with-seating-capacity-of-over-a-lakh-to-be-largest-in-the-world-359982.html|url-status=live}}</ref>{{Efn|It is said that parking for 10,000 two-wheelers and 3000 cars is available}} | owner = [[Gujarat Cricket Association]] | operator = Gujarat Cricket Association | acreage = {{convert|63|acre|ha|abbr=on}}<ref name= Populous>{{cite web|title= Narendra Modi stadium |website=Populous.com|url=https://populous.com/project/narendra-modi-stadium&ved=2ahUKEwj-pcPL1aSBAxU6bmwGHdTjB5YQFnoECBoQAQ&usg=AOvVaw0wiQYdH-m542tBncBhe5E3}}</ref> | surface = [[Bermuda grass]]<ref name=S/> | scoreboard = No | cost = {{INRConvert|800|c}} (New stadium 2015-2020)<ref>{{cite news |last1=Umarji |first1=Vinay |title=Kem Chho Trump: World's largest cricket stadium gearing up to host US Prez |url=https://www.business-standard.com/article/current-affairs/world-s-largest-cricket-stadium-gearing-up-to-host-trump-modi-in-gujarat-120021201119_1.html |access-date=25 March 2021 |work=Business Standard India |date=12 February 2020 |archive-date=13 February 2020 |archive-url=https://web.archive.org/web/20200213161424/https://www.business-standard.com/article/current-affairs/world-s-largest-cricket-stadium-gearing-up-to-host-trump-modi-in-gujarat-120021201119_1.html |url-status=live }}</ref> | type = Stadium | event = {{hlist|Sporting events|concerts}} | seating_type = [[Stadium seating]] | suites = 76 | architect = * Andrew James ([[Populous (company)|Populous design firm]]) (Narendra Modi stadium)<ref name=S/> * [[Shashi Prabhu]] (former Sardar Patel stadium)<ref>{{cite web |url=http://www.spa-aec.com/spaweb/allprojects.html |title=Complete Project List |access-date=1 April 2011 |url-status=dead |archive-url=https://web.archive.org/web/20110823063136/http://www.spa-aec.com/spaweb/allprojects.html |archive-date=23 August 2011}}</ref> | builder = [[Larsen and Toubro]]<ref name=AA/> | main_contractors = Larsen and Toubro<ref name=S/> | capacity = 132,000<ref name=AA>{{cite web|url=https://www.indiatoday.in/sports/cricket/story/world-s-largest-cricket-stadium-in-motera-named-narendra-modi-stadium-1772484-2021-02-24|website=[[India Today]]|title=World's largest cricket stadium...|access-date=24 February 2021|archive-date=4 October 2022|archive-url=https://web.archive.org/web/20221004000110/https://www.indiatoday.in/sports/cricket/story/world-s-largest-cricket-stadium-in-motera-named-narendra-modi-stadium-1772484-2021-02-24|url-status=live}}</ref> (2020–present)<ref name="1.32 lakh">{{cite news |last1=Gupta |first1=Rishabh |title=IND vs ENG: 'Outstanding for Indian cricket,' says Virat Kohli on Narendra Modi Stadium |url=https://www.indiatvnews.com/sports/cricket/india-vs-england-virat-kohli-narendra-modi-stadium-outstanding-for-indian-cricket-687042 |access-date=25 March 2020 |work=India TV News |date=24 February 2021 |language=en |archive-date=7 October 2022 |archive-url=https://web.archive.org/web/20221007124500/https://www.indiatvnews.com/sports/cricket/india-vs-england-virat-kohli-narendra-modi-stadium-outstanding-for-indian-cricket-687042 |url-status=live }})</ref> *54,000 (2006–2015)<ref name='htold'>{{cite news|title=Why Sardar Patel Stadium in Motera, Ahmedabad will make cricket history|url=https://www.hindustantimes.com/cricket/why-sardar-patel-stadium-in-motera-ahmedabad-will-make-cricket-history/story-7b59h4SZG5yHl7BGkg9agK.html|access-date=10 December 2016|newspaper=Hindustan Times|date=10 December 2016|author=HT Correspondent|archive-date=10 December 2016|archive-url=https://web.archive.org/web/20161210175135/http://www.hindustantimes.com/cricket/why-sardar-patel-stadium-in-motera-ahmedabad-will-make-cricket-history/story-7b59h4SZG5yHl7BGkg9agK.html|url-status=live}}</ref><ref name=Cricinfo>[http://www.espncricinfo.com/ci/content/ground/57851.html Sardar Patel Stadium, Motera, Ahmedabad, India] {{Webarchive|url=https://web.archive.org/web/20181226140409/http://www.espncricinfo.com/ci/content/ground/57851.html |date=26 December 2018 }}. ESPN</ref> *49,000 (1982–2006) | record_attendance = 101,566<ref>{{cite tweet |last=Shah |first=Jay |author-link=Jay Shah |user=JayShah |number=1596822586679504897 |date=27 November 2022 |title=Extremely delighted &amp; proud to receive the Guinness World Record for the largest attendance at a T20 match when 101,566 people witnessed the epic @IPL final at @GCAMotera's magnificent Narendra Modi Stadium on 29 May 2022. A big thanks to our fans for making this possible! @BCCI https://t.co/JHilbDLSB2 |language=en |access-date=14 December 2022 |archive-url=https://web.archive.org/web/20221130125825/https://twitter.com/JayShah/status/1596822586679504897 |archive-date=30 November 2022 |url-status=live}}</ref> <br/> ([[2022 Indian Premier League final|2022 IPL Final]])<br/> {{primary source inline|date=September 2023}} | executive_suites = | dimensions = {{convert|180|yd|order=flip}} x {{convert|150|yd|order=flip}}<ref name="Motera Stadium PM Modi's Vision">{{cite news |last1=Rao |first1=K. Shriniwas |title=New Motera stadium is Prime Minister Narendra Modi's vision, says Amit Shah |url=https://timesofindia.indiatimes.com/sports/cricket/news/new-motera-stadium-is-prime-minister-narendra-modis-vision-says-amit-shah/articleshow/70918902.cms |access-date=25 March 2021 |work=The Times of India |date=31 August 2019 |language=en |archive-date=1 September 2019 |archive-url=https://web.archive.org/web/20190901053105/https://timesofindia.indiatimes.com/sports/cricket/news/new-motera-stadium-is-prime-minister-narendra-modis-vision-says-amit-shah/articleshow/70918902.cms |url-status=live }}</ref> | field_shape = Oval <ref name=S/> | tenants = [[Gujarat cricket team]] (1983–present)<br /> [[Indian national cricket team |India cricket team]] (1983–present)<br/>[[Gujarat women's cricket team]]<br/>[[India women's national cricket team]] (2011–present)<br/>[[Gujarat Titans]] (2022–present)<br />[[Rajasthan Royals]] (2010–2014) | website = {{URL|gujaratcricketassociation.com|Gujrat cricket association's website}} | embedded = {{infobox cricket ground | embed = yes | country = India | location = [[Motera]], [[Ahmedabad]], [[Gujarat]] | establishment = | operator = Gujarat Cricket Association | tenants = | architect = | end1 = Adani Pavilion End{{citation needed|date=September 2023}} | end2 = Reliance End{{citation needed|date=September 2023}} | international = true | firstodidate = 5 October | firstodiyear = 1984 | firstodihome = India | firstodiaway = Australia | lastodidate = 4 November | lastodiyear = 2023 | lastodihome = Australia | lastodiaway = England | firsttestdate = 12–16 November | firsttestyear = 1983 | firsttesthome = India | firsttestaway = West Indies | lasttestdate = 9–13 March | lasttestyear = 2023 | lasttesthome = India | lasttestaway = Australia | firstt20idate = 28 December | firstt20iyear = 2012 | firstt20ihome = India | firstt20iaway = Pakistan | lastt20idate = 1 February | lastt20iyear = 2023 | lastt20ihome = India | lastt20iaway = New Zealand | firstwodidate = 12 March | firstwodiyear = 2012 | firstwodihome = India | firstwodiaway = Australia | lastwodidate = 12 April | lastwodiyear = 2013 | lastwodihome = India | lastwodiaway = Bangladesh | firstwt20idate = 22 January | firstwt20iyear = 2011 | firstwt20ihome = India | firstwt20iaway = West Indies | lastwt20idate = 24 January | lastwt20iyear = 2011 | lastwt20ihome = India | lastwt20iaway = West Indies | date = 9 March 2023 | source = [http://content-uk.cricinfo.com/ci/content/ground/57851.html Cricinfo] }} }} </syntaxhighlight> '''Explanatory note''' {{reflist|group=lower-alpha}} '''References''' {{reflist}} == Microformat == {{#ifeq:{{SUBPAGENAME}}|sandbox|{{tl|UF-hcard-geo}}|{{UF-hcard-geo}}}} == TemplateData == {{Collapse top|title=[[Wikipedia:TemplateData|TemplateData]] used by [[mw:Extension:TemplateWizard|TemplateWizard]], [[Wikipedia:VisualEditor|VisualEditor]] and other tools}} {{TemplateData header|noheader=1}} <templatedata>{ "description": "This templates generates an infobox to summarize information about stadiums, arenas, or other sporting venues.", "format": "block", "paramOrder": [ "name", "native_name", "native_name_lang", "nickname", "logo_image", "logo_size", "logo_upright", "logo_alt", "logo_caption", "image", "image_size", "image_upright", "image_alt", "image_caption", "image_map", "map_size", "map_alt", "map_caption", "pushpin_map", "pushpin_caption", "pushpin_label_position", "pushpin_relief", "pushpin_label", "pushpin_map_size", "mapframe", "mapframe-caption", "mapframe-custom", "mapframe-id", "mapframe-coord", "mapframe-wikidata", "mapframe-point", "mapframe-shape", "mapframe-frame-width", "mapframe-frame-height", "mapframe-shape-fill", "mapframe-shape-fill-opacity", "mapframe-stroke-color", "mapframe-stroke-width", "mapframe-marker", "mapframe-marker-color", "mapframe-geomask", "mapframe-geomask-stroke-color", "mapframe-geomask-stroke-width", "mapframe-geomask-fill", "mapframe-geomask-fill-opacity", "mapframe-zoom", "mapframe-length_km", "mapframe-length_mi", "mapframe-area_km2", "mapframe-area_mi2", "mapframe-frame-coordinates", "mapframe-switcher", "fullname", "former_names", "address", "city", "country", "location", "coordinates", "elevation", "public_transit", "parking", "owner", "operator", "designation", "type", "event", "seating_type", "suites", "capacity", "record_attendance", "dimensions", "dimensions_label", "acreage", "field_shape", "surface", "scoreboard", "screens", "current_use", "production", "groundbreaking", "built", "opened", "renovated", "expanded", "closed", "reopened", "demolished", "rebuilt", "years_active", "cost", "architectural_style", "architect", "builder", "project_manager", "structural_engineer", "services_engineer", "general_contractor", "main_contractors", "tenants", "website", "nrhp", "embedded" ], "params": { "name": { "label": "Official name", "type": "line", "required": false, "description": "Name of the sporting venue", "default": "{{PAGENAMEBASE}}", "suggested": true }, "nickname": { "label": "Nickname(s)", "type": "line", "required": false, "description": "English alternate names or nickname(s) of the venue" }, "native_name": { "label": "Native name", "type": "string", "required": false, "description": "Name of venue in native language/script" }, "native_name_lang": { "label": "Native name language", "type": "string", "required": false, "description": "If {{{native_name}}} present, ISO 639-1 language code of language/script of its value" }, "fullname": { "label": "Full name", "type": "string", "required": false, "description": "Official full name of the venue" }, "former_names": { "label": "Former name(s)", "type": "string", "required": false, "description": "Venue's former name(s) in format \"FormerName (year–year)\"", "suggested": true }, "logo_image": { "label": "Logo image link", "type": "wiki-file-name", "required": false, "description": "Image link to the logo", "suggested": true }, "logo_caption": { "label": "Logo caption", "type": "string", "required": false, "description": "Caption for the stadium logo" }, "image": { "label": "Image link", "type": "wiki-file-name", "required": false, "description": "Image link", "suggested": true }, "location": { "label": "Location", "type": "line", "required": false }, "coordinates": { "label": "Coordinates", "type": "string", "required": false, "description": "Geographical coordinates", "suggested": true }, "elevation": { "label": "Elevation", "type": "string", "required": false }, "built": { "label": "Build date", "type": "string", "required": false, "description": "Date range of when the venue was under construction" }, "opened": { "label": "Date of opening", "type": "line", "required": false, "description": "Date of when it opened", "suggested": true }, "renovated": { "label": "Date of renovation", "type": "string", "required": false, "description": "Date of when it was renovated" }, "expanded": { "label": "Date of expansion", "type": "string", "required": false, "description": "Date of when it was expanded" }, "closed": { "label": "Date of closing", "type": "line", "required": false, "description": "Date of when it was closed" }, "demolished": { "label": "Date of demolishing", "type": "string", "required": false, "description": "Date of when it was demolished" }, "owner": { "label": "Owner(s)", "type": "string", "required": false, "description": "Name(s) of the venue's owner(s)" }, "operator": { "label": "Operator(s)", "type": "string", "required": false, "description": "Name(s) of the venue's operator(s)" }, "surface": { "label": "Surface", "type": "string", "required": false, "description": "Surface of the venue (e.g. grass, sand, artificial turf)" }, "scoreboard": { "label": "Scoreboard", "type": "string", "required": false, "description": "Details of scoreboard at the venue. If not known, just enter \"Yes\" if the venue has a scoreboard and \"No\" otherwise." }, "cost": { "label": "Cost", "type": "line", "required": false, "description": "Construction cost, preferably in the currency that the venue is located" }, "architectural_style": { "label": "Architectural style", "type": "string", "required": false, "description": "Name(s) of venue's architectural style(s)" }, "architect": { "label": "Architect(s)", "type": "string", "required": false, "description": "Name(s) of venue's architect(s)" }, "structural_engineer": { "label": "Structural engineer(s)", "type": "string", "required": false, "description": "Name(s) of venue's structural engineer(s)" }, "services_engineer": { "label": "Services engineer(s)", "type": "string", "required": false, "description": "Name(s) of venue's services engineer(s)" }, "capacity": { "label": "Max. legal occupancy", "type": "number", "required": false, "suggested": true }, "record_attendance": { "label": "Record attendance", "type": "string", "required": false, "description": "All time record attendance of the venue. If it is a multi-purpose venue, use the format: \"Record Attendance (Date & Event)\"" }, "dimensions": { "label": "Dimensions", "type": "string", "required": false, "description": "Dimensions of the venue" }, "tenants": { "label": "Tenants", "type": "string", "required": false, "description": "The teams and any other parties who use the venue as their home stadium or arena. Use the format: \"TeamName (league/organization) year–year\"" }, "website": { "label": "Website", "type": "string", "required": false, "suggested": true }, "public_transit": { "label": "Public transit", "type": "string", "required": false, "description": "The nearest public transport stop" }, "parking": { "label": "Available parking", "description": "Number of parking spaces available to public", "example": "2,000 spaces", "type": "line" }, "logo_size": { "label": "Logo image size", "type": "line" }, "logo_upright": { "label": "Logo upright size", "type": "number", "default": "1" }, "logo_alt": { "label": "Logo image alternative text", "description": "Accessibility text describing image for screen readers and other assistive technologies", "type": "string" }, "image_size": { "label": "Image size", "type": "line" }, "image_upright": { "label": "Image upright size", "type": "number", "default": "1" }, "image_alt": { "label": "Image alternative text", "description": "Accessibility text describing image for screen readers and other assistive technologies", "type": "string" }, "image_caption": { "aliases": [ "caption" ], "label": "Image caption", "description": "Caption for the image", "type": "string" }, "image_map": { "label": "Map image", "type": "wiki-file-name" }, "map_size": { "label": "Map size", "description": "Map image dimensions, defaults to image_size parameter value if not specified", "type": "line" }, "map_alt": { "label": "Map image alternative text", "description": "Accessibility text describing image for screen readers and other assistive technologies", "type": "string" }, "map_caption": { "label": "Map caption", "description": "Contextual information to display beneath map image", "type": "string" }, "pushpin_map": {}, "pushpin_caption": {}, "pushpin_label_position": {}, "pushpin_relief": {}, "pushpin_label": {}, "pushpin_map_size": {}, "address": { "suggested": true }, "city": { "suggested": true }, "country": { "suggested": true }, "designation": {}, "type": {}, "event": {}, "seating_type": {}, "suites": { "label": "Suites", "description": "Number of suites", "type": "line" }, "field_shape": {}, "acreage": { "label": "Acreage", "type": "line" }, "screens": {}, "current_use": {}, "production": {}, "groundbreaking": { "label": "Ground broke date", "description": "Date when ground was broken to build the venue", "type": "string" }, "reopened": {}, "rebuilt": {}, "years_active": {}, "builder": {}, "project_manager": { "label": "Project manager(s)", "description": "Name(s) of venue's project manager(s)", "type": "string" }, "general_contractor": { "label": "General contractor(s)", "description": "Name(s) of venue's general contractor(s)", "type": "string" }, "main_contractors": { "label": "Main contractor(s)", "description": "Name(s) of venue's main contractor(s)", "type": "string" }, "nrhp": { "label": "NRHP", "description": "Embed a NRHP infobox", "type": "string" }, "embedded": { "label": "Embedded", "description": "Embed another infobox", "type": "string" }, "mapframe": {}, "mapframe-caption": {}, "mapframe-custom": {}, "mapframe-id": {}, "mapframe-coord": {}, "mapframe-wikidata": {}, "mapframe-point": {}, "mapframe-shape": {}, "mapframe-frame-width": {}, "mapframe-frame-height": {}, "mapframe-shape-fill": {}, "mapframe-shape-fill-opacity": {}, "mapframe-stroke-color": { "aliases": [ "mapframe-stroke-colour" ] }, "mapframe-stroke-width": {}, "mapframe-marker": {}, "mapframe-marker-color": { "aliases": [ "mapframe-marker-colour" ] }, "mapframe-geomask": {}, "mapframe-geomask-stroke-color": { "aliases": [ "mapframe-geomask-stroke-colour" ] }, "mapframe-geomask-stroke-width": {}, "mapframe-geomask-fill": {}, "mapframe-geomask-fill-opacity": {}, "mapframe-zoom": {}, "mapframe-length_km": {}, "mapframe-length_mi": {}, "mapframe-area_km2": {}, "mapframe-area_mi2": {}, "mapframe-frame-coordinates": { "aliases": [ "mapframe-frame-coord" ] }, "mapframe-switcher": {}, "dimensions_label": { "label": "Dimensions label", "description": "Override the default label of \"Field size\"", "example": "Pool size", "type": "string", "default": "Field size" } } }</templatedata> {{Collapse bottom}} == Tracking category == {{infobox tracking categories}} * {{clc|Pages using infobox venue with both map caption and pushpin map}} * {{clc|Pages using infobox venue with both image map and pushpin map}} ==See also== {{Buildings and structures infobox templates}} <includeonly>{{Sandbox other|| <!-- ADD CATEGORIES BELOW THIS LINE AND INTERWIKIS TO WIKIDATA, THANK YOU! --> [[Category:Buildings and structures infobox templates|Venue]] [[Category:Music infobox templates|Venue]] [[Category:Sports infobox templates|Venue]] [[Category:Templates that add a tracking category]] }}</includeonly> 4g1go4ibt2ov13egukhu0hlrasixmp0 ಮೋಡ್ಯೂಲ್:Adjacent stations/Ahmedabad Metro 828 29117 373885 2026-04-08T00:18:16Z en>R'n'B 0 articles for Red and Blue lines are at those titles, not North-South and East-West 373885 Scribunto text/plain local nag = "%1 metro station (Ahmedabad)" local p = { ["system title"] = "[[Ahmedabad Metro]]", ["system icon"] = "[[File:GMRC logo.png|22px|link=Ahmedabad Metro|alt=Logo of GMRC]]", ["color box format"] = "title", ["system color"] = "000080", ["name format"] = "font-size: 150%; font-family:Arial, sans; font-weight: bold; line-height: 100%; color: #000080;", ["header background color"] = "293a54", ["header text color"] = "FFFFFF", ["station format"] = { "%1 metro station", }, ["lines"] = { ["_default"] = { ["title"] = "[[%1 Line (Ahmedabad Metro)|%1 Line]]", ["color"] = "cccccc", ["text color"] = "FFFFFF", }, ["Blue"] = { ["color"] = "0983ce", ["left terminus"] = "Thaltej Gam", ["right terminus"] = "Vastral Gam", }, ["Red"] = { ["color"] = "f52532", ["left terminus"] = "APMC", ["right terminus"] = {"Mahatma Mandir", "GIFT City"}, ["types"] = { ["main"] = { ["title"] = "", ["right terminus"] = "Mahatma Mandir" }, ["branch"] = { ["title"] = "", ["right terminus"] = "GIFT City" } } }, ["Yellow"] = { ["color"] = "F2CB00", ["text color"] = "000", ["left terminus"] = "Motera Stadium", ["right terminus"] = "Mahatma Mandir", }, ["Violet"] = { ["color"] = "9C27B0", ["left terminus"] = "GNLU", ["right terminus"] = "GIFT City", } }, ["aliases"] = { ["blue"] = "Blue", ["red"] = "Red", ["yellow"] = "Yellow", ["violet"] = "Violet", ["line 1"] = "Blue", ["line 2"] = "Red", ["line 3"] = "Yellow", ["line 4"] = "Violet", ["Line 1"] = "Blue", ["Line 2"] = "Red", ["Line 3"] = "Yellow", ["Line 4"] = "Violet" } } return p 9ki52mnstcfovmo6xa2ty82rupf8jid 373886 373885 2026-10-28T05:55:30Z ChiK 1136 1 revision imported from [[:en:Module:Adjacent_stations/Ahmedabad_Metro]] 373885 Scribunto text/plain local nag = "%1 metro station (Ahmedabad)" local p = { ["system title"] = "[[Ahmedabad Metro]]", ["system icon"] = "[[File:GMRC logo.png|22px|link=Ahmedabad Metro|alt=Logo of GMRC]]", ["color box format"] = "title", ["system color"] = "000080", ["name format"] = "font-size: 150%; font-family:Arial, sans; font-weight: bold; line-height: 100%; color: #000080;", ["header background color"] = "293a54", ["header text color"] = "FFFFFF", ["station format"] = { "%1 metro station", }, ["lines"] = { ["_default"] = { ["title"] = "[[%1 Line (Ahmedabad Metro)|%1 Line]]", ["color"] = "cccccc", ["text color"] = "FFFFFF", }, ["Blue"] = { ["color"] = "0983ce", ["left terminus"] = "Thaltej Gam", ["right terminus"] = "Vastral Gam", }, ["Red"] = { ["color"] = "f52532", ["left terminus"] = "APMC", ["right terminus"] = {"Mahatma Mandir", "GIFT City"}, ["types"] = { ["main"] = { ["title"] = "", ["right terminus"] = "Mahatma Mandir" }, ["branch"] = { ["title"] = "", ["right terminus"] = "GIFT City" } } }, ["Yellow"] = { ["color"] = "F2CB00", ["text color"] = "000", ["left terminus"] = "Motera Stadium", ["right terminus"] = "Mahatma Mandir", }, ["Violet"] = { ["color"] = "9C27B0", ["left terminus"] = "GNLU", ["right terminus"] = "GIFT City", } }, ["aliases"] = { ["blue"] = "Blue", ["red"] = "Red", ["yellow"] = "Yellow", ["violet"] = "Violet", ["line 1"] = "Blue", ["line 2"] = "Red", ["line 3"] = "Yellow", ["line 4"] = "Violet", ["Line 1"] = "Blue", ["Line 2"] = "Red", ["Line 3"] = "Yellow", ["Line 4"] = "Violet" } } return p 9ki52mnstcfovmo6xa2ty82rupf8jid ಟೆಂಪ್ಲೇಟ್:National men's cricket team 10 29118 373889 2026-04-18T13:24:05Z en>Primefac 0 Primefac moved page [[Template:Cr]] to [[Template:National men's cricket team]]: expand name for clarity 373889 wikitext text/x-wiki {{country data {{{1}}} | flag link/core | variant = {{{variant|{{{2|}}}}}} | size = {{{size|}}} | name = {{{name|}}} | altlink = national cricket team | altvar = cricket }}<noinclude>{{documentation}}</noinclude> 1elw3hd06h5x6hdlmk25ki5ipamrour 373890 373889 2026-10-28T05:55:31Z ChiK 1136 1 revision imported from [[:en:Template:National_men's_cricket_team]] 373889 wikitext text/x-wiki {{country data {{{1}}} | flag link/core | variant = {{{variant|{{{2|}}}}}} | size = {{{size|}}} | name = {{{name|}}} | altlink = national cricket team | altvar = cricket }}<noinclude>{{documentation}}</noinclude> 1elw3hd06h5x6hdlmk25ki5ipamrour ಟೆಂಪ್ಲೇಟ್:National women's cricket team 10 29119 373891 2026-04-18T13:28:15Z en>Primefac 0 Primefac moved page [[Template:Crw]] to [[Template:National women's cricket team]]: expand name for clarity 373891 wikitext text/x-wiki {{country data {{{1}}} | flag link/core | variant = {{{variant|{{{2|}}}}}} | size = {{{size|}}} | name = {{{name|}}} | altlink = women's national cricket team | altvar = cricket | mw = women's }}<noinclude>{{documentation}}</noinclude> l5we83q7qbosb24rm4ufm2iz7fpk1cc 373892 373891 2026-10-28T05:55:31Z ChiK 1136 1 revision imported from [[:en:Template:National_women's_cricket_team]] 373891 wikitext text/x-wiki {{country data {{{1}}} | flag link/core | variant = {{{variant|{{{2|}}}}}} | size = {{{size|}}} | name = {{{name|}}} | altlink = women's national cricket team | altvar = cricket | mw = women's }}<noinclude>{{documentation}}</noinclude> l5we83q7qbosb24rm4ufm2iz7fpk1cc ಪಾತೆರ:ಮಂಗಳಾ ಕ್ರೀಡಾಂಗಣ 1 29120 373899 2026-10-28T06:15:23Z Mahaveer Indra 1023 https://fountain.toolforge.org/editathons/tlc-tcy 373899 wikitext text/x-wiki {{ವಿಕಿಯೋಜನೆ ತುಳುವೆರೆ ಬದ್‌ಕ್ ಬುಕ್ಕೊ ಸಾಂಸ್ಕೃತಿಕ ಪರಂಪರೆ}} 0tth3l3wvda31az37nu5uozjh7la6bv ಮಂಗಳೂರು ಸೆಂಟ್ರಲ್ ರೈಲ್ವೆ ನಿಲ್ದಾಣ 0 29121 373901 2026-10-28T07:16:48Z Mahaveer Indra 1023 ಪೊಸ ಬರವು 373901 wikitext text/x-wiki '''ಮಂಗಳೂರು ಸೆಂಟ್ರಲ್ ರೈಲ್ವೆ ನಿಲ್ದಾಣ''' (ಸ್ಟೇಷನ್ ಕೋಡ್: MAQ<ref name="stn_code">{{cite web |title=Station Code Index |url=https://indianrailways.gov.in/railwayboard/uploads/directorate/coaching/TAG_2023-24/Station_Code_Index.pdf |website=Portal of Indian Railways |publisher=Centre For Railway Information Systems |access-date=25 March 2024 |archive-url=https://web.archive.org/web/20240216225807/https://indianrailways.gov.in/railwayboard/uploads/directorate/coaching/TAG_2023-24/Station_Code_Index.pdf |archive-date=16 February 2024 |page=7 |date=2023–2024}}</ref>)) ನೈಋತ್ಯ ರೈಲ್ವೆ ವಲಯದ ಮೈಸೂರು ರೈಲ್ವೆ ವಿಭಾಗಡ್ ಇಪ್ಪುನ ಒಂಜಿ ರೈಲ್ವೆ ನಿಲ್ದಾಣ.<ref name="sr_stn">{{cite web |title=SOUTHERN RAILWAY LIST OF STATIONS AS ON 01.04.2023 (CATEGORY- WISE) |url=https://sr.indianrailways.gov.in/cris//uploads/files/1686913242750-SR%20-LIST%20OF%20STATIONS-2023.pdf |website=Portal of Indian Railways |publisher=Centre For Railway Information Systems |archive-url=https://web.archive.org/web/20240323095403/https://sr.indianrailways.gov.in/cris//uploads/files/1686913242750-SR%20-LIST%20OF%20STATIONS-2023.pdf |archive-date=23 March 2024 |page=2 |date=1 April 2023 |access-date=23 March 2024}}</ref> ಅಕ್ಟೋಬರ್ ೧, ೨೦೨೬ರ್ದ್ ಅನ್ವಯ ಆಪಿಲೆಕ ಉಂದೆನ್ ದಕ್ಷಿಣ ರೈಲ್ವೆ ವಲಯದ ಪಾಲಕ್ಕಾಡ್ ವಿಭಾಗೊರ್ದು ಮೈಸೂರು ವಿಭಾಗಗ್ ವರ್ಗಾವಣೆ ಮಲ್ತ್‌ದೆರ್.<ref>{{cite web|url=https://egazette.gov.in/(S(midxzkf4kp0yi1xrvxicvvxv))/ViewPDF.aspx|title= MINISTRY OF RAILWAYS(Railway Board) NOTIFICATION New Delhi, the 21st August, 2026|publisher=Government of India,Ministry of Railways|access-date=2 September 2026}}</ref> ಉಂದು ಕೊಂಕಣ ರೈಲ್ವೆ ಅಂಚನೆ ನೈಋತ್ಯ ರೈಲ್ವೆಗ್ ಸಂಪರ್ಕನ್ ಕೊರ್ಪುನ ಒಂಜಿ ಮುಕ್ಯವಾಯಿನ ರೈಲ್ವೇ ನಿಲ್ದಾಣ. ನಮ ದೇಸೊಡು ಇಪ್ಪುನ ಐನ್ ಸೆಂಟ್ರಲ್ ರೈಲ್ವೆ ಸ್ಟೇಷನ್‌ಲೆಡ್ ಕುಡ್ಲದ ರೈಲ್ವೇ ನಿಲ್ದಾಣಲಾ ಒಂಜಿ ಆದುಂಡು. nqsg50k0qc7g54g1df5qr1pmr3geuid 373902 373901 2026-10-28T07:21:03Z Mahaveer Indra 1023 373902 wikitext text/x-wiki '''ಮಂಗಳೂರು ಸೆಂಟ್ರಲ್ ರೈಲ್ವೆ ನಿಲ್ದಾಣ''' (ಸ್ಟೇಷನ್ ಕೋಡ್: MAQ<ref name="stn_code">{{cite web |title=Station Code Index |url=https://indianrailways.gov.in/railwayboard/uploads/directorate/coaching/TAG_2023-24/Station_Code_Index.pdf |website=Portal of Indian Railways |publisher=Centre For Railway Information Systems |access-date=25 March 2024 |archive-url=https://web.archive.org/web/20240216225807/https://indianrailways.gov.in/railwayboard/uploads/directorate/coaching/TAG_2023-24/Station_Code_Index.pdf |archive-date=16 February 2024 |page=7 |date=2023–2024}}</ref>)) ನೈಋತ್ಯ ರೈಲ್ವೆ ವಲಯದ ಮೈಸೂರು ರೈಲ್ವೆ ವಿಭಾಗಡ್ ಇಪ್ಪುನ ಒಂಜಿ ರೈಲ್ವೆ ನಿಲ್ದಾಣ.<ref name="sr_stn">{{cite web |title=SOUTHERN RAILWAY LIST OF STATIONS AS ON 01.04.2023 (CATEGORY- WISE) |url=https://sr.indianrailways.gov.in/cris//uploads/files/1686913242750-SR%20-LIST%20OF%20STATIONS-2023.pdf |website=Portal of Indian Railways |publisher=Centre For Railway Information Systems |archive-url=https://web.archive.org/web/20240323095403/https://sr.indianrailways.gov.in/cris//uploads/files/1686913242750-SR%20-LIST%20OF%20STATIONS-2023.pdf |archive-date=23 March 2024 |page=2 |date=1 April 2023 |access-date=23 March 2024}}</ref> ಅಕ್ಟೋಬರ್ ೧, ೨೦೨೬ರ್ದ್ ಅನ್ವಯ ಆಪಿಲೆಕ ಉಂದೆನ್ ದಕ್ಷಿಣ ರೈಲ್ವೆ ವಲಯದ ಪಾಲಕ್ಕಾಡ್ ವಿಭಾಗೊರ್ದು ಮೈಸೂರು ವಿಭಾಗಗ್ ವರ್ಗಾವಣೆ ಮಲ್ತ್‌ದೆರ್.<ref>{{cite web|url=https://egazette.gov.in/(S(midxzkf4kp0yi1xrvxicvvxv))/ViewPDF.aspx|title= MINISTRY OF RAILWAYS(Railway Board) NOTIFICATION New Delhi, the 21st August, 2026|publisher=Government of India,Ministry of Railways|access-date=2 September 2026}}</ref> ಉಂದು ಕೊಂಕಣ ರೈಲ್ವೆ ಅಂಚನೆ ನೈಋತ್ಯ ರೈಲ್ವೆಗ್ ಸಂಪರ್ಕನ್ ಕೊರ್ಪುನ ಒಂಜಿ ಮುಕ್ಯವಾಯಿನ ರೈಲ್ವೇ ನಿಲ್ದಾಣ. ನಮ ದೇಸೊಡು ಇಪ್ಪುನ ಐನ್ ಸೆಂಟ್ರಲ್ ರೈಲ್ವೆ ಸ್ಟೇಷನ್‌ಲೆಡ್ ಕುಡ್ಲದ ರೈಲ್ವೇ ನಿಲ್ದಾಣಲಾ ಒಂಜಿ ಆದುಂಡು. ==ಇತಿಹಾಸೊ== ==ಸೇವೆಲು== == ಸಂಪರ್ಕೊ== 6bmhvld904refe3dj151evzdpht2t83 373903 373902 2026-10-28T07:21:31Z Mahaveer Indra 1023 /* ಸಂಪರ್ಕೊ */ 373903 wikitext text/x-wiki '''ಮಂಗಳೂರು ಸೆಂಟ್ರಲ್ ರೈಲ್ವೆ ನಿಲ್ದಾಣ''' (ಸ್ಟೇಷನ್ ಕೋಡ್: MAQ<ref name="stn_code">{{cite web |title=Station Code Index |url=https://indianrailways.gov.in/railwayboard/uploads/directorate/coaching/TAG_2023-24/Station_Code_Index.pdf |website=Portal of Indian Railways |publisher=Centre For Railway Information Systems |access-date=25 March 2024 |archive-url=https://web.archive.org/web/20240216225807/https://indianrailways.gov.in/railwayboard/uploads/directorate/coaching/TAG_2023-24/Station_Code_Index.pdf |archive-date=16 February 2024 |page=7 |date=2023–2024}}</ref>)) ನೈಋತ್ಯ ರೈಲ್ವೆ ವಲಯದ ಮೈಸೂರು ರೈಲ್ವೆ ವಿಭಾಗಡ್ ಇಪ್ಪುನ ಒಂಜಿ ರೈಲ್ವೆ ನಿಲ್ದಾಣ.<ref name="sr_stn">{{cite web |title=SOUTHERN RAILWAY LIST OF STATIONS AS ON 01.04.2023 (CATEGORY- WISE) |url=https://sr.indianrailways.gov.in/cris//uploads/files/1686913242750-SR%20-LIST%20OF%20STATIONS-2023.pdf |website=Portal of Indian Railways |publisher=Centre For Railway Information Systems |archive-url=https://web.archive.org/web/20240323095403/https://sr.indianrailways.gov.in/cris//uploads/files/1686913242750-SR%20-LIST%20OF%20STATIONS-2023.pdf |archive-date=23 March 2024 |page=2 |date=1 April 2023 |access-date=23 March 2024}}</ref> ಅಕ್ಟೋಬರ್ ೧, ೨೦೨೬ರ್ದ್ ಅನ್ವಯ ಆಪಿಲೆಕ ಉಂದೆನ್ ದಕ್ಷಿಣ ರೈಲ್ವೆ ವಲಯದ ಪಾಲಕ್ಕಾಡ್ ವಿಭಾಗೊರ್ದು ಮೈಸೂರು ವಿಭಾಗಗ್ ವರ್ಗಾವಣೆ ಮಲ್ತ್‌ದೆರ್.<ref>{{cite web|url=https://egazette.gov.in/(S(midxzkf4kp0yi1xrvxicvvxv))/ViewPDF.aspx|title= MINISTRY OF RAILWAYS(Railway Board) NOTIFICATION New Delhi, the 21st August, 2026|publisher=Government of India,Ministry of Railways|access-date=2 September 2026}}</ref> ಉಂದು ಕೊಂಕಣ ರೈಲ್ವೆ ಅಂಚನೆ ನೈಋತ್ಯ ರೈಲ್ವೆಗ್ ಸಂಪರ್ಕನ್ ಕೊರ್ಪುನ ಒಂಜಿ ಮುಕ್ಯವಾಯಿನ ರೈಲ್ವೇ ನಿಲ್ದಾಣ. ನಮ ದೇಸೊಡು ಇಪ್ಪುನ ಐನ್ ಸೆಂಟ್ರಲ್ ರೈಲ್ವೆ ಸ್ಟೇಷನ್‌ಲೆಡ್ ಕುಡ್ಲದ ರೈಲ್ವೇ ನಿಲ್ದಾಣಲಾ ಒಂಜಿ ಆದುಂಡು. ==ಇತಿಹಾಸೊ== ==ಸೇವೆಲು== == ಸಂಪರ್ಕೊ== ==ಉಲ್ಲೇಕ== {{reflist}} 39r2mqh946hah2jd7r2v3vl0je7mibo 373905 373903 2026-10-28T07:59:37Z Mahaveer Indra 1023 /* ಇತಿಹಾಸೊ */ 373905 wikitext text/x-wiki '''ಮಂಗಳೂರು ಸೆಂಟ್ರಲ್ ರೈಲ್ವೆ ನಿಲ್ದಾಣ''' (ಸ್ಟೇಷನ್ ಕೋಡ್: MAQ<ref name="stn_code">{{cite web |title=Station Code Index |url=https://indianrailways.gov.in/railwayboard/uploads/directorate/coaching/TAG_2023-24/Station_Code_Index.pdf |website=Portal of Indian Railways |publisher=Centre For Railway Information Systems |access-date=25 March 2024 |archive-url=https://web.archive.org/web/20240216225807/https://indianrailways.gov.in/railwayboard/uploads/directorate/coaching/TAG_2023-24/Station_Code_Index.pdf |archive-date=16 February 2024 |page=7 |date=2023–2024}}</ref>)) ನೈಋತ್ಯ ರೈಲ್ವೆ ವಲಯದ ಮೈಸೂರು ರೈಲ್ವೆ ವಿಭಾಗಡ್ ಇಪ್ಪುನ ಒಂಜಿ ರೈಲ್ವೆ ನಿಲ್ದಾಣ.<ref name="sr_stn">{{cite web |title=SOUTHERN RAILWAY LIST OF STATIONS AS ON 01.04.2023 (CATEGORY- WISE) |url=https://sr.indianrailways.gov.in/cris//uploads/files/1686913242750-SR%20-LIST%20OF%20STATIONS-2023.pdf |website=Portal of Indian Railways |publisher=Centre For Railway Information Systems |archive-url=https://web.archive.org/web/20240323095403/https://sr.indianrailways.gov.in/cris//uploads/files/1686913242750-SR%20-LIST%20OF%20STATIONS-2023.pdf |archive-date=23 March 2024 |page=2 |date=1 April 2023 |access-date=23 March 2024}}</ref> ಅಕ್ಟೋಬರ್ ೧, ೨೦೨೬ರ್ದ್ ಅನ್ವಯ ಆಪಿಲೆಕ ಉಂದೆನ್ ದಕ್ಷಿಣ ರೈಲ್ವೆ ವಲಯದ ಪಾಲಕ್ಕಾಡ್ ವಿಭಾಗೊರ್ದು ಮೈಸೂರು ವಿಭಾಗಗ್ ವರ್ಗಾವಣೆ ಮಲ್ತ್‌ದೆರ್.<ref>{{cite web|url=https://egazette.gov.in/(S(midxzkf4kp0yi1xrvxicvvxv))/ViewPDF.aspx|title= MINISTRY OF RAILWAYS(Railway Board) NOTIFICATION New Delhi, the 21st August, 2026|publisher=Government of India,Ministry of Railways|access-date=2 September 2026}}</ref> ಉಂದು ಕೊಂಕಣ ರೈಲ್ವೆ ಅಂಚನೆ ನೈಋತ್ಯ ರೈಲ್ವೆಗ್ ಸಂಪರ್ಕನ್ ಕೊರ್ಪುನ ಒಂಜಿ ಮುಕ್ಯವಾಯಿನ ರೈಲ್ವೇ ನಿಲ್ದಾಣ. ನಮ ದೇಸೊಡು ಇಪ್ಪುನ ಐನ್ ಸೆಂಟ್ರಲ್ ರೈಲ್ವೆ ಸ್ಟೇಷನ್‌ಲೆಡ್ ಕುಡ್ಲದ ರೈಲ್ವೇ ನಿಲ್ದಾಣಲಾ ಒಂಜಿ ಆದುಂಡು. ==ಇತಿಹಾಸೊ== ಮಂಗಳೂರು ರೈಲ್ವೆ ಸ್ಟೇಷನ್ ೧೯೦೭ಡ್ ಸುರುವಾಂಡ್. ಆಂಡ, ಅವ್ವೇ ವರ್ಷ ಸುರುತ ರೈಲು ಸೇವೆಲು ಸುರುವಾಂಡ್ ಪನ್ಪಿನೆಕ್ ವಾ ಸರಿಯಾಯಿನ ದಾಖಲೆಲು ಇಜ್ಜಿಂಡಲಾ, ನೇತ್ರಾವತಿ ತುದೆಕ್ ಪಾಡ್ದಿನ ರೈಲ್ವೆ ಸಂಕದ ಬಡಕಾಯಿದ ಕೊಡಿಟ್ ಇಪ್ಪುನ ಒಂಜಿ ಗಾರ್ಡ್‌ನ ಇಲ್ಲದ ಮಿತ್ತ್ ಇಪ್ಪುನ ಶಂಕುಸ್ಥಾಪನೆದ ಕಲ್ಲ್‌ಡ್ ಇಂಚ ಬರೆತೆರ್. ''ಕಡೆತ ರಿವೆಟ್ (ಮೊಳೆ) ನ್ ಪಾಡ್‌ದ್, ೪ನೇ ನವೆಂಬರ್ ೧೯೦೭ಡ್ ಮದ್ರಾಸ್‌ದ ಗವರ್ನರ್ ಎಚ್.ಇ. ಸರ್ ಆರ್ಥರ್ ಲಾಲಿ, KCMG, GCIE, ಈ ಸೇತುವೆ ಪೂರ್ತಿಯಾತ್ಂಡ್ ಪಂಡ್‌ದ್ ಅಧಿಕೃತವಾದ್ ಘೋಷಣೆ ಮಲ್ತೆರ್''. ಈ ಬರವುನು ತೂದು, ಕುಡ್ಲಗ್ ೧೯೦೭ನೇ ಇಸವಿಡ್ ಸುರುವಾಂಡ್ ಪಂಡ್‌ದ್ ತೀರ್ಮಾನ ಮಲ್ಪೊಲಿ. ನವೆಂಬರ್ ೪, ೧೯೦೭ಡ್ ಪೊಸತಾದ್ ಕಟ್ಟಿನ ನೇತ್ರಾವತಿ ಸೇತುವೆದ ಮಿತ್ತ್ ಬತ್ತಿನ ಸುರುತ ರೈಲು ಕೇರಳದ ಕಲ್ಲಿಕೋಟೆರ್ದ್ ಬತ್ತ್ಂಡ್ ಪಂಡ್‌ದ್ ಕೆಲವು ದಾಖಲೆಲು ಉಂಡು. ಆಂಡ ದಕ್ಷಿಣ ರೈಲ್ವೆದ ದಾಖಲೆಡ್ ಇತ್ತಿ ಪ್ರಕಾರ, ಈ ವಲಯಡ್ ಸುರು ಮಲ್ತಿನ ಸುರುತ ರೈಲು, ಪಂಡ 'ರೈಲು ನಂಬರ್-೧', ೧೯೧೪ಡ್ ದುಂಬುದ ಮದ್ರಾಸ್ ಬೊಕ್ಕ ಮಂಗಳೂರು ಬಂದರ್‌ದ ನಡುಟು ತನ್ನ ಸುರುತ ಪ್ರಯಾಣನ್ ಮಲ್ತ್ಂಡ್ ಪಂದ್ ತೆರಿಯುಂಡು. ಅಂಚ ಪನ್ಪುನಾಂಡ, ಈ ಬ್ರಾಡ್‌ಗೇಜ್ ರೈಲ್ವೆ ಮಾರ್ಗನ್ ಮುಖ್ಯವಾದ್ ಮಂಗಳೂರು ಮಣ್ಣ್‌ದ ಒಡಿಲ್‌ಲೆನ್ ಹಡಗ್‌ದ ಮುಖಾಂತರ ಪರದೇಸೊಗು ಕಡಪುಡ್ರ ಸಲಾದ್ ಮದ್ರಾಸ್ ಬಂದರ್‌ಗ್ ಕೊನೊಯೆರೆ ಉಂಡು ಮಲ್ತ್‌ದಿತ್ತೆರ್. ಅಂಚಾದ್, ಮದ್ರಾಸ್‌ಗ್ ಪೋಯಿನ ರೈಲು ನಂಬರ್ ೧, ಒಂಜಿ ವಾರದ ಬೊಕ್ಕ 'ರೈಲು ನಂಬರ್ ೨' ಆದ್ ಪಿರ ಬರೊಂದಿತ್ತ್ಂಡ್. ಕುಡ್ಲಡ್ದ್ ಪೋಯಿನ ರೈಲ್‌ಡ್, ಓಡುಲು ದಿಂಜಿದಿನ ೩ ಬೋಗಿಲು, ಪ್ರಯಾಣಿಕೆರ್ ಅಂಚನೆ ಅಂಚೆ ಚೀಲೊಲು ಇತ್ತಿನ ನಾಲನೇ ಬೋಗಿ ಇತ್ತ್ಂಡ್. ಅವ್ವೇ ರೈಲು ಇತ್ತೆದ ನಂಬರ್ ೬೦೦೧/೬೦೦೨ ಚೆನ್ನೈ ಸೆಂಟ್ರಲ್-ಮಂಗಳೂರು ಮೇಲ್ ಆತ್ಂಡ್. ಈ ಜಾಗೆಡ್ ಸುರು ಆಯಿನ ರೈಲು ಸೇವೆಲು ಈ ಪ್ರದೇಶದ ಇತಿಹಾಸಡ್ ಒಂಜಿ ಪೊಸ ಅಧ್ಯಾಯನ್ ಸುರು ಮಲ್ತ್ಂಡ್. ಅಂಚನೆ ಈ ಜಾಗೆದ ಎಡ್ಡೆ ಬುಲೆಚಿಲ್‌ಗ್ ಸಾದಿ ಮಲ್ತ್ ಕೊರ್ಂಡ್. ಆ ಪೊರ್ತುಡು ಮಂಗಳೂರು, ಬ್ರಿಟಿಷೆರೆನ ಆಡಳಿತದ ಅಡಿಟ್ ಮದ್ರಾಸ್ ಪ್ರಾಂತ್ಯಡ್ ಇತ್ತ್ಂಡ್. ಉಳ್ಳಾಲಡ್ ತಲಾ ೧೫೦ ಅಡಿ ಉದ್ದದ ೧೬ ಕಂಬೊಲೆನ್ ಗಲಸ್‌ದ್ ನೇತ್ರಾವತಿ ಸೇತುವೆ ಕಟ್ಟುನ ಬೇಲೆನ್ ಈ ಪೊರ್ತುಡೇ ಸುರು ಮಲ್ತೆರ್. ೧೯೩೦ನೇ ಇಸವಿಡ್, ಮಂಗಳೂರುನು ಪ್ರಾಯೋಗಿಕ ನಿಲ್ದಾಣೊರ್ದು ಕಾಯಂ ನಿಲ್ದಾಣವಾದ್ ಬದಲಾಯಿಸಾಯೆರ್. ===ದೇಸೊದ ಮಸ್ತ್ ಉದ್ದದ ರೈಲ್=== ೧೯೨೯ನೇ ಇಸವಿಡ್ ಗ್ರಾಂಡ್ ಟ್ರಂಕ್ ಎಕ್ಸ್‌ಪ್ರೆಸ್‌ ಪುದರ್‌ದ ರೈಲ್‌ನ್ ಸುರು ಮಲ್ತೆರ್. ಉಂದು ಮಂಗಳೂರುರ್ದು ಪಾಕಿಸ್ತಾನದ ಪೇಶಾವರಗ್ ಪೋವೊಂದಿತ್ತ್ಂಡ್. ಅಂದಾಜಿ ೧೦೪ ಗಂಟೆ ಇಂದೆಟ್ ಪೋವೊಡಿತ್ತ್ಂಡ್. ಆ ದಿನೊಟ್ಟು, ಉಂದು ದೇಶದ ಅತಿ ಉದ್ದದ ರೈಲು ಮಾರ್ಗ ಆದಿತ್ತ್ಂಡ್. ===ಸ್ವಾತಂತ್ರ್ಯಡ್ದ್ ಬೊಕ್ಕ=== ೧೯೭೧ಡ್ ಟಿ.ಎ. ಪೈಕುಲು ರೈಲ್ವೆ ಮಂತ್ರಿಯಾದಿತ್ತಿನ ಪೊರ್ತುಡು, ಮಂಗಳೂರುರ್ದು ದೆಹಲಿಗ್ ಸುರುತ ನೇರ ಸಂಪರ್ಕದ 'ರೈಲು ನಂಬರ್ ೧೩೧/೧೩೨ ಜಯಂತಿ ಜನತಾ ಎಕ್ಸ್‌ಪ್ರೆಸ್' ಮಂಗಳೂರು ರೈಲ್ವೆ ಸ್ಟೇಷನ್‌ರ್ದ್ ತನ್ನ ಪ್ರಯಾಣನ್ ಸುರು ಮಲ್ತ್ಂಡ್. ಕೊಂಕಣ ರೈಲ್ವೆ ಕಾರ್ಪೊರೇಷನ್ ಮಾತ್ರ ಅತ್ತಂದೆ, ಮಂಗಳೂರು-ಜಮ್ಮು ತಾವಿ ನವಯುಗ್ ಎಕ್ಸ್‌ಪ್ರೆಸ್‌ಲಾ ಜಾರ್ಜ್ ಫರ್ನಾಂಡಿಸ್ ಆರ್ ತನ್ನ ಊರಾಯಿನ ಮಂಗಳೂರುಗ್ ಕೊರಿನ ಒಂಜಿ ಉಡುಗೊರೆ ಆತ್ಂಡ್. ಪಶ್ಚಿಮ ಘಟ್ಟೊಲೆದ ಮುಖಾಂತರ ಕಟ್ಟಿನ ಒಂಜಿ ಮೀಟರ್-ಗೇಜ್ ರೈಲ್ವೆ ಮಾರ್ಗ ಮಂಗಳೂರುನು ಹಾಸನದ ಒಟ್ಟುಗು ಸೇರಾವೊಂದಿತ್ತ್ಂಡ್. ಹಾಸನದ ಮುಖಾಂತರ ಮಂಗಳೂರುನು ಬೆಂಗಳೂರುಗ್ ಸೇರಾವುನ ಈ ಮೀಟರ್-ಗೇಜ್ ಮಾರ್ಗನ್ ಬ್ರಾಡ್-ಗೇಜ್ ಮಾರ್ಗವಾದ್ ಬದಲಾಯಿಯೆರ್. ಈ ಬದಲಾಯಿನ (re-gauged) ಮಾರ್ಗನ್ ಮೇ ೨೦೦೬ಡ್ ಸರಕು ಸಾಗಾಟಗ್ ಬೊಕ್ಕ ಡಿಸೆಂಬರ್ ೨೦೦೭ಡ್ ಪ್ರಯಾಣಿಕೆರೆನ ಸಂಚಾರಗ್ ಸುರು ಮಲ್ತೆರ್. ಮಂಗಳೂರು ಜಾಗೆದ ರೈಲ್ವೆ ಮಾರ್ಗದ ಜಾಲ ಒಂಜಿ ತ್ರಿಕೋನ (triangular) ಆಕಾರಡ್ ಉಂಡು, ಬೊಕ್ಕ ಮಂಗಳೂರು ಸೆಂಟ್ರಲ್, ಮಂಗಳೂರು ಜಂಕ್ಷನ್ ಅಂಚನೆ ನೇತ್ರಾವತಿ ತುದೆತ ರೈಲ್ವೆ ಸೇತುವೆ ಈ ತ್ರಿಕೋನದ ಮೂಜಿ ಮೂಲೆಲಾದ್ ಉಂಡು. ಮಂಗಳೂರು ರೈಲ್ವೆ ಸ್ಟೇಷನ್‌ಡ್ ಇಪ್ಪುನ ಐತಿಹಾಸಿಕ ನಾಮಫಲಕ, ಮದ್ರಾಸ್‌ಗ್ (ಇತ್ತೆದ ಚೆನ್ನೈ) ಇಪ್ಪುನ ದೂರೊನು ತೋಜಾವುಂಡು. ಮಂಗಳೂರು ಸೆಂಟ್ರಲ್‌ರ್ದು ಒಂಜಿ ರೈಲ್ವೆ ಸೈಡಿಂಗ್ (ಮಾರ್ಗ) ಮಂಗಳೂರು ನಗರದ ಪೋರ್ಟ್ (ಬಂದರ್) ಜಾಗೆಡ್ ಇಪ್ಪುನ ಐತಿಹಾಸಿಕ ಪರತ್ತ್ ರೈಲ್ವೆ ಗೂಡ್ಸ್-ಶೆಡ್‌ಗ್ (ಸರಕು-ಕೊಟ್ಟಿಗೆಗ್) ಪೋಪುಂಡು. ==ಸೇವೆಲು== == ಸಂಪರ್ಕೊ== ==ಉಲ್ಲೇಕ== {{reflist}} 4g71an0fan4nl351njns1m463o2lbju 373906 373905 2026-10-28T08:00:46Z Mahaveer Indra 1023 /* ಸ್ವಾತಂತ್ರ್ಯಡ್ದ್ ಬೊಕ್ಕ */ 373906 wikitext text/x-wiki '''ಮಂಗಳೂರು ಸೆಂಟ್ರಲ್ ರೈಲ್ವೆ ನಿಲ್ದಾಣ''' (ಸ್ಟೇಷನ್ ಕೋಡ್: MAQ<ref name="stn_code">{{cite web |title=Station Code Index |url=https://indianrailways.gov.in/railwayboard/uploads/directorate/coaching/TAG_2023-24/Station_Code_Index.pdf |website=Portal of Indian Railways |publisher=Centre For Railway Information Systems |access-date=25 March 2024 |archive-url=https://web.archive.org/web/20240216225807/https://indianrailways.gov.in/railwayboard/uploads/directorate/coaching/TAG_2023-24/Station_Code_Index.pdf |archive-date=16 February 2024 |page=7 |date=2023–2024}}</ref>)) ನೈಋತ್ಯ ರೈಲ್ವೆ ವಲಯದ ಮೈಸೂರು ರೈಲ್ವೆ ವಿಭಾಗಡ್ ಇಪ್ಪುನ ಒಂಜಿ ರೈಲ್ವೆ ನಿಲ್ದಾಣ.<ref name="sr_stn">{{cite web |title=SOUTHERN RAILWAY LIST OF STATIONS AS ON 01.04.2023 (CATEGORY- WISE) |url=https://sr.indianrailways.gov.in/cris//uploads/files/1686913242750-SR%20-LIST%20OF%20STATIONS-2023.pdf |website=Portal of Indian Railways |publisher=Centre For Railway Information Systems |archive-url=https://web.archive.org/web/20240323095403/https://sr.indianrailways.gov.in/cris//uploads/files/1686913242750-SR%20-LIST%20OF%20STATIONS-2023.pdf |archive-date=23 March 2024 |page=2 |date=1 April 2023 |access-date=23 March 2024}}</ref> ಅಕ್ಟೋಬರ್ ೧, ೨೦೨೬ರ್ದ್ ಅನ್ವಯ ಆಪಿಲೆಕ ಉಂದೆನ್ ದಕ್ಷಿಣ ರೈಲ್ವೆ ವಲಯದ ಪಾಲಕ್ಕಾಡ್ ವಿಭಾಗೊರ್ದು ಮೈಸೂರು ವಿಭಾಗಗ್ ವರ್ಗಾವಣೆ ಮಲ್ತ್‌ದೆರ್.<ref>{{cite web|url=https://egazette.gov.in/(S(midxzkf4kp0yi1xrvxicvvxv))/ViewPDF.aspx|title= MINISTRY OF RAILWAYS(Railway Board) NOTIFICATION New Delhi, the 21st August, 2026|publisher=Government of India,Ministry of Railways|access-date=2 September 2026}}</ref> ಉಂದು ಕೊಂಕಣ ರೈಲ್ವೆ ಅಂಚನೆ ನೈಋತ್ಯ ರೈಲ್ವೆಗ್ ಸಂಪರ್ಕನ್ ಕೊರ್ಪುನ ಒಂಜಿ ಮುಕ್ಯವಾಯಿನ ರೈಲ್ವೇ ನಿಲ್ದಾಣ. ನಮ ದೇಸೊಡು ಇಪ್ಪುನ ಐನ್ ಸೆಂಟ್ರಲ್ ರೈಲ್ವೆ ಸ್ಟೇಷನ್‌ಲೆಡ್ ಕುಡ್ಲದ ರೈಲ್ವೇ ನಿಲ್ದಾಣಲಾ ಒಂಜಿ ಆದುಂಡು. ==ಇತಿಹಾಸೊ== ಮಂಗಳೂರು ರೈಲ್ವೆ ಸ್ಟೇಷನ್ ೧೯೦೭ಡ್ ಸುರುವಾಂಡ್. ಆಂಡ, ಅವ್ವೇ ವರ್ಷ ಸುರುತ ರೈಲು ಸೇವೆಲು ಸುರುವಾಂಡ್ ಪನ್ಪಿನೆಕ್ ವಾ ಸರಿಯಾಯಿನ ದಾಖಲೆಲು ಇಜ್ಜಿಂಡಲಾ, ನೇತ್ರಾವತಿ ತುದೆಕ್ ಪಾಡ್ದಿನ ರೈಲ್ವೆ ಸಂಕದ ಬಡಕಾಯಿದ ಕೊಡಿಟ್ ಇಪ್ಪುನ ಒಂಜಿ ಗಾರ್ಡ್‌ನ ಇಲ್ಲದ ಮಿತ್ತ್ ಇಪ್ಪುನ ಶಂಕುಸ್ಥಾಪನೆದ ಕಲ್ಲ್‌ಡ್ ಇಂಚ ಬರೆತೆರ್. ''ಕಡೆತ ರಿವೆಟ್ (ಮೊಳೆ) ನ್ ಪಾಡ್‌ದ್, ೪ನೇ ನವೆಂಬರ್ ೧೯೦೭ಡ್ ಮದ್ರಾಸ್‌ದ ಗವರ್ನರ್ ಎಚ್.ಇ. ಸರ್ ಆರ್ಥರ್ ಲಾಲಿ, KCMG, GCIE, ಈ ಸೇತುವೆ ಪೂರ್ತಿಯಾತ್ಂಡ್ ಪಂಡ್‌ದ್ ಅಧಿಕೃತವಾದ್ ಘೋಷಣೆ ಮಲ್ತೆರ್''. ಈ ಬರವುನು ತೂದು, ಕುಡ್ಲಗ್ ೧೯೦೭ನೇ ಇಸವಿಡ್ ಸುರುವಾಂಡ್ ಪಂಡ್‌ದ್ ತೀರ್ಮಾನ ಮಲ್ಪೊಲಿ. ನವೆಂಬರ್ ೪, ೧೯೦೭ಡ್ ಪೊಸತಾದ್ ಕಟ್ಟಿನ ನೇತ್ರಾವತಿ ಸೇತುವೆದ ಮಿತ್ತ್ ಬತ್ತಿನ ಸುರುತ ರೈಲು ಕೇರಳದ ಕಲ್ಲಿಕೋಟೆರ್ದ್ ಬತ್ತ್ಂಡ್ ಪಂಡ್‌ದ್ ಕೆಲವು ದಾಖಲೆಲು ಉಂಡು. ಆಂಡ ದಕ್ಷಿಣ ರೈಲ್ವೆದ ದಾಖಲೆಡ್ ಇತ್ತಿ ಪ್ರಕಾರ, ಈ ವಲಯಡ್ ಸುರು ಮಲ್ತಿನ ಸುರುತ ರೈಲು, ಪಂಡ 'ರೈಲು ನಂಬರ್-೧', ೧೯೧೪ಡ್ ದುಂಬುದ ಮದ್ರಾಸ್ ಬೊಕ್ಕ ಮಂಗಳೂರು ಬಂದರ್‌ದ ನಡುಟು ತನ್ನ ಸುರುತ ಪ್ರಯಾಣನ್ ಮಲ್ತ್ಂಡ್ ಪಂದ್ ತೆರಿಯುಂಡು. ಅಂಚ ಪನ್ಪುನಾಂಡ, ಈ ಬ್ರಾಡ್‌ಗೇಜ್ ರೈಲ್ವೆ ಮಾರ್ಗನ್ ಮುಖ್ಯವಾದ್ ಮಂಗಳೂರು ಮಣ್ಣ್‌ದ ಒಡಿಲ್‌ಲೆನ್ ಹಡಗ್‌ದ ಮುಖಾಂತರ ಪರದೇಸೊಗು ಕಡಪುಡ್ರ ಸಲಾದ್ ಮದ್ರಾಸ್ ಬಂದರ್‌ಗ್ ಕೊನೊಯೆರೆ ಉಂಡು ಮಲ್ತ್‌ದಿತ್ತೆರ್. ಅಂಚಾದ್, ಮದ್ರಾಸ್‌ಗ್ ಪೋಯಿನ ರೈಲು ನಂಬರ್ ೧, ಒಂಜಿ ವಾರದ ಬೊಕ್ಕ 'ರೈಲು ನಂಬರ್ ೨' ಆದ್ ಪಿರ ಬರೊಂದಿತ್ತ್ಂಡ್. ಕುಡ್ಲಡ್ದ್ ಪೋಯಿನ ರೈಲ್‌ಡ್, ಓಡುಲು ದಿಂಜಿದಿನ ೩ ಬೋಗಿಲು, ಪ್ರಯಾಣಿಕೆರ್ ಅಂಚನೆ ಅಂಚೆ ಚೀಲೊಲು ಇತ್ತಿನ ನಾಲನೇ ಬೋಗಿ ಇತ್ತ್ಂಡ್. ಅವ್ವೇ ರೈಲು ಇತ್ತೆದ ನಂಬರ್ ೬೦೦೧/೬೦೦೨ ಚೆನ್ನೈ ಸೆಂಟ್ರಲ್-ಮಂಗಳೂರು ಮೇಲ್ ಆತ್ಂಡ್. ಈ ಜಾಗೆಡ್ ಸುರು ಆಯಿನ ರೈಲು ಸೇವೆಲು ಈ ಪ್ರದೇಶದ ಇತಿಹಾಸಡ್ ಒಂಜಿ ಪೊಸ ಅಧ್ಯಾಯನ್ ಸುರು ಮಲ್ತ್ಂಡ್. ಅಂಚನೆ ಈ ಜಾಗೆದ ಎಡ್ಡೆ ಬುಲೆಚಿಲ್‌ಗ್ ಸಾದಿ ಮಲ್ತ್ ಕೊರ್ಂಡ್. ಆ ಪೊರ್ತುಡು ಮಂಗಳೂರು, ಬ್ರಿಟಿಷೆರೆನ ಆಡಳಿತದ ಅಡಿಟ್ ಮದ್ರಾಸ್ ಪ್ರಾಂತ್ಯಡ್ ಇತ್ತ್ಂಡ್. ಉಳ್ಳಾಲಡ್ ತಲಾ ೧೫೦ ಅಡಿ ಉದ್ದದ ೧೬ ಕಂಬೊಲೆನ್ ಗಲಸ್‌ದ್ ನೇತ್ರಾವತಿ ಸೇತುವೆ ಕಟ್ಟುನ ಬೇಲೆನ್ ಈ ಪೊರ್ತುಡೇ ಸುರು ಮಲ್ತೆರ್. ೧೯೩೦ನೇ ಇಸವಿಡ್, ಮಂಗಳೂರುನು ಪ್ರಾಯೋಗಿಕ ನಿಲ್ದಾಣೊರ್ದು ಕಾಯಂ ನಿಲ್ದಾಣವಾದ್ ಬದಲಾಯಿಸಾಯೆರ್. ===ದೇಸೊದ ಮಸ್ತ್ ಉದ್ದದ ರೈಲ್=== ೧೯೨೯ನೇ ಇಸವಿಡ್ ಗ್ರಾಂಡ್ ಟ್ರಂಕ್ ಎಕ್ಸ್‌ಪ್ರೆಸ್‌ ಪುದರ್‌ದ ರೈಲ್‌ನ್ ಸುರು ಮಲ್ತೆರ್. ಉಂದು ಮಂಗಳೂರುರ್ದು ಪಾಕಿಸ್ತಾನದ ಪೇಶಾವರಗ್ ಪೋವೊಂದಿತ್ತ್ಂಡ್. ಅಂದಾಜಿ ೧೦೪ ಗಂಟೆ ಇಂದೆಟ್ ಪೋವೊಡಿತ್ತ್ಂಡ್. ಆ ದಿನೊಟ್ಟು, ಉಂದು ದೇಶದ ಅತಿ ಉದ್ದದ ರೈಲು ಮಾರ್ಗ ಆದಿತ್ತ್ಂಡ್. ===ಸ್ವಾತಂತ್ರ್ಯಡ್ದ್ ಬೊಕ್ಕ=== ೧೯೭೧ಡ್ ಟಿ.ಎ. ಪೈಕುಲು ರೈಲ್ವೆ ಮಂತ್ರಿಯಾದಿತ್ತಿನ ಪೊರ್ತುಡು, ಮಂಗಳೂರುರ್ದು ದೆಹಲಿಗ್ ಸುರುತ ನೇರ ಸಂಪರ್ಕದ 'ರೈಲು ನಂಬರ್ ೧೩೧/೧೩೨ ಜಯಂತಿ ಜನತಾ ಎಕ್ಸ್‌ಪ್ರೆಸ್' ಮಂಗಳೂರು ರೈಲ್ವೆ ಸ್ಟೇಷನ್‌ರ್ದ್ ತನ್ನ ಪ್ರಯಾಣನ್ ಸುರು ಮಲ್ತ್ಂಡ್. ಕೊಂಕಣ ರೈಲ್ವೆ ಕಾರ್ಪೊರೇಷನ್ ಮಾತ್ರ ಅತ್ತಂದೆ, ಮಂಗಳೂರು-ಜಮ್ಮು ತಾವಿ ನವಯುಗ್ ಎಕ್ಸ್‌ಪ್ರೆಸ್‌ಲಾ ಜಾರ್ಜ್ ಫರ್ನಾಂಡಿಸ್ ಆರ್ ತನ್ನ ಊರಾಯಿನ ಮಂಗಳೂರುಗ್ ಕೊರಿನ ಒಂಜಿ ಉಡುಗೊರೆ ಆತ್ಂಡ್. ಪಶ್ಚಿಮ ಘಟ್ಟೊಲೆದ ಮುಖಾಂತರ ಕಟ್ಟಿನ ಒಂಜಿ ಮೀಟರ್-ಗೇಜ್ ರೈಲ್ವೆ ಮಾರ್ಗ ಮಂಗಳೂರುನು ಹಾಸನದ ಒಟ್ಟುಗು ಸೇರಾವೊಂದಿತ್ತ್ಂಡ್. ಹಾಸನದ ಮುಖಾಂತರ ಮಂಗಳೂರುನು ಬೆಂಗಳೂರುಗ್ ಸೇರಾವುನ ಈ ಮೀಟರ್-ಗೇಜ್ ಮಾರ್ಗನ್ ಬ್ರಾಡ್-ಗೇಜ್ ಮಾರ್ಗವಾದ್ ಬದಲಾಯಿಯೆರ್. ಈ ಬದಲಾಯಿನ ಮಾರ್ಗನ್ ಮೇ ೨೦೦೬ಡ್ ಸರಕು ಸಾಗಾಟಗ್ ಬೊಕ್ಕ ಡಿಸೆಂಬರ್ ೨೦೦೭ಡ್ ಪ್ರಯಾಣಿಕೆರೆನ ಸಂಚಾರಗ್ ಸುರು ಮಲ್ತೆರ್. ==ಸೇವೆಲು== == ಸಂಪರ್ಕೊ== ==ಉಲ್ಲೇಕ== {{reflist}} 0ut05t1ui3sic0wtwk7qm46u9l9zp9f ಪಾತೆರ:ಮಂಗಳೂರು ಸೆಂಟ್ರಲ್ ರೈಲ್ವೆ ನಿಲ್ದಾಣ 1 29122 373907 2026-10-28T08:18:17Z Mahaveer Indra 1023 https://fountain.toolforge.org/editathons/tlc-tcy 373907 wikitext text/x-wiki {{ವಿಕಿಯೋಜನೆ ತುಳುವೆರೆ ಬದ್‌ಕ್ ಬುಕ್ಕೊ ಸಾಂಸ್ಕೃತಿಕ ಪರಂಪರೆ}} 0tth3l3wvda31az37nu5uozjh7la6bv