Wikipedia
sowiki
https://so.wikipedia.org/wiki/Bogga_Hore
MediaWiki 1.47.0-wmf.24
first-letter
Media
Special
Talk
User
User talk
Wikipedia
Wikipedia talk
File
File talk
MediaWiki
MediaWiki talk
Template
Template talk
Help
Help talk
Category
Category talk
Portal
Portal talk
TimedText
TimedText talk
Module
Module talk
Event
Event talk
Garanuugle
0
7345
311175
295874
2026-10-25T21:32:57Z
Ahmedmihile024
48005
Garanuugle
311175
wikitext
text/x-wiki
'''Degmada Garanuugle''' waa magaalo kutaala kilinka shanaad ee ismaamulka [[Soomaali Galbeed]],gaar ahaan waxay ka tirsantahay degmada [[Gaashaamo|Gashaamo]] ee gobolka [[Dhagaxbuur]]. Garanuugle waxay kucaan tahay xoolaha nool gaar ahaan Geela,gamaanka,lo`da iyo adhiga .Magaaladu waxey xuduud la leedahay maamulka Somaliland ilaa 12km. waxayna lajaartahay degmada caanka ah ee [[Balidhiig]].Magaalada Garanuugle waa magaalada labaad ee ugu balaadhan marka laga yimaado degmada Gaashaamo .
== Halka ee ku Taalo Magaalada ==
Magaladan Garanuugle waxay ku taalaa barxad ilaahay ku manaystay dhul daaq simeed isugu jira banaan iyo ay jiq ah oo ay kunoolaan karaan dhamaan xolaaha kala duwan iyo ugaadha qaybaheeda kala duwan. Sida magacan aad ka dhandhansankartaan degaanka Garanuugle waxay caan kutahay ugaadha garanuugta oo ay caan ku ahaan jirtay boqolaal sano. Maagalaadan Garanuugle waxaa la aas aasay sanadku markuu ahaa 1965 halkaas uu ahaa qof kii ugu horeeyay ee maagaleeya Xaaji Ibraahin Kabadhe halkaas oo ka unkay haykalkii magaalo, oo kasameeyay maaqaaxi iyo dukaan iyo waliba isaga oo bilaabay qodista baraagtii u horeesay, waxii intaas ka danbeeyay maagaladu waxay noqotay maagalo aad u fiday oo noqotay meel lagu soo hirto.
== Waxyaabaha ee Leedahay Magaalada ==
Magaladan Garanuugle waxay kaga duwantahay magaaloyinka ka agdhaw iyadoo maamul dhamays tiran leh sida gudoomiye iyo qabalay ugaara. Waxay leedahay oo kale goobo waxbarasho iyo goobo caafimaad. Magaalada waxaa gudoomiye ka ah Cali Xaaji Ibrahim.
== Maamulka Magaalada ==
Magaalada Garanuugle waxa ay leedahay maamul dhisan oo ka kooban Labo iyo Toban oday. Waxa ka mid ah odayaasha magaalada Cali Maxamed Diiriye, Cali Baanday, oo adeer u ah Aqoonyahan Cabdiraxiim Axmed Maxamed, Ibrahim Kabadhe, Cabdi Baaquul, Cabdi Kurus, Hirsi Bidi, iyo kuwo kale.
Magaaladan ayaa caan ku noqotay nabadgelyada, iyo hufnaanta odayaasheeda.
[[Category:Magaalooyinka Soomaali Galbeed]]
[[Category:Itoobiya]]
epbxj91bcng8vh3vc2v2fbxusjs45eg
311176
311175
2026-10-25T21:34:31Z
Ahmedmihile024
48005
/* Maamulka Magaalada */ Garanuugle
311176
wikitext
text/x-wiki
'''Degmada Garanuugle''' waa magaalo kutaala kilinka shanaad ee ismaamulka [[Soomaali Galbeed]],gaar ahaan waxay ka tirsantahay degmada [[Gaashaamo|Gashaamo]] ee gobolka [[Dhagaxbuur]]. Garanuugle waxay kucaan tahay xoolaha nool gaar ahaan Geela,gamaanka,lo`da iyo adhiga .Magaaladu waxey xuduud la leedahay maamulka Somaliland ilaa 12km. waxayna lajaartahay degmada caanka ah ee [[Balidhiig]].Magaalada Garanuugle waa magaalada labaad ee ugu balaadhan marka laga yimaado degmada Gaashaamo .
== Halka ee ku Taalo Magaalada ==
Magaladan Garanuugle waxay ku taalaa barxad ilaahay ku manaystay dhul daaq simeed isugu jira banaan iyo ay jiq ah oo ay kunoolaan karaan dhamaan xolaaha kala duwan iyo ugaadha qaybaheeda kala duwan. Sida magacan aad ka dhandhansankartaan degaanka Garanuugle waxay caan kutahay ugaadha garanuugta oo ay caan ku ahaan jirtay boqolaal sano. Maagalaadan Garanuugle waxaa la aas aasay sanadku markuu ahaa 1965 halkaas uu ahaa qof kii ugu horeeyay ee maagaleeya Xaaji Ibraahin Kabadhe halkaas oo ka unkay haykalkii magaalo, oo kasameeyay maaqaaxi iyo dukaan iyo waliba isaga oo bilaabay qodista baraagtii u horeesay, waxii intaas ka danbeeyay maagaladu waxay noqotay maagalo aad u fiday oo noqotay meel lagu soo hirto.
== Waxyaabaha ee Leedahay Magaalada ==
Magaladan Garanuugle waxay kaga duwantahay magaaloyinka ka agdhaw iyadoo maamul dhamays tiran leh sida gudoomiye iyo qabalay ugaara. Waxay leedahay oo kale goobo waxbarasho iyo goobo caafimaad. Magaalada waxaa gudoomiye ka ah Cali Xaaji Ibrahim.
== Maamulka Magaalada ==
Magaalada Garanuugle waxa ay leedahay maamul dhisan oo ka kooban Labo iyo Toban oday.Waxaa Gudoomiye ka ah Degmada Garanuugle Siciid Xasan Timir Waxa ka mid ah odayaasha magaalada Cali Maxamed Diiriye, Cali Baanday, oo adeer u ah Aqoonyahan Cabdiraxiim Axmed Maxamed, Ibrahim Kabadhe, Cabdi Baaquul, Cabdi Kurus, Hirsi Bidi, iyo kuwo kale.
Magaaladan ayaa caan ku noqotay nabadgelyada, iyo hufnaanta odayaasheeda.
[[Category:Magaalooyinka Soomaali Galbeed]]
[[Category:Itoobiya]]
ib9jsw8ypkvtjegze8d5fyhr9898284
Template:Infobox
10
8618
311168
303793
2026-10-25T18:08:53Z
Isma4l
41797
/* */
311168
wikitext
text/x-wiki
{{#invoke:Infobox|infobox}}<includeonly>{{template other|{{#ifeq:{{PAGENAME}}|Infobox||{{#ifeq:{{str left|{{SUBPAGENAME}}|7}}|Infobox|[[Category:Infobox templates|{{remove first word|{{SUBPAGENAME}}}}]]}}}}|}}</includeonly><noinclude>
{{documentation}}
<!-- Categories go in the /doc subpage, and interwikis go in Wikidata. -->
</noinclude>
f4hgwrnr11ahhwyo266vcd10dpi92pe
Template:Ns has subpages
10
9900
311185
293225
2026-10-26T10:23:05Z
Isma4l
41797
/* */
311185
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#invoke:Ns has subpages|main}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
0pg457y46td6p53rdt8tyc76jeg9pa8
Module:Infobox
828
11111
311169
303789
2026-10-25T18:09:49Z
Isma4l
41797
311169
Scribunto
text/plain
local p = {}
local args = {}
local origArgs = {}
local root
local empty_row_categories = {}
local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]'
local has_rows = false
local yesno = require("Module:Yesno")
local lists = {
plainlist_t = {
patterns = {
'^plainlist$',
'%splainlist$',
'^plainlist%s',
'%splainlist%s'
},
found = false,
styles = 'Plainlist/styles.css'
},
hlist_t = {
patterns = {
'^hlist$',
'%shlist$',
'^hlist%s',
'%shlist%s'
},
found = false,
styles = 'Hlist/styles.css'
}
}
local function has_list_class(args_to_check)
for _, list in pairs(lists) do
if not list.found then
for _, arg in pairs(args_to_check) do
for _, pattern in ipairs(list.patterns) do
if mw.ustring.find(arg or '', pattern) then
list.found = true
break
end
end
if list.found then break end
end
end
end
end
local function isUntitledChildBox(sval)
return sval and ( sval:match( '^%s*<%s*[Tt][Rr]' ) or sval:match( '^%s*\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127%s*<%s*[Tt][Rr]' ) )
end
local function fixChildBoxes(sval, tt)
local function notempty( s ) return s and s:match( '%S' ) end
if notempty(sval) then
local marker = '<span class=special_infobox_marker>'
local s = sval
-- start moving templatestyles and categories inside of table rows
local slast = ''
while slast ~= s do
slast = s
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%])', '%2%1')
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)', '%2%1')
end
-- end moving templatestyles and categories inside of table rows
s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1')
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker)
if s:match(marker) then
s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '')
s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1')
s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1')
s = mw.ustring.gsub(s, '(</[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*>%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '(<%s*[Tt][Aa][Bb][Ll][Ee][^<>]*>%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, marker .. '(%s*</[Tt][Aa][Bb][Ll][Ee]%s*>)', '%1')
s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1')
end
if s:match(marker) then
local subcells = mw.text.split(s, marker)
s = ''
for k = 1, #subcells do
if k == 1 then
s = s .. subcells[k] .. '</' .. tt .. '></tr>'
elseif k == #subcells then
local rowstyle = ' style="display:none"'
if notempty(subcells[k]) then rowstyle = '' end
s = s .. '<tr' .. rowstyle ..'><' .. tt .. ' colspan=2>\n' ..
subcells[k]
elseif notempty(subcells[k]) then
if (k % 2) == 0 then
s = s .. subcells[k]
else
s = s .. '<tr><' .. tt .. ' colspan=2>\n' ..
subcells[k] .. '</' .. tt .. '></tr>'
end
end
end
end
-- the next two lines add a newline at the end of lists for the PHP parser
-- [[Special:Diff/849054481]]
-- remove when [[:phab:T191516]] is fixed or OBE
s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n')
s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n')
s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1')
s = mw.ustring.gsub(s, '^(%{%|)', '\n%1')
return s
else
return sval
end
end
-- Cleans empty tables
local function cleanInfobox()
root = tostring(root)
if has_rows == false then
root = mw.ustring.gsub(root, '<table[^<>]*>%s*</table>', '')
end
end
-- Returns the union of the values of two tables, as a sequence.
local function union(t1, t2)
local vals = {}
for k, v in pairs(t1) do
vals[v] = true
end
for k, v in pairs(t2) do
vals[v] = true
end
local ret = {}
for k, v in pairs(vals) do
table.insert(ret, k)
end
return ret
end
-- Returns a table containing the numbers of the arguments that exist
-- for the specified prefix. For example, if the prefix was 'data', and
-- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}.
local function getArgNums(prefix)
local nums = {}
for k, v in pairs(args) do
local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$')
if num then table.insert(nums, tonumber(num)) end
end
table.sort(nums)
return nums
end
-- Adds a row to the infobox, with either a header cell
-- or a label/data cell combination.
local function addRow(rowArgs)
if rowArgs.header and rowArgs.header ~= '_BLANK_' then
has_rows = true
has_list_class({ rowArgs.rowclass, rowArgs.class, args.headerclass })
root
:tag('tr')
:addClass(rowArgs.rowclass)
:addClass( isUntitledChildBox( rowArgs.header ) and 'infobox-hiddenrow' or nil )
:cssText(rowArgs.rowstyle)
:tag('th')
:attr('colspan', '2')
:addClass('infobox-header')
:addClass(rowArgs.class)
:addClass(args.headerclass)
-- @deprecated next; target .infobox-<name> .infobox-header
:cssText(args.headerstyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(fixChildBoxes(rowArgs.header, 'th'))
if rowArgs.data and not yesno(args.decat) then
root:wikitext(
'[[Category:Pages using infobox templates with ignored data cells]]'
)
end
elseif rowArgs.data and rowArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
has_rows = true
has_list_class({ rowArgs.rowclass, rowArgs.class })
local row = root:tag('tr')
row:addClass(rowArgs.rowclass)
row:cssText(rowArgs.rowstyle)
if rowArgs.label then
row
:tag('th')
:attr('scope', 'row')
:addClass('infobox-label')
-- @deprecated next; target .infobox-<name> .infobox-label
:cssText(args.labelstyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(rowArgs.label)
:done()
else
row:addClass( isUntitledChildBox( rowArgs.data ) and 'infobox-hiddenrow' or nil )
end
local dataCell = row:tag('td')
dataCell
:attr('colspan', not rowArgs.label and '2' or nil)
:addClass(not rowArgs.label and 'infobox-full-data' or 'infobox-data')
:addClass(rowArgs.class)
-- @deprecated next; target .infobox-<name> .infobox(-full)-data
:cssText(rowArgs.datastyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(fixChildBoxes(rowArgs.data, 'td'))
else
table.insert(empty_row_categories, rowArgs.data or '')
end
end
local function renderTitle()
if not args.title then return end
has_rows = true
has_list_class({args.titleclass})
root
:tag('caption')
:addClass('infobox-title')
:addClass(args.titleclass)
-- @deprecated next; target .infobox-<name> .infobox-title
:cssText(args.titlestyle)
:wikitext(args.title)
end
local function renderAboveRow()
if not args.above then return end
has_rows = true
has_list_class({ args.aboveclass })
root
:tag('tr')
:addClass( isUntitledChildBox( args.above ) and 'infobox-hiddenrow' or nil )
:tag('th')
:attr('colspan', '2')
:addClass('infobox-above')
:addClass(args.aboveclass)
-- @deprecated next; target .infobox-<name> .infobox-above
:cssText(args.abovestyle)
:wikitext(fixChildBoxes(args.above,'th'))
end
local function renderBelowRow()
if not args.below then return end
has_rows = true
has_list_class({ args.belowclass })
root
:tag('tr')
:addClass( isUntitledChildBox( args.below ) and 'infobox-hiddenrow' or nil )
:tag('td')
:attr('colspan', '2')
:addClass('infobox-below')
:addClass(args.belowclass)
-- @deprecated next; target .infobox-<name> .infobox-below
:cssText(args.belowstyle)
:wikitext(fixChildBoxes(args.below,'td'))
end
local function addSubheaderRow(subheaderArgs)
if subheaderArgs.data and
subheaderArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
has_rows = true
has_list_class({ subheaderArgs.rowclass, subheaderArgs.class })
local row = root:tag('tr')
row:addClass(subheaderArgs.rowclass)
row:addClass( isUntitledChildBox( subheaderArgs.data ) and 'infobox-hiddenrow' or nil )
local dataCell = row:tag('td')
dataCell
:attr('colspan', '2')
:addClass('infobox-subheader')
:addClass(subheaderArgs.class)
:cssText(subheaderArgs.datastyle)
:cssText(subheaderArgs.rowcellstyle)
:wikitext(fixChildBoxes(subheaderArgs.data, 'td'))
else
table.insert(empty_row_categories, subheaderArgs.data or '')
end
end
local function renderSubheaders()
if args.subheader then
args.subheader1 = args.subheader
end
if args.subheaderrowclass then
args.subheaderrowclass1 = args.subheaderrowclass
end
local subheadernums = getArgNums('subheader')
for k, num in ipairs(subheadernums) do
addSubheaderRow({
data = args['subheader' .. tostring(num)],
-- @deprecated next; target .infobox-<name> .infobox-subheader
datastyle = args.subheaderstyle,
rowcellstyle = args['subheaderstyle' .. tostring(num)],
class = args.subheaderclass,
rowclass = args['subheaderrowclass' .. tostring(num)]
})
end
end
local function addImageRow(imageArgs)
if imageArgs.data and
imageArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
has_rows = true
has_list_class({ imageArgs.rowclass, imageArgs.class })
local row = root:tag('tr')
row:addClass(imageArgs.rowclass)
row:addClass( isUntitledChildBox( imageArgs.data ) and 'infobox-hiddenrow' or nil )
local dataCell = row:tag('td')
dataCell
:attr('colspan', '2')
:addClass('infobox-image')
:addClass(imageArgs.class)
:cssText(imageArgs.datastyle)
:wikitext(fixChildBoxes(imageArgs.data, 'td'))
else
table.insert(empty_row_categories, imageArgs.data or '')
end
end
local function renderImages()
if args.image then
args.image1 = args.image
end
if args.caption then
args.caption1 = args.caption
end
local imagenums = getArgNums('image')
for k, num in ipairs(imagenums) do
local caption = args['caption' .. tostring(num)]
local data = mw.html.create():wikitext(args['image' .. tostring(num)])
if caption then
data
:tag('div')
:addClass('infobox-caption')
-- @deprecated next; target .infobox-<name> .infobox-caption
:cssText(args.captionstyle)
:wikitext(caption)
end
addImageRow({
data = tostring(data),
-- @deprecated next; target .infobox-<name> .infobox-image
datastyle = args.imagestyle,
class = args.imageclass,
rowclass = args['imagerowclass' .. tostring(num)]
})
end
end
-- When autoheaders are turned on, preprocesses the rows
local function preprocessRows()
if not args.autoheaders then return end
local rownums = union(getArgNums('header'), getArgNums('data'))
table.sort(rownums)
local lastheader
for k, num in ipairs(rownums) do
if args['header' .. tostring(num)] then
if lastheader then
args['header' .. tostring(lastheader)] = nil
end
lastheader = num
elseif args['data' .. tostring(num)] and
args['data' .. tostring(num)]:gsub(
category_in_empty_row_pattern, ''
):match('^%S') then
local data = args['data' .. tostring(num)]
if data:gsub(category_in_empty_row_pattern, ''):match('%S') then
lastheader = nil
end
end
end
if lastheader then
args['header' .. tostring(lastheader)] = nil
end
end
-- Gets the union of the header and data argument numbers,
-- and renders them all in order
local function renderRows()
local rownums = union(getArgNums('header'), getArgNums('data'))
table.sort(rownums)
for k, num in ipairs(rownums) do
addRow({
header = args['header' .. tostring(num)],
label = args['label' .. tostring(num)],
data = args['data' .. tostring(num)],
datastyle = args.datastyle,
class = args['class' .. tostring(num)],
rowclass = args['rowclass' .. tostring(num)],
-- @deprecated next; target .infobox-<name> rowclass
rowstyle = args['rowstyle' .. tostring(num)],
rowcellstyle = args['rowcellstyle' .. tostring(num)]
})
end
end
local function renderNavBar()
if not args.name then return end
has_rows = true
root
:tag('tr')
:tag('td')
:attr('colspan', '2')
:addClass('infobox-navbar')
:wikitext(require('Module:Navbar')._navbar{
args.name,
mini = 1,
})
end
local function renderItalicTitle()
local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title'])
if italicTitle == '' or italicTitle == 'force' or italicTitle == 'yes' then
root:wikitext(require('Module:Italic title')._main({}))
end
end
-- Categories in otherwise empty rows are collected in empty_row_categories.
-- This function adds them to the module output. It is not affected by
-- args.decat because this module should not prevent module-external categories
-- from rendering.
local function renderEmptyRowCategories()
for _, s in ipairs(empty_row_categories) do
root:wikitext(s)
end
end
-- Render tracking categories. args.decat == turns off tracking categories.
local function renderTrackingCategories()
if yesno(args.decat) then return end
if args.child == 'yes' then
if args.title then
root:wikitext(
'[[Category:Pages using embedded infobox templates with the title parameter]]'
)
end
elseif #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then
root:wikitext('[[Category:Articles using infobox templates with no data rows]]')
end
end
--[=[
Loads the templatestyles for the infobox.
TODO: FINISH loading base templatestyles here rather than in
MediaWiki:Common.css. There are 4-5000 pages with 'raw' infobox tables.
See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :).
When we do this we should clean up the inline CSS below too.
Will have to do some bizarre conversion category like with sidebar.
]=]
local function loadTemplateStyles()
local frame = mw.getCurrentFrame()
local hlist_templatestyles = ''
if lists.hlist_t.found then
hlist_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = lists.hlist_t.styles }
}
end
local plainlist_templatestyles = ''
if lists.plainlist_t.found then
plainlist_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = lists.plainlist_t.styles }
}
end
-- See function description
local base_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = 'Module:Infobox/styles.css' }
}
local templatestyles = ''
if args['templatestyles'] then
templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['templatestyles'] }
}
end
local child_templatestyles = ''
if args['child templatestyles'] then
child_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['child templatestyles'] }
}
end
local grandchild_templatestyles = ''
if args['grandchild templatestyles'] then
grandchild_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['grandchild templatestyles'] }
}
end
return table.concat({
-- hlist -> plainlist -> base is best-effort to preserve old Common.css ordering.
-- this ordering is not a guarantee because the rows of interest invoking
-- each class may not be on a specific page
hlist_templatestyles,
plainlist_templatestyles,
base_templatestyles,
templatestyles,
child_templatestyles,
grandchild_templatestyles
})
end
-- common functions between the child and non child cases
local function structure_infobox_common()
renderSubheaders()
renderImages()
preprocessRows()
renderRows()
renderBelowRow()
renderNavBar()
renderItalicTitle()
renderEmptyRowCategories()
renderTrackingCategories()
cleanInfobox()
end
-- Specify the overall layout of the infobox, with special settings if the
-- infobox is used as a 'child' inside another infobox.
local function _infobox()
if args.child ~= 'yes' then
root = mw.html.create('table')
root
:addClass(args.subbox == 'yes' and 'infobox-subbox' or 'infobox')
:addClass(args.bodyclass)
-- @deprecated next; target .infobox-<name>
:cssText(args.bodystyle)
has_list_class({ args.bodyclass })
renderTitle()
renderAboveRow()
else
root = mw.html.create()
root
:wikitext(args.title)
end
structure_infobox_common()
return loadTemplateStyles() .. root
end
-- If the argument exists and isn't blank, add it to the argument table.
-- Blank arguments are treated as nil to match the behaviour of ParserFunctions.
local function preprocessSingleArg(argName)
if origArgs[argName] and origArgs[argName] ~= '' then
args[argName] = origArgs[argName]
end
end
-- Assign the parameters with the given prefixes to the args table, in order, in
-- batches of the step size specified. This is to prevent references etc. from
-- appearing in the wrong order. The prefixTable should be an array containing
-- tables, each of which has two possible fields, a "prefix" string and a
-- "depend" table. The function always parses parameters containing the "prefix"
-- string, but only parses parameters in the "depend" table if the prefix
-- parameter is present and non-blank.
local function preprocessArgs(prefixTable, step)
if type(prefixTable) ~= 'table' then
error("Non-table value detected for the prefix table", 2)
end
if type(step) ~= 'number' then
error("Invalid step value detected", 2)
end
-- Get arguments without a number suffix, and check for bad input.
for i,v in ipairs(prefixTable) do
if type(v) ~= 'table' or type(v.prefix) ~= "string" or
(v.depend and type(v.depend) ~= 'table') then
error('Invalid input detected to preprocessArgs prefix table', 2)
end
preprocessSingleArg(v.prefix)
-- Only parse the depend parameter if the prefix parameter is present
-- and not blank.
if args[v.prefix] and v.depend then
for j, dependValue in ipairs(v.depend) do
if type(dependValue) ~= 'string' then
error('Invalid "depend" parameter value detected in preprocessArgs')
end
preprocessSingleArg(dependValue)
end
end
end
-- Get arguments with number suffixes.
local a = 1 -- Counter variable.
local moreArgumentsExist = true
while moreArgumentsExist == true do
moreArgumentsExist = false
for i = a, a + step - 1 do
for j,v in ipairs(prefixTable) do
local prefixArgName = v.prefix .. tostring(i)
if origArgs[prefixArgName] then
-- Do another loop if any arguments are found, even blank ones.
moreArgumentsExist = true
preprocessSingleArg(prefixArgName)
end
-- Process the depend table if the prefix argument is present
-- and not blank, or we are processing "prefix1" and "prefix" is
-- present and not blank, and if the depend table is present.
if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then
for j,dependValue in ipairs(v.depend) do
local dependArgName = dependValue .. tostring(i)
preprocessSingleArg(dependArgName)
end
end
end
end
a = a + step
end
end
-- Parse the data parameters in the same order that the old {{infobox}} did, so
-- that references etc. will display in the expected places. Parameters that
-- depend on another parameter are only processed if that parameter is present,
-- to avoid phantom references appearing in article reference lists.
local function parseDataParameters()
preprocessSingleArg('autoheaders')
preprocessSingleArg('child')
preprocessSingleArg('bodyclass')
preprocessSingleArg('subbox')
preprocessSingleArg('bodystyle')
preprocessSingleArg('title')
preprocessSingleArg('titleclass')
preprocessSingleArg('titlestyle')
preprocessSingleArg('above')
preprocessSingleArg('aboveclass')
preprocessSingleArg('abovestyle')
preprocessArgs({
{prefix = 'subheader', depend = {'subheaderstyle', 'subheaderrowclass'}}
}, 10)
preprocessSingleArg('subheaderstyle')
preprocessSingleArg('subheaderclass')
preprocessArgs({
{prefix = 'image', depend = {'caption', 'imagerowclass'}}
}, 10)
preprocessSingleArg('captionstyle')
preprocessSingleArg('imagestyle')
preprocessSingleArg('imageclass')
preprocessArgs({
{prefix = 'header'},
{prefix = 'data', depend = {'label'}},
{prefix = 'rowclass'},
{prefix = 'rowstyle'},
{prefix = 'rowcellstyle'},
{prefix = 'class'}
}, 50)
preprocessSingleArg('headerclass')
preprocessSingleArg('headerstyle')
preprocessSingleArg('labelstyle')
preprocessSingleArg('datastyle')
preprocessSingleArg('below')
preprocessSingleArg('belowclass')
preprocessSingleArg('belowstyle')
preprocessSingleArg('name')
-- different behaviour for italics if blank or absent
args['italic title'] = origArgs['italic title']
preprocessSingleArg('decat')
preprocessSingleArg('templatestyles')
preprocessSingleArg('child templatestyles')
preprocessSingleArg('grandchild templatestyles')
end
-- If called via #invoke, use the args passed into the invoking template.
-- Otherwise, for testing purposes, assume args are being passed directly in.
function p.infobox(frame)
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().args
else
origArgs = frame
end
parseDataParameters()
return _infobox()
end
-- For calling via #invoke within a template
function p.infoboxTemplate(frame)
origArgs = {}
for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end
parseDataParameters()
return _infobox()
end
return p
kueb5p6xeoq6x7bxu2zyyl7pmxgesrs
Template:Longitem
10
11310
311194
205569
2026-10-26T10:40:57Z
Isma4l
41797
311194
wikitext
text/x-wiki
<noinclude>{{#tag: code|
</noinclude>{{#ifeq: {{{1|+}}} | {{{1|-}}} | <div style="}}display: inline-block; line-height: 1.2em; padding: .1em 0; {{#ifeq: {{{1|+}}} | {{{1|-}}} | {{{style|}}}">{{{1|}}}</div> | <includeonly>width: 100%;</includeonly> }}<includeonly>{{#if:{{{2|}}}|[[Category:Pages using Template:Longitem with unnamed style parameter]]}}</includeonly><noinclude>
|lang=wikitext}}
{{documentation}}
</noinclude>
4su34d6iyeitkxv5kq4ju2g5b16lqss
Template:Dmbox
10
14456
311189
126999
2026-10-26T10:30:01Z
Isma4l
41797
311189
wikitext
text/x-wiki
<templatestyles src="Dmbox/styles.css" />
<div role="note" id="{{#switch:{{{type|}}}
| setindex = setindexbox
| disambig
| #default = disambigbox
}}" class="metadata plainlinks dmbox {{#switch:{{{type|}}}
| setindex = dmbox-setindex
| disambig
| #default = dmbox-disambig
}} {{{class|}}}">{{#ifeq:{{{image|}}}|none|
| {{#if:{{{image|}}}
| <div>{{{image}}}</div>
| [[File:{{#switch:{{{type|}}}
| setindex = DAB list gray.svg
| disambig <!-- disambig = default -->
| #default = Disambig gray.svg
}}|30px|alt=Disambiguation icon]]
}}
}}<div class="dmbox-body">{{{text}}}</div>{{#if:{{{imageright|}}}|<div>{{{imageright}}}</div>}}
</div><!--
Detect and report usage with faulty "type" parameter:
-->{{#switch:{{{type|}}}
| <!-- No type fed, is also valid input -->
| disambig
| setindex = <!-- Do nothing, valid "type" -->
| #default = <div class="dmbox-invalid-type">This message box is using an invalid "type={{{type|}}}" parameter and needs fixing.</div>[[Category:Wikipedia message box parameter needs fixing|{{main other|Main:}}{{FULLPAGENAME}}]]<!-- Sort on namespace -->
}}<!--
Magic word for disambiguation pages:
-->{{#if:{{{nocat|}}}||{{#ifeq:{{{type|}}}|disambig|__DISAMBIG__|}}}}<!--
Categorization:
-->{{#switch:{{{type|}}}
| setindex =
{{category handler
| main = [[Category:All set index articles]]
| nocat = {{{nocat|}}} <!--So "nocat=true" works-->
| page = {{{page|}}} <!--For testing-->
}}
| disambig <!-- disambig = default -->
| #default =
{{category handler
| main = [[Category:All article disambiguation pages]][[Category:All disambiguation pages]]
| template = <!-- Don't categorize on template pages. -->
| other = [[Category:All disambiguation pages]]
| nocat = {{{nocat|}}} <!--So "nocat=true" works-->
| page = {{{page|}}} <!--For testing-->
}}
}}<includeonly>__EXPECTSHORTPAGE__<!--To prevent pages from appearing on Special:ShortPages. See Tech News 2026-34. --></includeonly><noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! -->
</noinclude>
n4l2ktd8lhc541j6kszrest9p94mr6u
Module:Check for unknown parameters
828
18441
311182
288670
2026-10-26T10:20:28Z
Isma4l
41797
311182
Scribunto
text/plain
-- This module may be used to compare the arguments passed to the parent
-- with a list of arguments, returning a specified result if an argument is
-- not on the list
require ('strict');
local p = {}
local pushpin_map_params = {
'coordinates',
'pushpin_caption',
'pushpin_relief',
'pushpin_label',
'pushpin_label_position',
'pushpin_label_size',
'pushpin_map',
'pushpin_mark',
'pushpin_mark_size',
'pushpin_alt',
'pushpin_background',
'pushpin_map_size'
}
local mapframe_params = {
'coordinates',
'id',
'qid',
'mapframe',
'mapframe-area_km2',
'mapframe-area_mi2',
'mapframe-caption',
'mapframe-coord',
'mapframe-coordinates',
'mapframe-custom',
'mapframe-frame-coord',
'mapframe-frame-coordinates',
'mapframe-frame-height',
'mapframe-frame-width',
'mapframe-geomask',
'mapframe-geomask-fill',
'mapframe-geomask-fill-opacity',
'mapframe-geomask-stroke-color',
'mapframe-geomask-stroke-colour',
'mapframe-geomask-stroke-width',
'mapframe-height',
'mapframe-id',
'mapframe-length_km',
'mapframe-length_mi',
'mapframe-line',
'mapframe-line-stroke-color',
'mapframe-line-stroke-colour',
'mapframe-marker',
'mapframe-marker-color',
'mapframe-marker-colour',
'mapframe-point',
'mapframe-population',
'mapframe-shape',
'mapframe-shape-fill',
'mapframe-shape-fill-opacity',
'mapframe-shape-stroke-color',
'mapframe-shape-stroke-colour',
'mapframe-stroke-color',
'mapframe-stroke-colour',
'mapframe-stroke-width',
'mapframe-switcher',
'mapframe-type',
'mapframe-width',
'mapframe-wikidata',
'mapframe-zoom'
}
local function trim(s)
return s:match('^%s*(.-)%s*$')
end
local function isnotempty(s)
return s and s:match('%S')
end
local function clean(text)
-- Return text cleaned for display and truncated if too long.
-- Strip markers are replaced with dummy text representing the original wikitext.
local pos, truncated
local function truncate(text)
if truncated then
return ''
end
if mw.ustring.len(text) > 25 then
truncated = true
text = mw.ustring.sub(text, 1, 25) .. '...'
end
return mw.text.nowiki(text)
end
local parts = {}
for before, tag, remainder in text:gmatch('([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()') do
pos = remainder
table.insert(parts, truncate(before) .. '<' .. tag .. '>...</' .. tag .. '>')
end
table.insert(parts, truncate(text:sub(pos or 1)))
return table.concat(parts)
end
function p._check(args, pargs)
if type(args) ~= "table" or type(pargs) ~= "table" then
-- TODO: error handling
return
end
-- create the list of known args, regular expressions, and the return string
local knownargs = {}
if isnotempty(args['mapframe_args']) then
for _, v in ipairs(mapframe_params) do
knownargs[v] = 1
end
end
if isnotempty(args['pushpin_map_args']) then
for _, v in ipairs(pushpin_map_params) do
knownargs[v] = 1
end
end
local regexps = {}
for k, v in pairs(args) do
if type(k) == 'number' then
v = trim(v)
knownargs[v] = 1
elseif k:find('^regexp[1-9][0-9]*$') then
table.insert(regexps, '^' .. v .. '$')
end
end
-- loop over the parent args, and make sure they are on the list
local ignoreblank = isnotempty(args['ignoreblank'])
local showblankpos = isnotempty(args['showblankpositional'])
local values = {}
for k, v in pairs(pargs) do
if type(k) == 'string' and knownargs[k] == nil then
local knownflag = false
for _, regexp in ipairs(regexps) do
if mw.ustring.match(k, regexp) then
knownflag = true
break
end
end
if not knownflag and ( not ignoreblank or isnotempty(v) ) then
table.insert(values, clean(k))
end
elseif type(k) == 'number' and knownargs[tostring(k)] == nil then
local knownflag = false
for _, regexp in ipairs(regexps) do
if mw.ustring.match(tostring(k), regexp) then
knownflag = true
break
end
end
if not knownflag and ( showblankpos or isnotempty(v) ) then
table.insert(values, k .. ' = ' .. clean(v))
end
end
end
-- add results to the output tables
local res = {}
if #values > 0 then
local unknown_text = args['unknown'] or 'Found _VALUE_, '
if mw.getCurrentFrame():preprocess( "{{REVISIONID}}" ) == "" then
local preview_text = args['preview']
if isnotempty(preview_text) then
preview_text = require('Module:If preview')._warning({preview_text})
elseif preview_text == nil then
preview_text = unknown_text
end
unknown_text = preview_text
end
for _, v in pairs(values) do
-- Fix odd bug for | = which gets stripped to the empty string and
-- breaks category links
if v == '' then v = ' ' end
-- avoid error with v = 'example%2' ("invalid capture index")
local r = unknown_text:gsub('_VALUE_', {_VALUE_ = v})
table.insert(res, r)
end
end
return table.concat(res)
end
function p.check(frame)
local args = frame.args
local pargs = frame:getParent().args
return p._check(args, pargs)
end
return p
pn8nxt3tzckni7xgmqn4wy1q5b5c05s
Module:Sidebar
828
21015
311192
288441
2026-10-26T10:35:46Z
Isma4l
41797
311192
Scribunto
text/plain
require('strict')
local cfg = mw.loadData('Module:Sidebar/configuration')
local p = {}
local getArgs = require('Module:Arguments').getArgs
--[[
Categorizes calling templates and modules with a 'style' parameter of any sort
for tracking to convert to TemplateStyles.
TODO after a long cleanup: Catch sidebars in other namespaces than Template and Module.
TODO would probably want to remove /log and /archive as CS1 does
]]
local function categorizeTemplatesWithInlineStyles(args)
local title = mw.title.getCurrentTitle()
if title.namespace ~= 10 and title.namespace ~= 828 then return '' end
for _, pattern in ipairs (cfg.i18n.pattern.uncategorized_conversion_titles) do
if title.text:match(pattern) then return '' end
end
for key, _ in pairs(args) do
if mw.ustring.find(key, cfg.i18n.pattern.style_conversion) or key == 'width' then
return cfg.i18n.category.conversion
end
end
end
--[[
For compatibility with the original {{sidebar with collapsible lists}}
implementation, which passed some parameters through {{#if}} to trim their
whitespace. This also triggered the automatic newline behavior.
]]
-- See ([[meta:Help:Newlines and spaces#Automatic newline]])
local function trimAndAddAutomaticNewline(s)
s = mw.ustring.gsub(s, "^%s*(.-)%s*$", "%1")
if mw.ustring.find(s, '^[#*:;]') or mw.ustring.find(s, '^{|') then
return '\n' .. s
else
return s
end
end
--[[
Finds whether a sidebar has a subgroup sidebar.
]]
local function detectChild(s)
if mw.ustring.find(s, cfg.i18n.pattern.subgroup) then
return true
else
return false
end
end
local function has_navbar(navbar_mode, sidebar_name)
return navbar_mode ~= cfg.i18n.navbar_none and
navbar_mode ~= cfg.i18n.navbar_off and
(
sidebar_name or
mw.getCurrentFrame():getParent():getTitle():gsub(cfg.i18n.pattern.sandbox, '') ~=
cfg.i18n.title_not_to_add_navbar
)
end
local function has_list_class(args, htmlclass)
local patterns = {
'^' .. htmlclass .. '$',
'%s' .. htmlclass .. '$',
'^' .. htmlclass .. '%s',
'%s' .. htmlclass .. '%s'
}
for arg, value in pairs(args) do
if type(arg) == 'string' and mw.ustring.find(arg, 'class') then
for _, pattern in ipairs(patterns) do
if mw.ustring.find(args[arg] or '', pattern) then
return true
end
end
end
end
return false
end
-- there are a lot of list classes in the wild, so we add their TemplateStyles
local function add_list_styles(args)
local frame = mw.getCurrentFrame()
local function add_list_templatestyles(htmlclass, templatestyles)
if has_list_class(args, htmlclass) then
return frame:extensionTag{
name = 'templatestyles', args = { src = templatestyles }
}
else
return ''
end
end
local plainlist_styles = add_list_templatestyles('plainlist', cfg.i18n.templatestyles.plainlist)
local hlist_styles = add_list_templatestyles('hlist', cfg.i18n.templatestyles.hlist)
-- a second workaround for [[phab:T303378]]
-- when that issue is fixed, we can actually use has_navbar not to emit the
-- tag here if we want
if has_navbar(args.navbar, args.name) and hlist_styles == '' then
hlist_styles = frame:extensionTag{
name = 'templatestyles', args = { src = cfg.i18n.templatestyles.hlist}
}
end
-- hlist -> plainlist is best-effort to preserve old Common.css ordering. [hlist_note]
return hlist_styles .. plainlist_styles
end
-- work around [[phab:T303378]]
-- for each arg: find all the templatestyles strip markers, insert them into a
-- table. then remove all templatestyles markers from the arg
local function move_hiding_templatestyles(args)
local gmatch = string.gmatch
local gsub = string.gsub
local templatestyles_markers = {}
local strip_marker_pattern = '(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)'
for k, arg in pairs(args) do
for marker in gmatch(arg, strip_marker_pattern) do
table.insert(templatestyles_markers, marker)
end
args[k] = gsub(arg, strip_marker_pattern, '')
end
return templatestyles_markers
end
--[[
Main sidebar function. Takes the frame, args, and an optional collapsibleClass.
The collapsibleClass is and should be used only for sidebars with collapsible
lists, as in p.collapsible.
]]
function p.sidebar(frame, args, collapsibleClass)
if not args then
args = getArgs(frame)
end
local hiding_templatestyles = table.concat(move_hiding_templatestyles(args))
local root = mw.html.create()
local child = args.child and mw.text.trim(args.child) == cfg.i18n.child_yes
root = root:tag('table')
if not child then
root
:addClass(cfg.i18n.class.sidebar)
-- force collapsibleClass to be sidebar-collapse otherwise output nothing
:addClass(collapsibleClass == cfg.i18n.class.collapse and cfg.i18n.class.collapse or nil)
:addClass('nomobile')
:addClass(args.float == cfg.i18n.float_none and cfg.i18n.class.float_none or nil)
:addClass(args.float == cfg.i18n.float_left and cfg.i18n.class.float_left or nil)
:addClass(args.wraplinks ~= cfg.i18n.wrap_true and cfg.i18n.class.wraplinks or nil)
:addClass(args.bodyclass or args.class)
:attr('role', 'navigation')
:css('width', args.width or nil)
:cssText(args.bodystyle or args.style)
if args.outertitle then
root
:tag('caption')
:addClass(cfg.i18n.class.outer_title)
:addClass(args.outertitleclass)
:cssText(args.outertitlestyle)
:wikitext(args.outertitle)
end
if args.topimage then
local imageCell = root:tag('tr'):tag('td')
imageCell
:addClass(cfg.i18n.class.top_image)
:addClass(args.topimageclass)
:cssText(args.topimagestyle)
:wikitext(args.topimage)
if args.topcaption then
imageCell
:tag('div')
:addClass(cfg.i18n.class.top_caption)
:cssText(args.topcaptionstyle)
:wikitext(args.topcaption)
end
end
if args.pretitle then
root
:tag('tr')
:tag('td')
:addClass(args.topimage and cfg.i18n.class.pretitle_with_top_image
or cfg.i18n.class.pretitle)
:addClass(args.pretitleclass)
:cssText(args.basestyle)
:cssText(args.pretitlestyle)
:wikitext(args.pretitle)
end
else
root
:addClass(cfg.i18n.class.subgroup)
:addClass(args.bodyclass or args.class)
:cssText(args.bodystyle or args.style)
end
if args.title then
if child then
root
:wikitext(args.title)
else
root
:tag('tr')
:tag('th')
:addClass(args.pretitle and cfg.i18n.class.title_with_pretitle
or cfg.i18n.class.title)
:addClass(args.titleclass)
:cssText(args.basestyle)
:cssText(args.titlestyle)
:wikitext(args.title)
end
end
if args.image then
local imageCell = root:tag('tr'):tag('td')
imageCell
:addClass(cfg.i18n.class.image)
:addClass(args.imageclass)
:cssText(args.imagestyle)
:wikitext(args.image)
if args.caption then
imageCell
:tag('div')
:addClass(cfg.i18n.class.caption)
:cssText(args.captionstyle)
:wikitext(args.caption)
end
end
if args.above then
root
:tag('tr')
:tag('td')
:addClass(cfg.i18n.class.above)
:addClass(args.aboveclass)
:cssText(args.abovestyle)
:newline() -- newline required for bullet-points to work
:wikitext(args.above)
end
local rowNums = {}
for k, v in pairs(args) do
k = '' .. k
local num = k:match('^heading(%d+)$') or k:match('^content(%d+)$')
if num then table.insert(rowNums, tonumber(num)) end
end
table.sort(rowNums)
-- remove duplicates from the list (e.g. 3 will be duplicated if both heading3
-- and content3 are specified)
for i = #rowNums, 1, -1 do
if rowNums[i] == rowNums[i - 1] then
table.remove(rowNums, i)
end
end
local hasChild = false
for i, num in ipairs(rowNums) do
local heading = args['heading' .. num]
if heading then
root
:tag('tr')
:tag('th')
:addClass(cfg.i18n.class.heading)
:addClass(args.headingclass)
:addClass(args['heading' .. num .. 'class'])
:cssText(args.basestyle)
:cssText(args.headingstyle)
:cssText(args['heading' .. num .. 'style'])
:newline()
:wikitext(heading)
end
local content = args['content' .. num]
if content then
local baseContentClass = cfg.i18n.class.content
if detectChild(content) then
baseContentClass = cfg.i18n.class.content_with_subgroup
hasChild = true
end
root
:tag('tr')
:tag('td')
:addClass(baseContentClass)
:addClass(args.contentclass)
:addClass(args['content' .. num .. 'class'])
:cssText(args.contentstyle)
:cssText(args['content' .. num .. 'style'])
:newline()
:wikitext(content)
:done()
-- Without a linebreak after the </td>, a nested list like
-- "* {{hlist| ...}}" doesn't parse correctly.
:newline()
end
end
if args.below then
root
:tag('tr')
:tag('td')
:addClass(cfg.i18n.class.below)
:addClass(args.belowclass)
:cssText(args.belowstyle)
:newline()
:wikitext(args.below)
end
if not child and has_navbar(args.navbar, args.name) then
root
:tag('tr')
:tag('td')
:addClass(cfg.i18n.class.navbar)
:cssText(args.navbarstyle)
:wikitext(require('Module:Navbar')._navbar{
args.name,
mini = 1,
fontstyle = args.navbarfontstyle
})
end
local base_templatestyles = ''
if not child then
base_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = cfg.i18n.templatestyles.sidebar }
}
end
local templatestyles = ''
if args['templatestyles'] and args['templatestyles'] ~= '' then
templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['templatestyles'] }
}
end
local child_templatestyles = ''
if args['child templatestyles'] and args['child templatestyles'] ~= '' then
child_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['child templatestyles'] }
}
end
local grandchild_templatestyles = ''
if args['grandchild templatestyles'] and args['grandchild templatestyles'] ~= '' then
grandchild_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['grandchild templatestyles'] }
}
end
return table.concat({
add_list_styles(args), -- see [hlist_note] above about ordering
base_templatestyles,
templatestyles,
child_templatestyles,
grandchild_templatestyles,
hiding_templatestyles,
tostring(root),
(hasChild and cfg.i18n.category.child or ''),
categorizeTemplatesWithInlineStyles(args)
})
end
local function list_title(args, is_centered_list_titles, num)
local title_text = trimAndAddAutomaticNewline(args['list' .. num .. 'title']
or cfg.i18n.default_list_title)
local title
if is_centered_list_titles then
-- collapsible can be finicky, so provide some CSS/HTML to support
title = mw.html.create('div')
:addClass(cfg.i18n.class.list_title_centered)
:wikitext(title_text)
else
title = mw.html.create()
:wikitext(title_text)
end
local title_container = mw.html.create('div')
:addClass(cfg.i18n.class.list_title)
-- don't /need/ a listnumtitleclass because you can do
-- .templateclass .listnumclass .sidebar-list-title
:addClass(args.listtitleclass)
:cssText(args.basestyle)
:cssText(args.listtitlestyle)
:cssText('color: var(--color-base)')
:cssText(args['list' .. num .. 'titlestyle'])
:node(title)
:done()
return title_container
end
--[[
Main entry point for sidebar with collapsible lists.
Does the work of creating the collapsible lists themselves and including them
into the args.
]]
function p.collapsible(frame)
local args = getArgs(frame)
if not args.name and
frame:getParent():getTitle():gsub(cfg.i18n.pattern.collapse_sandbox, '') ==
cfg.i18n.collapse_title_not_to_add_navbar then
args.navbar = cfg.i18n.navbar_none
end
local contentArgs = {}
local is_centered_list_titles = false
if args['centered list titles'] and args['centered list titles'] ~= '' then
is_centered_list_titles = true
end
for k, v in pairs(args) do
local num = string.match(k, '^list(%d+)$')
if num then
local expand = args.expanded and
(args.expanded == 'all' or args.expanded == args['list' .. num .. 'name'])
local row = mw.html.create('div')
row
:addClass(cfg.i18n.class.list)
:addClass('mw-collapsible')
:addClass((not expand) and 'mw-collapsed' or nil)
:addClass(args['list' .. num .. 'class'])
:cssText(args.listframestyle)
:cssText(args['list' .. num .. 'framestyle'])
:node(list_title(args, is_centered_list_titles, num))
:tag('div')
:addClass(cfg.i18n.class.list_content)
:addClass('mw-collapsible-content')
-- don't /need/ a listnumstyleclass because you can do
-- .templatename .listnumclass .sidebar-list
:addClass(args.listclass)
:cssText(args.liststyle)
:cssText(args['list' .. num .. 'style'])
:wikitext(trimAndAddAutomaticNewline(args['list' .. num]))
contentArgs['content' .. num] = tostring(row)
end
end
for k, v in pairs(contentArgs) do
args[k] = v
end
return p.sidebar(frame, args, cfg.i18n.class.collapse)
end
return p
4esitsmrbrm92s3g3av1dblfso2ifay
Module:Unicode data
828
30299
311193
289059
2026-10-26T10:38:45Z
Isma4l
41797
311193
Scribunto
text/plain
local p = {}
local floor = math.floor
local function errorf(level, ...)
if type(level) == "number" then
return error(string.format(...), level + 1)
else -- level is actually the format string.
return error(string.format(level, ...), 2)
end
end
local function binary_range_search(codepoint, ranges)
local low, mid, high
low, high = 1, ranges.length or require "Module:TableTools".length(ranges)
while low <= high do
mid = floor((low + high) / 2)
local range = ranges[mid]
if codepoint < range[1] then
high = mid - 1
elseif codepoint <= range[2] then
return range, mid
else
low = mid + 1
end
end
return nil, mid
end
p.binary_range_search = binary_range_search
--[[
local function linear_range_search(codepoint, ranges)
for i, range in ipairs(ranges) do
if range[1] <= codepoint and codepoint <= range[2] then
return range
end
end
end
--]]
-- Load a module by indexing "loader" with the name of the module minus the
-- "Module:Unicode data/" part. For instance, loader.blocks returns
-- [[Module:Unicode data/blocks]]. If a module cannot be loaded, false will be
-- returned.
local loader = setmetatable({}, {
__index = function (self, key)
local success, data = pcall(mw.loadData, "Module:Unicode data/" .. key)
if not success then
data = false
end
self[key] = data
return data
end
})
-- For the algorithm used to generate Hangul Syllable names,
-- see "Hangul Syllable Name Generation" in section 3.12 of the
-- Unicode Specification:
-- https://www.unicode.org/versions/Unicode11.0.0/ch03.pdf
-- binary_range_search assumes these are ordered by codepoint. Do not place them in a random order!
local name_hooks = {
{ 0x00, 0x1F, "<control-%04X>" }, -- C0 control characters
{ 0x7F, 0x9F, "<control-%04X>" }, -- DEL and C1 control characters
{ 0x3400, 0x4DBF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension A
{ 0x4E00, 0x9FFF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph
{ 0xAC00, 0xD7A3, function (codepoint) -- Hangul Syllables
local Hangul_data = loader.Hangul
local syllable_index = codepoint - 0xAC00
return ("HANGUL SYLLABLE %s%s%s"):format(
Hangul_data.leads[floor(syllable_index / Hangul_data.final_count)],
Hangul_data.vowels[floor((syllable_index % Hangul_data.final_count)
/ Hangul_data.trail_count)],
Hangul_data.trails[syllable_index % Hangul_data.trail_count]
)
end },
-- High Surrogates, High Private Use Surrogates, Low Surrogates
{ 0xD800, 0xDFFF, "<surrogate-%04X>" },
{ 0xE000, 0xF8FF, "<private-use-%04X>" }, -- Private Use
-- CJK Compatibility Ideographs
{ 0xF900, 0xFA6D, "CJK COMPATIBILITY IDEOGRAPH-%04X" },
{ 0xFA70, 0xFAD9, "CJK COMPATIBILITY IDEOGRAPH-%04X" },
{ 0xFE00, 0xFE0F, function (codepoint) -- Variation Selectors
return ("VARIATION SELECTOR-%d"):format(codepoint - 0xFE00 + 1)
end},
{ 0x13460, 0x143FA, "EGYPTIAN HIEROGLYPH-%04X" }, -- Egyptian Hieroglyphs Extended-A
{ 0x17000, 0x187FF, "TANGUT IDEOGRAPH-%04X" }, -- Tangut Ideograph
{ 0x18800, 0x18AFF, function (codepoint)
return ("TANGUT COMPONENT-%03d"):format(codepoint - 0x187FF)
end },
{ 0x18B00, 0x18CDA, "KHITAN SMALL SCRIPT CHARACTER-%04X" }, -- Khitan Small Script
{ 0x18CFF, 0x18CFF, "KHITAN SMALL SCRIPT CHARACTER-%04X" }, -- Khitan Small Script
{ 0x18D00, 0x18D20, "TANGUT IDEOGRAPH-%04X" }, -- Tangut Ideograph Supplement
{ 0x18D80, 0x18DF2, function (codepoint)
return ("TANGUT COMPONENT-%03d"):format(codepoint - 0x18A7F)
end },
{ 0x18E00, 0x19191, "JURCHEN IDEOGRAPH-%04X" }, -- Jurchen
{ 0x1B170, 0x1B2FB, "NUSHU CHARACTER-%04X" }, -- Nushu
{ 0x20000, 0x2A6DF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension B
{ 0x2A700, 0x2B81E, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension C, D
{ 0x2B820, 0x2CEAD, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension E
{ 0x2CEB0, 0x2EBE0, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension F
{ 0x2EBF0, 0x2EE5D, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension I
{ 0x2F800, 0x2FA1D, "CJK COMPATIBILITY IDEOGRAPH-%04X" }, -- CJK Compatibility Ideographs Supplement (Supplementary Ideographic Plane)
{ 0x30000, 0x3134A, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension G
{ 0x31350, 0x33479, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension H, J
{ 0x3D000, 0x3FC3F, "SMALL SEAL CHARACTER-%04X" }, -- Seal
{ 0xE0100, 0xE01EF, function (codepoint) -- Variation Selectors Supplement
return ("VARIATION SELECTOR-%d"):format(codepoint - 0xE0100 + 17)
end},
{ 0xF0000, 0xFFFFD, "<private-use-%04X>" }, -- Plane 15 Private Use
{ 0x100000, 0x10FFFD, "<private-use-%04X>" } -- Plane 16 Private Use
}
name_hooks.length = #name_hooks
local name_range_cache
local function generate_name(data, codepoint)
if type(data) == "string" then
return data:format(codepoint)
else
return data(codepoint)
end
end
--[[
-- Checks that the code point is a number and in range.
-- Does not check whether code point is an integer.
-- Not used
local function check_codepoint(funcName, argIdx, val)
require 'libraryUtil'.checkType(funcName, argIdx, val, 'number')
if codepoint < 0 or 0x10FFFF < codepoint then
errorf("Codepoint %04X out of range", codepoint)
end
end
--]]
function p.is_noncharacter(codepoint)
-- U+FDD0-U+FDEF and all code points ending in FFFE or FFFF are Unassigned
-- (Cn) and specifically noncharacters:
-- https://www.unicode.org/faq/private_use.html#nonchar4
return 0xFDD0 <= codepoint and (codepoint <= 0xFDEF
or floor(codepoint % 0x10000) >= 0xFFFE)
end
-- https://www.unicode.org/versions/Unicode11.0.0/ch04.pdf, section 4.8
function p.lookup_name(codepoint)
if p.is_noncharacter(codepoint) then
return ("<noncharacter-%04X>"):format(codepoint)
end
if name_range_cache -- Check if previously used "name hook" applies to this code point.
and codepoint >= name_range_cache[1]
and codepoint <= name_range_cache[2] then
return generate_name(name_range_cache[3], codepoint)
end
local range = binary_range_search(codepoint, name_hooks)
if range then
name_range_cache = range
return generate_name(range[3], codepoint)
end
local data = loader[('names/%03X'):format(codepoint / 0x1000)]
if data and data[codepoint] then
return data[codepoint]
-- Unassigned (Cn) consists of noncharacters and reserved characters.
-- The character has been established not to be a noncharacter,
-- and if it were assigned, its name would already been retrieved,
-- so it must be reserved.
else
return ("<reserved-%04X>"):format(codepoint)
end
end
function p.lookup_image(codepoint)
local data = loader[('images/%03X'):format(codepoint / 0x1000)]
if data then
return data[codepoint]
end
end
local planes = {
[ 0] = "Basic Multilingual Plane";
[ 1] = "Supplementary Multilingual Plane";
[ 2] = "Supplementary Ideographic Plane";
[ 3] = "Tertiary Ideographic Plane";
[14] = "Supplementary Special-purpose Plane";
[15] = "Supplementary Private Use Area-A";
[16] = "Supplementary Private Use Area-B";
}
-- Load [[Module:Unicode data/blocks]] if needed and assign it to this variable.
local blocks
local function block_iter(blocks, i)
i = i + 1
local data = blocks[i]
if data then
-- Unpack doesn't work on tables loaded with mw.loadData.
return i, data[1], data[2], data[3]
end
end
-- An ipairs-type iterator generator for the list of blocks.
function p.enum_blocks()
local blocks = loader.blocks
return block_iter, blocks, 0
end
function p.lookup_plane(codepoint)
local i = floor(codepoint / 0x10000)
return planes[i] or ("Plane %u"):format(i)
end
function p.lookup_block(codepoint)
local blocks = loader.blocks
local range = binary_range_search(codepoint, blocks)
if range then
return range[3]
else
return "No Block"
end
end
function p.get_block_info(name)
for i, block in ipairs(loader.blocks) do
if block[3] == name then
return block
end
end
end
function p.is_valid_pagename(pagename)
local has_nonws = false
for cp in mw.ustring.gcodepoint(pagename) do
if (cp == 0x0023) -- #
or (cp == 0x005B) -- [
or (cp == 0x005D) -- ]
or (cp == 0x007B) -- {
or (cp == 0x007C) -- |
or (cp == 0x007D) -- }
or (cp == 0x180E) -- MONGOLIAN VOWEL SEPARATOR
or ((cp >= 0x2000) and (cp <= 0x200A)) -- spaces in General Punctuation block
or (cp == 0xFFFD) -- REPLACEMENT CHARACTER
then
return false
end
local printable, result = p.is_printable(cp)
if not printable then
return false
end
if result ~= "space-separator" then
has_nonws = true
end
end
return has_nonws
end
local function manual_unpack(what, from)
if what[from + 1] == nil then
return what[from]
end
local result = {}
from = from or 1
for i, item in ipairs(what) do
if i >= from then
table.insert(result, item)
end
end
return unpack(result)
end
local function compare_ranges(range1, range2)
return range1[1] < range2[1]
end
-- Creates a function to look up data in a module that contains "singles" (a
-- code point-to-data map) and "ranges" (an array containing arrays that contain
-- the low and high code points of a range and the data associated with that
-- range).
-- "loader" loads and returns the "singles" and "ranges" tables.
-- "match_func" is passed the code point and either the data or the "dots", and
-- generates the final result of the function.
-- The varargs ("dots") describes the default data to be returned if there wasn't
-- a match.
-- In case the function is used more than once, "cache" saves ranges that have
-- already been found to match, or a range whose data is the default if there
-- was no match.
local function memo_lookup(data_module_subpage, match_func, ...)
local dots = { ... }
local cache = {}
local singles, ranges
return function (codepoint)
if not singles then
local data_module = loader[data_module_subpage]
singles, ranges = data_module.singles, data_module.ranges
end
if singles[codepoint] then
return match_func(codepoint, singles[codepoint])
end
local range = binary_range_search(codepoint, cache)
if range then
return match_func(codepoint, manual_unpack(range, 3))
end
local range, index = binary_range_search(codepoint, ranges)
if range then
table.insert(cache, range)
table.sort(cache, compare_ranges)
return match_func(codepoint, manual_unpack(range, 3))
end
if ranges[index] then
local dots_range
if codepoint > ranges[index][2] then
dots_range = {
ranges[index][2] + 1,
ranges[index + 1] and ranges[index + 1][1] - 1 or 0x10FFFF,
unpack(dots)
}
else -- codepoint < range[index][1]
dots_range = {
ranges[index - 1] and ranges[index - 1][2] + 1 or 0,
ranges[index][1] - 1,
unpack(dots)
}
end
table.sort(cache, compare_ranges)
end
return match_func(codepoint)
end
end
-- Get a code point's combining class value in [[Module:Unicode data/combining]],
-- and return whether this value is not zero. Zero is assigned as the default
-- if the combining class value is not found in this data module.
-- That is, return true if character is combining, or false if it is not.
-- See https://www.unicode.org/reports/tr44/#Canonical_Combining_Class_Values for
-- more information.
p.is_combining = memo_lookup(
"combining",
function (codepoint, combining_class)
return combining_class and combining_class ~= 0 or false
end,
0)
function p.add_dotted_circle(str)
return (mw.ustring.gsub(str, ".",
function(char)
if p.is_combining(mw.ustring.codepoint(char)) then
return '◌' .. char
end
end))
end
local lookup_control = memo_lookup(
"control",
function (codepoint, ccc)
return ccc or "assigned"
end,
"assigned")
p.lookup_control = lookup_control
function p.is_assigned(codepoint)
return lookup_control(codepoint) ~= "unassigned"
end
function p.is_printable(codepoint)
local result = lookup_control(codepoint)
return (result == "assigned") or (result == "space-separator"), result
end
function p.is_whitespace(codepoint)
local result = lookup_control(codepoint)
return (result == "space-separator"), result
end
p.lookup_category = memo_lookup(
"category",
function (codepoint, category)
return category
end,
"Cn")
local lookup_script = memo_lookup(
"scripts",
function (codepoint, script_code)
return script_code or 'Zzzz'
end,
"Zzzz")
p.lookup_script = lookup_script
function p.get_best_script(str)
-- Check type of argument, because mw.text.decode coerces numbers to strings!
require "libraryUtil".checkType("get_best_script", 1, str, "string")
-- Convert HTML character references (including named character references,
-- or character entities) to characters.
str = mw.text.decode(str, true)
local scripts = {}
for codepoint in mw.ustring.gcodepoint(str) do
local script = lookup_script(codepoint)
-- Ignore "Inherited", "Undetermined", or "Uncoded" scripts.
if not (script == "Zyyy" or script == "Zinh" or script == "Zzzz") then
scripts[script] = true
end
end
-- If scripts does not contain two or more keys,
-- return first and only key (script code) in table.
if not next(scripts, next(scripts)) then
return next(scripts)
end -- else return majority script, or else "Zzzz"?
end
function p.is_Latin(str)
require "libraryUtil".checkType("get_best_script", 1, str, "string")
str = mw.text.decode(str, true)
-- Search for the leading bytes that introduce the UTF-8 encoding of the
-- code points U+0340-U+10FFFF. If they are not found and there is at least
-- one Latin-script character, the string counts as Latin, because the rest
-- of the characters can only be Zyyy, Zinh, and Zzzz.
-- The only scripts found below U+0370 (the first code point of the Greek
-- and Coptic block) are Latn, Zyyy, Zinh, and Zzzz.
-- See the codepage in the [[UTF-8]] article.
if not str:find "[\205-\244]" then
for codepoint in mw.ustring.gcodepoint(str) do
if lookup_script(codepoint) == "Latn" then
return true
end
end
end
local Latn = false
local i = 0; -- indexer for use in error messages
for codepoint in mw.ustring.gcodepoint(str) do
i = i + 1; -- bump the indexer
local script = lookup_script(codepoint)
if script == "Latn" then
Latn = true
elseif not (script == "Zyyy" or script == "Zinh"
or script == "Zzzz") then
return false, i -- abandon as not Latn; identify the offending character's position
end
end
return Latn, (not Latn and i) or nil -- when <Latn> false, return offending charactor's position as second return value; nil else
end
-- Checks that a string contains only characters belonging to right-to-left
-- scripts, or characters of ignorable scripts.
function p.is_rtl(str)
require "libraryUtil".checkType("get_best_script", 1, str, "string")
str = mw.text.decode(str, true)
-- Search for the leading bytes that introduce the UTF-8 encoding of the
-- code points U+0580-U+10FFFF. If they are not found, the string can only
-- have characters from a left-to-right script, because the first code point
-- in a right-to-left script is U+0591, in the Hebrew block.
if not str:find "[\214-\244]" then
return false
end
local result = false
local rtl = loader.scripts.rtl
for codepoint in mw.ustring.gcodepoint(str) do
local script = lookup_script(codepoint)
if rtl[script] then
result = true
elseif not (script == "Zyyy" or script == "Zinh"
or script == "Zzzz") then
return false
end
end
return result
end
--[[--------------------------< I S _ R T L _ F R A M E >------------------------------------------------------
external entry from an {{#invoke:}} to determine if a string of text is rtl. Strips html and html-like tags so
that those tags don't corrupt the is-rtl-is-not-rtl determination; this added for the cases where the rtl text
has <br /> tags.
]]
function p.is_rtl_frame (frame)
local str = frame.args[1]; -- get the string from the {{#invoke:}} frame
str = str:gsub ('%b<>', ''); -- strip any html and html-like tags
return p.is_rtl (str); -- return if whatever remains rtl; false else
end
local function get_codepoint(args, arg)
local codepoint_string = args[arg]
or errorf(2, "Parameter %s is required", tostring(arg))
local codepoint = tonumber(codepoint_string, 16)
or errorf(2, "Parameter %s is not a code point in hexadecimal base",
tostring(arg))
if not (0 <= codepoint and codepoint <= 0x10FFFF) then
errorf(2, "code point in parameter %s out of range", tostring(arg))
end
return codepoint
end
local function get_func(args, arg, prefix)
local suffix = args[arg]
or errorf(2, "Parameter %s is required", tostring(arg))
suffix = mw.text.trim(suffix)
local func_name = prefix .. suffix
local func = p[func_name]
or errorf(2, "There is no function '%s'", func_name)
return func
end
-- This function allows any of the "lookup" functions to be invoked. The first
-- parameter is the word after "lookup_"; the second parameter is the code point
-- in hexadecimal base.
function p.lookup(frame)
local func = get_func(frame.args, 1, "lookup_")
local codepoint = get_codepoint(frame.args, 2)
local result = func(codepoint)
if func == p.lookup_name then
-- Prevent code point labels such as <control-0000> from being
-- interpreted as HTML tags.
result = result:gsub("<", "<")
end
return result
end
function p.is(frame)
local func = get_func(frame.args, 1, "is_")
-- is_Latin and is_valid_pagename take strings.
if func == p.is_Latin or func == p.is_valid_pagename or func == p.is_rtl then
return (func(frame.args[2]))
else -- The rest take code points.
local codepoint = get_codepoint(frame.args, 2)
return (func(codepoint)) -- Adjust to one result.
end
end
function p.lookup_kCantonese(codepoint)
local data = loader[('Unihan/kCantonese/%02X'):format(floor(codepoint / 0x1000))]
if data then
return data[codepoint]
end
end
return p
qsurfs20jboj5ejuj5ps85xjotbbrt3
Module:Template link general
828
31829
311186
286525
2026-10-26T10:24:24Z
Isma4l
41797
311186
Scribunto
text/plain
-- This implements Template:Template link general and various other templates in its family
local getArgs = require('Module:Arguments').getArgs
local p = {}
-- Is a string non-empty?
local function _ne(s)
return s ~= nil and s ~= ""
end
local nw = mw.text.nowiki
local function addTemplate(s)
local i, _ = s:find(':', 1, true)
if i == nil then
return 'Template:' .. s
end
local ns = s:sub(1, i - 1)
if ns == '' or mw.site.namespaces[ns] then
return s
else
return 'Template:' .. s
end
end
local function trimTemplate(s)
local needle = 'template:'
if s:sub(1, needle:len()):lower() == needle then
return s:sub(needle:len() + 1)
else
return s
end
end
-- Builds the link part
local function linkTitle(args)
local titleObj
if args['1'] then
-- This handles :Page and other NS
titleObj = mw.title.new(args['1'], 'Template')
else
titleObj = mw.title.getCurrentTitle()
end
local textPart = args.alttext
if not _ne(textPart) then
if titleObj ~= nil then
textPart = titleObj:inNamespace("Template") and args['1'] or titleObj.fullText
else
-- redlink
textPart = args['1']
end
end
if _ne(args.subst) then
-- HACK: the ns thing above is probably broken
textPart = 'subst:' .. textPart
end
if _ne(args.brace) then
textPart = nw('{{') .. textPart .. nw('}}')
elseif _ne(args.braceinside) then
textPart = nw('{') .. textPart .. nw('}')
end
local titlePart
if _ne(args.nolink) then
titlePart = textPart
else
titlePart = '[[' .. (titleObj ~= nil and titleObj.fullText or addTemplate(args['1'])) ..
'|' .. textPart .. ']]'
end
if _ne(args.braceinside) then
titlePart = nw('{') .. titlePart .. nw('}')
end
local bold = _ne(args.bold) or _ne(args.boldlink) or _ne(args.boldname)
if bold then
titlePart = "'''" .. titlePart .. "'''"
end
if _ne(args.nowrapname) then
titlePart = '<span class="nowrap">' .. titlePart .. '</span>'
end
return titlePart
end
function p.main(frame)
local args = getArgs(frame, {
trim = true,
removeBlanks = false
})
return p._main(args)
end
function p._main(args)
local italic = _ne(args.italic) or _ne(args.italics)
local dontBrace = _ne(args.brace) or _ne(args.braceinside)
local code = _ne(args.code) or _ne(args.tt)
local show_result = _ne(args._show_result)
local expand = _ne(args._expand)
local titlePart = linkTitle(args)
-- Build the arguments
local textPart = ""
local textPartBuffer = "|"
local codeArguments = {}
local codeArgumentsString = ""
local i = 2
local j = 1
while args[i] do
local val = args[i]
if val ~= "" then
if _ne(args.nowiki) then
-- Unstrip nowiki tags first because calling nw on something that already contains nowiki tags will
-- mangle the nowiki strip marker and result in literal UNIQ...QINU showing up
val = nw(mw.text.unstripNoWiki(val))
end
local k, v = string.match(val, "(.*)=(.*)")
if not k then
codeArguments[j] = val
j = j + 1
else
codeArguments[k] = v
end
codeArgumentsString = codeArgumentsString .. textPartBuffer .. val
if italic then
val = '<span style="font-style:italic;">' .. val .. '</span>'
end
textPart = textPart .. textPartBuffer .. val
end
i = i + 1
end
-- final wrap
local ret = titlePart .. textPart
if not dontBrace then ret = nw('{{') .. ret .. nw('}}') end
if _ne(args.a) then ret = nw('*') .. ' ' .. ret end
if _ne(args.kbd) then ret = '<kbd>' .. ret .. '</kbd>' end
if code then
ret = '<code>' .. ret .. '</code>'
elseif _ne(args.plaincode) then
ret = '<code style="border:none;background:transparent;color:inherit">' .. ret .. '</code>'
end
if _ne(args.nowrap) then ret = '<span class="nowrap">' .. ret .. '</span>' end
--[[ Wrap as html??
local span = mw.html.create('span')
span:wikitext(ret)
--]]
if _ne(args.debug) then ret = ret .. '\n<pre>' .. mw.text.encode(mw.dumpObject(args)) .. '</pre>' end
if show_result then
if _ne(args.nocat) then codeArguments['nocat'] = true end
local result = mw.getCurrentFrame():expandTemplate{title = addTemplate(args[1]), args = codeArguments}
ret = ret .. " → " .. result
end
if expand then
local query = mw.text.encode('{{' .. addTemplate(args[1]) .. string.gsub(codeArgumentsString, textPartBuffer, "|") .. '}}')
local url = mw.uri.fullUrl('special:ExpandTemplates', 'wpInput=' .. query)
mw.log()
ret = ret .. " [" .. tostring(url) .. "]"
end
return ret
end
return p
eq1il0gmw32087nl1ce4bzyifl7zrrz
Heerka Koowaad ee Soomaali
0
38302
311061
310831
2026-10-25T15:54:51Z
~2026-57055-31
47999
/* Kuwii horay u guuleystay */
311061
wikitext
text/x-wiki
{{Infobox football league
| logo=
| pixels=
| country={{flagicon|SOM}} [[Soomaaliya]]
| confed=[[Xiriirka Kubadda Cagta Afrika|CAF]]
| founded=1967
| teams=12
| promotion=
| relegation=[[Heerka Labaad ee Soomaaliya]]
| levels=1
| domest_cup=[[Koobka Soomaaliya]]
| champions=[[Gaadiidka FC]]
| season=[[Horyaalka Heerka Koowaad ee Soomaaliya 2025/26|2025–2026]]
| top goalscorer= {{flagicon|Somalia}} [[Ciise Aden Abshir]] (103 gool)
| tv=Astaan TV <br> Asal TV <br> Bile TV
| website=
| current=[[Horyaalka Heerka Koowaad ee Soomaaliya 2025/26]]
}}
[[File:2014_12_19_Somali_Football-20_(16145412865).jpg | thumb | right | Ciyaar u dhaxaysa kooxaha heerka koowaad ee Elman iyo Horseed ee Garoonka Banaadir sannadkii 2014]]
Horyaalka Qaranka Soomaaliyeed ({{langx|so|Heerka Koowaad ee Soomaali}}), oo hore loo oran jiray Horyaalka Premier League ee Soomaaliya, waa horyaalka xirfadleyda Soomaaliyeed ee [[kubadda cagta]] ragga. Wuxuu shaqaynayay in ka badan 50 sano, isagoo la aasaasay 1967.
Soomaaliya waxay leedahay 12 kooxood oo xirfadlayaal ah oo u ciyaara Heerka Koowaad ee Soomaaliya. Kubadda cagta waa ciyaarta ugu caansan Soomaaliya. Sannadku markuu ahaa 1930-meeyadii, maamuladii gumeystaha Talyaanigu waxay dalka ka aasaaseen kooxo ka mid ah kuwii ugu horreeyay. Xilli ciyaareedkii 2025–26, [[Gaadiidka FC|Gaadiidka]] ayaa ku guuleystay Heerka Koowaad ee Soomaaliya.
==Ciyaartooyda Ajaanibta ah==
Koox kasta oo ka qayb qaadanaysa horyaalka waxaa loo oggol yahay oo kaliya in ay diiwaangeliso afar ciyaaryahan oo ajaanib ah hal mar.<ref>{{Cite web|url=https://www.aljazeera.com/features/2015/7/1/somalias-football-revival-lures-foreign-players|title=Somalia’s football revival lures foreign players|first=Hamza|last=Mohamed|website=Al Jazeera}}</ref>
==Kooxaha==
''Laga soo bilaabo xilli ciyaareedkii 2024-2025:''
{| class="wikitable sortable"
! width="150" scope="col" |Kooxda
! width="150" scope="col" |Goobta
! width="200" scope="col" |Garoonka
|-
|[[Mogadishu City Club|Mogadishu City]] ||[[Muqdisho]]||[[Garoonka Muqdisho]]
|-
|{{sort|Dekedaha|[[Dekedaha FC|Dekedaha]]}}||[[Muqdisho]]||[[Garoonka Banaadir]]
|-
|{{sort|Gaadiidka|[[Gaadiidka FC|Gaadiidka]]}} ||[[Muqdisho]]||[[Garoonka Banaadir]]
|-
|{{sort|Heegan|[[Heegan FC|Heegan]]}}||[[Muqdisho]]||[[Garoonka Banaadir]]
|-
|{{sort|Horseed|[[Horseed FC]]}}||[[Horseed]]||[[Garoonka Horseed]]
|-
|{{sort|Raadsan|[[Raadsan SC]]}}||[[Muqdisho]]||[[Garoonka Banaadir]]
|-
|{{sort|Jeenyo United|[[Jeenyo United FC]]}}||[[Muqdisho]]||[[Garoonka Banaadir]]
|-
|[[Gasko FC]]||[[Muqdisho]]||[[Garoonka Banaadir]]
|-
| {{sort |[[Elman SC]] ||[[Muqdisho]]||[[Garoonka Banaadir]]
|-
| {{sort |[[KIGS SC]]||[[Muqdisho]]||[[Garoonka Banaadir]]
|-
|[[National Printing Agency FC|Madbacada FC]] ||[[Muqdisho]]||[[Garoonka Banaadir]]
|-
|[[Badbaado FC]] ||[[Muqdisho]]||[[Garoonka Muqdisho]]
|}
==Kuwii horay u guuleystay==
Kuwii hore u guuleystay waxay ahaayeen:<ref>{{cite web|title=Somalia Champions|website=[[RSSSF]]|url=https://www.rsssf.org/tabless/somachamp.html|access-date=22 December 2013}}</ref>
==Jadwalkii Heerka Koowaad ee Soomaaliya 2021==
Natiijadii ugu dambeysay:<ref>{{Cite web | title=Somalia 2021 | url=https://www.rsssf.org/tabless/soma2021.html | access-date=2025-08-22 | website=www.rsssf.org}}</ref>
{{row counter|{| class{{=}}"wikitable sortable"
|-
! Pos. !! Kooxda Kubadda Cagta !! Celceliska Daawadayaasha !! W !! D !! L !! Dhibcaha
|-
| 1 || [[Horseed FC|Horseed SC]] || 7,533 || 11 || 5 || 2 || 38
|-
| 2 || [[Mogadishu City Club]] || 2,512 || 11 || 5 || 2 || 38
|-
| 3 || [[Heegan FC]] || 2,032 || 9 || 6 || 3 || 33
|-
| 4 || [[Raadsan SC]] || 917 || 9 || 6 || 3 || 33
|-
| 5 || [[Dekedaha FC]] || 907 || 6 || 5 || 7 || 23
|-
| 6 || [[Midnimo FC]] || 654 || 7 || 1 || 10 || 22
|-
| 7 || [[Gaadiidka FC]] || 698 || 6 || 3 || 9 || 21
|-
| 8 || [[Jeenyo United FC]] || 567 || 5 || 5 || 8 || 20
|-
| 9 || [[Elman FC|Elman SC]] || 520 || 5 || 2 || 11 || 17
|-
| 10 || [[Geeska Afrika FC]] || 321 || 1 || 2 || 15 || 5
|-
|} }}
Daawadayaasha ugu badan: 65,000 oo ka tirsan [[Horseed FC|Horseed SC]] vs [[Mogadishu City Club]].<ref>https://wardheernews.com/tanks-gone-somalis-fill-mogadishu-stadium-with-65000-fans-for-first-time-since-2004/</ref>
==Waxqabadka kooxda==
{| class="wikitable"
|-
! Kooxda
! Horyaallada
! Horyaalkii ugu dambeeyay
|-
| [[Mogadishu City Club]] (waxaa ku jira Mogadishu Municipality, Banaadir) || 11 || 2024–25
|-
| [[Horseed FC]] || 8 || 2020–21
|-
|[[Elman FC]]|| 6 || 2012–13
|-
| [[Dekedda FC|Dekedda]] (waxaa ku jira Ports Authority) || 6 || 2023–24
|-
| [[Wagad]] || 4 || 1988
|-
| [[Jeenyo United FC|Jeenyo United]] (waxaa ku jira Lavori Pubblici) || 4 || 1980–81
|-
| [[Gaadiidka FC|Gaadiidka]] || 3 || 2025–26
|-
| [[Heegan FC|Heegan]] (waxaa ku jira Booliska Soomaaliyeed) || 2 || 2014–15
|-
| Deledda FC || 1 || 1998
|-
| [[Alba FC|Alba]] || 1 || 1995
|-
| Merca New Supplies || 1 || 1994
|-
| Marine Club || 1 || 1984
|-
| [[Madbacadda Qaranka|Printing Agency]] || 1 || 1983
|-
| [[Hoga]] || 1 || 1968
|}
==Ciyaartooyda goolasha ugu badan dhaliyay ==
{|class="wikitable" style="text-align:center"
!Xilli-ciyaareedka!!Ciyaaryahanka!!Kooxda!!Goolasha
|-
|2023–24||align=left|{{flagicon|NGA}} Adepoju Oluwaseun||[[Gaadiidka]]||22
|-
|2024–25||align=left|{{flagicon|SOM}} Abdulqadir Eenow||[[Mogadishu City Club]]||23
|}
==Tixraacyada==
{{reflist}}
==Xiriiriyeyaasha dibadda==
*[https://footballsomalia.so/so/ Footballsomialia]
*[https://web.archive.org/web/20071118200321/http://www.fifa.com/associations/association=som/nationalleague/standings.html League at FIFA.com]
*[https://int.soccerway.com/national/somalia/first-division/20132014/regular-season/r23101/ League at Soccerway.com]
*[https://www.flashscore.com/football/somalia/national-league/ League at Flashcore.com]
8k5lxm6zx34b3nzripa8q4viw86d46t
Module:Infobox/styles.css
828
40075
311171
310839
2026-10-25T18:20:00Z
Isma4l
41797
Sixid
311171
sanitized-css
text/css
/* {{pp|small=y}} */
/*
* This TemplateStyles sheet deliberately does NOT include the full set of
* infobox styles. We are still working to migrate all of the manual
* infoboxes. See [[MediaWiki talk:Common.css/to do#Infobox]]
* DO NOT ADD THEM HERE
*/
/*
* not strictly certain these styles are necessary since the modules now
* exclusively output infobox-subbox or infobox, not both
* just replicating the module faithfully
*/
.infobox-subbox {
padding: 0;
border: none;
margin: -3px;
width: auto;
min-width: 100%;
font-size: 100%;
clear: none;
float: none;
background-color: transparent;
color:inherit;
}
.infobox-3cols-child {
margin: -3px;
}
.infobox .navbar {
font-size: 100%;
}
/* Qaybtan waxay dhexda dhigaysaa sawirka iyo ciwaannada (Mobile & Desktop) */
.infobox-image,
body.skin-minerva .infobox-header,
body.skin-minerva .infobox-subheader,
body.skin-minerva .infobox-above,
body.skin-minerva .infobox-title,
body.skin-minerva .infobox-image,
body.skin-minerva .infobox-full-data,
body.skin-minerva .infobox-below {
text-align: center;
}
/* Dark theme: [[William_Wragg]], [[Coral_Castle]] */
@media screen {
html.skin-theme-clientpref-night .infobox-full-data:not(.notheme) > div:not(.notheme)[style] {
background: #1f1f23 !important;
/* switch with var( --color-base ) when supported. */
color: #f8f9fa;
}
}
@media screen and ( prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .infobox-full-data:not(.notheme) > div:not(.notheme)[style] {
background: #1f1f23 !important;
/* switch with var( --color-base ) when supported. */
color: #f8f9fa;
}
}
/* Since infobox is a table, many infobox templates take advantage of this to
* add columns and rows to the infobox itself rather than as part of a new table
* inside them. This class should be discouraged and removed on the long term,
* but allows us to at least identify these tables going forward
* Currently in use on: [[Module:Infobox3cols]]
* Fixes issue described in [[phab:F55300125]] on Vector 2022.
*/
@media (min-width: 640px) {
body.skin--responsive .infobox-table {
display: table !important;
}
body.skin--responsive .infobox-table > caption {
display: table-caption !important;
}
body.skin--responsive .infobox-table > tbody {
display: table-row-group;
}
body.skin--responsive .infobox-table th,
body.skin--responsive .infobox-table td {
padding-left: inherit;
padding-right: inherit;
}
}
h2tjqz9hc9waf9un3bc0bpshjrqlzgu
311172
311171
2026-10-25T18:21:07Z
Isma4l
41797
311172
sanitized-css
text/css
/* {{pp|small=y}} */
/*
* This TemplateStyles sheet deliberately does NOT include the full set of
* infobox styles. We are still working to migrate all of the manual
* infoboxes. See [[MediaWiki talk:Common.css/to do#Infobox]]
* DO NOT ADD THEM HERE
*/
/* NOTE: This is maintained both here and in [[MediaWiki:Common.css]] until migration is complete.
* Starting with bare minimum for the benefit of [[mw:Manual:Safemode]]. */
@media (min-width: 640px) {
.infobox {
/* @noflip */
margin-left: 1em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
width: 22em;
}
}
/*
* not strictly certain these styles are necessary since the modules now
* exclusively output infobox-subbox or infobox, not both
* just replicating the module faithfully
*/
.infobox-subbox {
padding: 0;
border: none;
margin: -3px;
width: auto;
min-width: 100%;
font-size: 100%;
clear: none;
float: none;
background-color: transparent;
color:inherit;
}
.infobox-3cols-child {
margin: -3px;
}
.infobox .navbar {
font-size: 100%;
}
/* Qaybtan waxay dhexda dhigaysaa sawirka iyo ciwaannada (Mobile & Desktop) */
.infobox-image,
body.skin-minerva .infobox-header,
body.skin-minerva .infobox-subheader,
body.skin-minerva .infobox-above,
body.skin-minerva .infobox-title,
body.skin-minerva .infobox-image,
body.skin-minerva .infobox-full-data,
body.skin-minerva .infobox-below {
text-align: center;
}
/* Dark theme: [[William_Wragg]], [[Coral_Castle]] */
@media screen {
html.skin-theme-clientpref-night .infobox-full-data:not(.notheme) > div:not(.notheme)[style] {
background: #1f1f23 !important;
/* switch with var( --color-base ) when supported. */
color: #f8f9fa;
}
}
@media screen and ( prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .infobox-full-data:not(.notheme) > div:not(.notheme)[style] {
background: #1f1f23 !important;
/* switch with var( --color-base ) when supported. */
color: #f8f9fa;
}
}
/* Since infobox is a table, many infobox templates take advantage of this to
* add columns and rows to the infobox itself rather than as part of a new table
* inside them. This class should be discouraged and removed on the long term,
* but allows us to at least identify these tables going forward
* Currently in use on: [[Module:Infobox3cols]]
* Fixes issue described in [[phab:F55300125]] on Vector 2022.
*/
@media (min-width: 640px) {
body.skin--responsive .infobox-table {
display: table !important;
}
body.skin--responsive .infobox-table > caption {
display: table-caption !important;
}
body.skin--responsive .infobox-table > tbody {
display: table-row-group;
}
body.skin--responsive .infobox-table th,
body.skin--responsive .infobox-table td {
padding-left: inherit;
padding-right: inherit;
}
}
r40k865gqhjh7tb6f4g98ni1sxoo54c
311173
311172
2026-10-25T18:23:00Z
Isma4l
41797
311173
sanitized-css
text/css
/* {{pp|small=y}} */
/*
* This TemplateStyles sheet deliberately does NOT include the full set of
* infobox styles. We are still working to migrate all of the manual
* infoboxes. See [[MediaWiki talk:Common.css/to do#Infobox]]
* DO NOT ADD THEM HERE
*/
/* NOTE: This is maintained both here and in [[MediaWiki:Common.css]] until migration is complete.
* Starting with bare minimum for the benefit of [[mw:Manual:Safemode]]. */
@media (min-width: 640px) {
.infobox {
/* @noflip */
margin-left: 1em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
width: 22em;
}
}
/*
* not strictly certain these styles are necessary since the modules now
* exclusively output infobox-subbox or infobox, not both
* just replicating the module faithfully
*/
.infobox-subbox {
padding: 0;
border: none;
margin: -3px;
width: auto;
min-width: 100%;
font-size: 100%;
clear: none;
float: none;
background-color: transparent;
color:inherit;
}
.infobox-3cols-child {
margin: -3px;
}
.infobox .navbar {
font-size: 100%;
}
/* remove when infobox is not a table anymore */
.infobox-hiddenrow,
/* we mean it, Minerva. but also Vector 2022 in the future at some point */
body.skin--responsive.skin--responsive .infobox .infobox-hiddenrow {
display: none;
}
/* Dark theme: [[William Wragg]], [[Coral Castle]] */
@media screen {
html.skin-theme-clientpref-night .infobox-full-data:not(.notheme) > div:not(.notheme)[style] {
background: #1f1f23 !important;
/* switch with var( --color-base ) when supported. */
color: #f8f9fa;
}
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .infobox-full-data:not(.notheme) > div:not(.notheme)[style] {
background: #1f1f23 !important;
/* switch with var( --color-base ) when supported. */
color: #f8f9fa;
}
}
/* Since infobox is a table, many infobox templates take advantage of this to
* add columns and rows to the infobox itself rather than as part of a new table
* inside them. This class should be discouraged and removed on the long term,
* but allows us to at least identify these tables going forward
* Currently in use on: [[Module:Infobox3cols]]
* Fixes issue described in [[phab:F55300125]] on Vector 2022.
*/
@media (min-width: 640px) {
body.skin--responsive .infobox-table {
display: table !important;
}
body.skin--responsive .infobox-table > caption {
display: table-caption !important;
}
body.skin--responsive .infobox-table > tbody {
display: table-row-group;
}
body.skin--responsive .infobox-table th,
body.skin--responsive .infobox-table td {
padding-left: inherit;
padding-right: inherit;
}
}
bi1nsztkx4350a55cuzjhaotvp5h216
311174
311173
2026-10-25T18:24:04Z
Isma4l
41797
Saxay
311174
sanitized-css
text/css
/* {{pp|small=y}} */
/*
* This TemplateStyles sheet deliberately does NOT include the full set of
* infobox styles. We are still working to migrate all of the manual
* infoboxes. See [[MediaWiki talk:Common.css/to do#Infobox]]
* DO NOT ADD THEM HERE
*/
/* NOTE: This is maintained both here and in [[MediaWiki:Common.css]] until migration is complete.
* Starting with bare minimum for the benefit of [[mw:Manual:Safemode]]. */
@media (min-width: 640px) {
.infobox {
/* @noflip */
margin-left: 1em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
width: 22em;
}
}
/*
* not strictly certain these styles are necessary since the modules now
* exclusively output infobox-subbox or infobox, not both
* just replicating the module faithfully
*/
.infobox-subbox {
padding: 0;
border: none;
margin: -3px;
width: auto;
min-width: 100%;
font-size: 100%;
clear: none;
float: none;
background-color: transparent;
color:inherit;
}
.infobox-3cols-child {
margin: -3px;
}
.infobox .navbar {
font-size: 100%;
}
/* Qaybtan waxay dhexda dhigaysaa sawirka iyo ciwaannada (Mobile & Desktop) */
.infobox-image,
body.skin-minerva .infobox-header,
body.skin-minerva .infobox-subheader,
body.skin-minerva .infobox-above,
body.skin-minerva .infobox-title,
body.skin-minerva .infobox-image,
body.skin-minerva .infobox-full-data,
body.skin-minerva .infobox-below {
text-align: center;
}
/* Dark theme: [[William_Wragg]], [[Coral_Castle]] */
@media screen {
html.skin-theme-clientpref-night .infobox-full-data:not(.notheme) > div:not(.notheme)[style] {
background: #1f1f23 !important;
/* switch with var( --color-base ) when supported. */
color: #f8f9fa;
}
}
@media screen and ( prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .infobox-full-data:not(.notheme) > div:not(.notheme)[style] {
background: #1f1f23 !important;
/* switch with var( --color-base ) when supported. */
color: #f8f9fa;
}
}
/* Since infobox is a table, many infobox templates take advantage of this to
* add columns and rows to the infobox itself rather than as part of a new table
* inside them. This class should be discouraged and removed on the long term,
* but allows us to at least identify these tables going forward
* Currently in use on: [[Module:Infobox3cols]]
* Fixes issue described in [[phab:F55300125]] on Vector 2022.
*/
@media (min-width: 640px) {
body.skin--responsive .infobox-table {
display: table !important;
}
body.skin--responsive .infobox-table > caption {
display: table-caption !important;
}
body.skin--responsive .infobox-table > tbody {
display: table-row-group;
}
body.skin--responsive .infobox-table th,
body.skin--responsive .infobox-table td {
padding-left: inherit;
padding-right: inherit;
}
}
r40k865gqhjh7tb6f4g98ni1sxoo54c
Diinsoor
0
42465
311180
289478
2026-10-26T10:13:23Z
Isma4l
41797
/* */ Saxay
311180
wikitext
text/x-wiki
#REDIRECT [[Degmada Diinsoor]]
1luiebril6bf42fbu9d6ozq9bzj5vim
Talk:Diinsoor
1
42466
311181
289484
2026-10-26T10:13:49Z
Isma4l
41797
/* */ Saxay
311181
wikitext
text/x-wiki
#REDIRECT [[Talk:Degmada Diinsoor]]
eq78uozz8saf9xv55n460abpqyeoxaq
Module:Sidebar/configuration
828
44158
311191
289839
2026-10-26T10:34:16Z
Isma4l
41797
311191
Scribunto
text/plain
return {
i18n = {
child_yes = 'ha',
float_none = 'ma jiro',
float_left = 'bidix',
wrap_true = 'run',
navbar_none = 'ma jiro',
navbar_off = 'damisan',
default_list_title = 'Liis',
-- Ha beddelin magacyada tampleetyada iyo faylasha koodhka ah (Template:Sidebar, Module:Sidebar/styles.css, iwm) si uusan koodhku u jabin, balse qiyamka fariimaha iyo ereyada caadiga ah waad turjumi kartaa.
title_not_to_add_navbar = 'Template:Sidebar',
collapse_title_not_to_add_navbar = 'Template:Sidebar with collapsible lists',
templatestyles = {
sidebar = 'Module:Sidebar/styles.css',
hlist = 'Hlist/styles.css',
plainlist = 'Plainlist/styles.css',
subinfobox = 'Subinfobox bodystyle/styles.css',
},
category = {
child = '[[Category:Bogagga adeegsanaya sidebar oo wata cabbirka carruurta (child parameter)]]',
conversion = '[[Category:Sidebars wata qaab-dhismeed u baahan beddelid]]'
},
pattern = {
collapse_sandbox = '/sandbox$',
sandbox = '/sandbox$',
subgroup = 'sidebar%-subgroup',
style_conversion = 'style$',
uncategorized_conversion_titles = {
'/[Ss]andbox',
'/[Tt]estcases',
'/[Dd]oc$'
}
},
class = {
sidebar = 'sidebar',
subgroup = 'sidebar-subgroup',
subinfobox = 'subinfobox',
collapse = 'sidebar-collapse',
float_none = 'sidebar-none',
float_left = 'sidebar-left',
wraplinks = 'nowraplinks',
outer_title = 'sidebar-outer-title',
top_image = 'sidebar-top-image',
top_caption = 'sidebar-top-caption',
pretitle = 'sidebar-pretitle',
pretitle_with_top_image = 'sidebar-pretitle-with-top-image',
title = 'sidebar-title',
title_with_pretitle = 'sidebar-title-with-pretitle',
image = 'sidebar-image',
caption = 'sidebar-caption',
above = 'sidebar-above',
heading = 'sidebar-heading',
content = 'sidebar-content',
content_with_subgroup = 'sidebar-content-with-subgroup',
below = 'sidebar-below',
navbar = 'sidebar-navbar',
list = 'sidebar-list',
list_title = 'sidebar-list-title',
list_title_centered = 'sidebar-list-title-c',
list_content = 'sidebar-list-content',
noviewer = 'noviewer'
}
}
}
7dgm3n2srvzvklqwbr8nxg8gr8l5eho
Module:Sidebar/styles.css
828
44159
311190
288444
2026-10-26T10:32:37Z
Isma4l
41797
311190
sanitized-css
text/css
/* {{pp-template}} */
/* TODO: Invert width design to be "mobile first" */
.sidebar {
/* TODO: Ask if we should have max-width 22em instead */
width: 22em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
/* @noflip */
margin: 0.5em 0 1em 1em;
background: var(--background-color-neutral-subtle, #f8f9fa);
border: 1px solid var(--border-color-base, #a2a9b1);
padding: 0.2em;
text-align: center;
line-height: 1.4em;
font-size: 88%;
border-collapse: collapse;
/* Timeless has display: none on .nomobile at mobile resolutions, so we
* unhide it with display: table and let precedence and proximity win.
*/
display: table;
}
/* Unfortunately, so does Minerva desktop, except Minerva drops an
* !important on the declaration. So we have to be mean for Minerva users.
* Mobile removes the element entirely with `wgMFRemovableClasses` in
* https://github.com/wikimedia/operations-mediawiki-config/blob/master/
wmf-config/InitialiseSettings.php#L16992
* which is why displaying it categorically with display: table works.
* We don't really want to expose the generic user in the wild on mobile to have
* to deal with sidebars. (Maybe the ones with collapsible lists, so that
* might be an improvement. That is blocked on [[:phab:T111565]].)
*/
body.skin-minerva .sidebar {
display: table !important;
/* also, minerva is way too aggressive about other stylings on tables.
* TODO remove when this template gets moved to a div. plans on talk page.
* We always float right on Minerva because that's a lot of extra CSS
* otherwise. */
float: right !important;
margin: 0.5em 0 1em 1em !important;
}
.sidebar-subgroup {
width: 100%;
margin: 0;
border-spacing: 0;
}
.sidebar-left {
/* @noflip */
float: left;
/* @noflip */
clear: left;
/* @noflip */
margin: 0.5em 1em 1em 0;
}
.sidebar-none {
float: none;
clear: both;
/* @noflip */
margin: 0.5em 1em 1em 0;
}
.sidebar-outer-title {
padding: 0 0.4em 0.2em;
font-size: 125%;
line-height: 1.2em;
font-weight: bold;
}
.sidebar-top-image {
padding: 0.4em;
}
.sidebar-top-caption,
.sidebar-pretitle-with-top-image,
.sidebar-caption {
padding: 0.2em 0.4em 0;
line-height: 1.2em;
}
.sidebar-pretitle {
padding: 0.4em 0.4em 0;
line-height: 1.2em;
}
.sidebar-title,
.sidebar-title-with-pretitle {
padding: 0.2em 0.8em;
font-size: 145%;
line-height: 1.2em;
}
.sidebar-title-with-pretitle {
padding: 0.1em 0.4em;
}
.sidebar-image {
padding: 0.2em 0.4em 0.4em;
}
.sidebar-heading {
padding: 0.1em 0.4em;
}
.sidebar-content {
padding: 0 0.5em 0.4em;
}
.sidebar-content-with-subgroup {
padding: 0.1em 0.4em 0.2em;
}
.sidebar-above,
.sidebar-below {
padding: 0.3em 0.8em;
font-weight: bold;
}
.sidebar-collapse .sidebar-above,
.sidebar-collapse .sidebar-below {
border-top: 1px solid var(--border-color-base, #a2a9b1);
border-bottom: 1px solid var(--border-color-base, #a2a9b1);
}
.sidebar-navbar {
text-align: right;
font-size: 115%;
padding: 0 0.4em 0.4em;
}
.sidebar-list-title {
padding: 0 0.4em;
text-align: left;
font-weight: bold;
line-height: 1.6em;
font-size: 105%;
}
/* centered text with mw-collapsible headers is finicky */
.sidebar-list-title-c {
padding: 0 0.4em;
text-align: center;
margin: 0 3.3em;
}
@media (max-width: 640px) {
/* users have wide latitude to set arbitrary width and margin :(
"Super-specific" selector to prevent overriding this appearance by
lower level sidebars too */
body.mediawiki .sidebar {
width: 100% !important;
clear: both;
float: none !important; /* Remove when we div based; Minerva is dumb */
margin-left: 0 !important;
margin-right: 0 !important;
}
/* TODO: We might consider making all links wrap at small resolutions and then
* only introduce nowrap at higher resolutions. Do when we invert the media
* query.
*/
}
/* Fixes: T367463 */
body.skin--responsive .sidebar a > img {
max-width: none !important;
}
/* Disable backgrounds via style attribute in night mode Eg.https://phabricator.wikimedia.org/F55243859
* https://en.wikipedia.org/w/index.php?title=Laissez-faire
*/
@media screen {
html.skin-theme-clientpref-night .sidebar:not( .notheme ) .sidebar-list-title,
html.skin-theme-clientpref-night .sidebar:not( .notheme ) .sidebar-title-with-pretitle {
background: transparent !important;
}
html.skin-theme-clientpref-night .sidebar:not( .notheme ) .sidebar-title-with-pretitle a {
color: var( --color-progressive ) !important;
}
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .sidebar:not( .notheme ) .sidebar-list-title,
html.skin-theme-clientpref-os .sidebar:not( .notheme ) .sidebar-title-with-pretitle {
background: transparent !important;
}
html.skin-theme-clientpref-os .sidebar:not( .notheme ) .sidebar-title-with-pretitle a {
color: var( --color-progressive ) !important;
}
}
@media print {
body.ns-0 .sidebar {
display: none !important;
}
}
fuz5aa4p4n4l6g77yd5omfh4n7prjo0
Wikipedia:Tirtirid degdeg ah
4
51680
311178
306948
2026-10-26T10:06:54Z
Isma4l
41797
/* Maqaallada (A) */
311178
wikitext
text/x-wiki
{{Policy|subcategory=tirtirid|WP:SD|WP:CSD|WP:SPEEDY}}
{{nutshell|Xaalado gaar ah oo xaddidan awgood, bog waxaa tirtiri kara maamule iyada oo aan la sugin wax dood ah.}}
'''Tirtirid degdeg ah''' waa hab siinaya maamulayaasha oggolaansho guud oo ay kaga gudbi karaan doodda tirtirka, sida ay u arkaan ku habboon, isla markaana si degdeg ah ugu tirtiri karaan bogag ama faylal buuxiya mid ka mid ah '''shuruudaha tirtiridda degdegga ah''' ('''CSD''') ee hoos ku qoran. Maadaama tirtiridda dib looga noqon karo oo keliya maamulayaal, tirtiridda kale badanaa waxay dhacdaa kaddib dood, marka laga reebo tirtiridda la soo jeediyay. Tirtiridda degdegga ah waxaa loogu talagalay in lagu yareeyo waqtiga lagu bixiyo doodaha tirtirka ee bogagga ama faylasha aan lahayn fursad macquul ah oo ay kaga badbaadaan doodda.<ref>Macnahan, ''degdeg'' wuxuu tilmaamayaa habka go'aan qaadashada ee fudud, mana tilmaamayo muddada ka soo wareegtay abuurista maqaalka.</ref> Qof kasta wuu codsan karaa tirtirid degdeg ah isagoo ku daraya mid ka mid ah template-yada tirtiridda degdegga ah, laakiin maamulayaasha oo keliya ayaa si dhab ah u tirtiri kara. Inkasta oo ay jiraan siyaabo lagu diidi karo codsiyada tirtiridda degdegga ah, haddana inta badan abuuraha boggu waa inuusan ka saarin summadda la saaray bogga.
== Guud ahaan bogagga (G) ==
# Bogag cinwaankoodu aan wax macne ah lahayn {{Anchor|G1}} (tusaale: dhsjkfg).
# Bogag tijaabo ah {{Anchor|G2}} (tusaale: Ma halkan ayaan wax ku qori karaa?).
# Burburin toos ah iyo khiyaano cad. {{Anchor|G3}}
# Bogag dib loogu sameeyo isla nuxurkii kadib dood tirtirid iyo tirtirid lagu saleeyay natiijada doodda. {{Anchor|G4}}
# Bogag uu sameeyay ama tafatiray isticmaalaha laga mamnuucay ka qaybgalka tafatirka Wikipedia. Waa in uu yahay isticmaalaha keliya ee tafatiray bogga, islamarkaana aan laga qaadin mamnuucidda. {{Anchor|G5}}
# Tirtirid farsamo oo aan muran lahayn oo loogu talagalay dayactir. {{Anchor|G6}}
# Bog uu codsaday abuurihiisu in la tirtiro, haddii codsigu yahay mid niyad wanaagsan leh, isla markaana uu yahay qofka keliya ee ku daray nuxurka ugu badan bogga. {{Anchor|G7}}
# Bogag ku tiirsan bog aan jirin ama la tirtiray, sida bogagga doodda. {{Anchor|G8}}
# Tallaabooyin maamul; Wikimedia waxay xaq u leedahay inay tirtirto bog kasta xaalad gaar ah, lagumana soo celin karo oggolaansho la'aan. {{Anchor|G9}}
# Bogag loogu talagalay oo keliya weeraridda mawduuca bogga ama hanjabiddiisa. {{Anchor|G10}}
# Xayeysiisyo cad, tusaale: “Waxaan idinku martiqaadaynaa shir...” ama “Waa inaad iibsataan badeecaddan.” {{Anchor|G11}}
# Bogag ay ku jiraan codsiyo keliya. {{Anchor|G12}}
# Khudbado ama qoraallo aan lahayn xog aqooneed. {{Anchor|G13}}
# Bog madhan oo aan lahayn qoraal caadi ah.
{{Anchor|a|A|articles|ARTICLES|article|Article|ARTICLE|art|ART|arti}}
{{Anchor|ARTI}}
== Maqaallada (A) ==
# '''Aan macne lahayn''': Maqaallo aad u gaaban oo aan oggolaanayn in la fahmo mawduuca. {{Anchor|A1}}
# Maqaallo gebi ahaanba ku qoran luqad aan Af-Soomaali ahayn. {{Anchor|A2}}
# '''Aan nuxur lahayn''': sida maqaal cinwaan keliya leh ama xiriirro dibadeed keliya leh. {{Anchor|A3}}
# Maqaal loo wareejiyay mashruuc wiki kale. {{Anchor|A4}}
# Maqaallo jebinaya siyaasadda qoysaska iyo nasabka. {{Anchor|A5}}
# Maqaal si toos ah looga soo guuriyay maqaal kale oo aan xiriir la lahayn cinwaankiisa. {{Anchor|A6}}
# Taariikh nololeed qof si cad aan u buuxinayn shuruudaha milgaha. {{Anchor|A7}}
# Maqaal leh xog is khilaafsan oo isku dhex yaacsan. {{Anchor|A8}}
# Maqaal hore loo tirtiray sabab xuquuqda daabacaadda ah oo isla qofkii dib u soo geliyay. {{Anchor|A9}}
# Maqaallo leh jebin cad oo xuquuqda daabacaadda ah. {{Anchor|A10}}
# Turjumaad mashiin oo liidata. {{Anchor|A11}}
{{Anchor|Images.2FMedia|Images&Media|Images & Media|Images|IMAGES|Media|MEDIA|image|IMAGE|I}}
{{Anchor|M|img|IMG|F|f|files|Files|FILES|MD|md}}
{{Anchor|mda|MDA|Images and media}}
== Faylasha (F) ==
# Sawir xor ah oo leh nuqul la mid ah ama ka wanaagsan oo ku jira Wikipedia-da Af-Carabiga. {{Anchor|F1}}
# Sawirro dhaawacmay ama madhan. {{Anchor|F2}}
# Sawirro aan xor ahayn oo loo samayn karo beddel xor ah ama aan la isticmaalin. {{Anchor|F3}}
# Sawirro leh nuqul ku jira Commons. {{Anchor|F4}}
# Bogagga sharaxaadda sawirrada ku jira Commons haddii sharaxaaddoodu aan faa’iido lahayn. {{Anchor|F5}}
# Sawirro si soo noqnoqota loo geliyo. {{Anchor|F6}}
# Sawirro hore loo tirtiray kadibna dib loo geliyay iyada oo aan wax isbeddel ah lagu samayn. {{Anchor|F7}}
# Faylal aan ahayn sawir, cod ama muuqaal, isla markaana aan Wikipedia loogu baahnayn. {{Anchor|F8}}
== Wareejinnada (R) ==
# Wareejinno u socda bogag aan jirin. {{Anchor|R1}}
# Wareejinno ka yimaada maqaal una socda magac-bannaan kale oo aan la oggolayn. {{Anchor|R2}}
# Wareejinno aan loo baahnayn ama khaladaad qoraal oo aan macquul ahayn. {{Anchor|R3}}
== Bogagga doodda ==
# Bogagga doodda ee bogag la tirtiray. {{Anchor|Bogagga doodda1}}
# Bogagga doodda ee aan khusayn horumarinta mawduuca. {{Anchor|Bogagga doodda2}}
# Bogagga doodda ee leh wareejin.
== Bogagga isticmaalaha (U) ==
# Bog-hoosaadyada isticmaalayaasha marka uu codsado isticmaaluhu. {{Anchor|U1}}
# Bogagga doodda iyo bogagga isticmaalayaasha aan diiwaangashanayn. {{Anchor|U2}}
# Bog isticmaalaha oo leh ururin sawirro aan xor ahayn. {{Anchor|U3}}
# Bog isticmaalaha oo leh xog ama dood aan la xiriirin Wikipedia. {{Anchor|U5}}
{{Anchor|c|C|cat|CAT|category|Category|CATEGORY}}
== Qaybaha (C) ==
# Qaybaha aan la isticmaalin muddo afar maalmood ah, islamarkaana aan la filayn in la isticmaalo bisha soo socota. {{Anchor|C1}}
== Template-yada (T) ==
# Template aan lahayn isticmaal faa’iido leh ama si khalad ah loo sameeyay. {{Anchor|T1}}
== Boggaga (P) ==
# Bog aan lahayn mawduuc weyn, ama mawduuciisu yahay biqil, isla markaana aan lahayn ugu yaraan saddex mawduuc oo ka weyn biqil.
{{Box|guduud khafiif ah|Talo: Haddii aad aaminsan tahay in bog uu buuxinayo shuruudaha kor ku xusan, kuna rabto maamule inuu tirtiro, ku dar <code><nowiki>{{Shub|Sababta tirtirka}}</nowiki></code> korka bogga.}}
noouwgsmj93n05e9ds10427adtcd7s8
311179
311178
2026-10-26T10:07:11Z
Isma4l
41797
/* Faylasha (F) */
311179
wikitext
text/x-wiki
{{Policy|subcategory=tirtirid|WP:SD|WP:CSD|WP:SPEEDY}}
{{nutshell|Xaalado gaar ah oo xaddidan awgood, bog waxaa tirtiri kara maamule iyada oo aan la sugin wax dood ah.}}
'''Tirtirid degdeg ah''' waa hab siinaya maamulayaasha oggolaansho guud oo ay kaga gudbi karaan doodda tirtirka, sida ay u arkaan ku habboon, isla markaana si degdeg ah ugu tirtiri karaan bogag ama faylal buuxiya mid ka mid ah '''shuruudaha tirtiridda degdegga ah''' ('''CSD''') ee hoos ku qoran. Maadaama tirtiridda dib looga noqon karo oo keliya maamulayaal, tirtiridda kale badanaa waxay dhacdaa kaddib dood, marka laga reebo tirtiridda la soo jeediyay. Tirtiridda degdegga ah waxaa loogu talagalay in lagu yareeyo waqtiga lagu bixiyo doodaha tirtirka ee bogagga ama faylasha aan lahayn fursad macquul ah oo ay kaga badbaadaan doodda.<ref>Macnahan, ''degdeg'' wuxuu tilmaamayaa habka go'aan qaadashada ee fudud, mana tilmaamayo muddada ka soo wareegtay abuurista maqaalka.</ref> Qof kasta wuu codsan karaa tirtirid degdeg ah isagoo ku daraya mid ka mid ah template-yada tirtiridda degdegga ah, laakiin maamulayaasha oo keliya ayaa si dhab ah u tirtiri kara. Inkasta oo ay jiraan siyaabo lagu diidi karo codsiyada tirtiridda degdegga ah, haddana inta badan abuuraha boggu waa inuusan ka saarin summadda la saaray bogga.
== Guud ahaan bogagga (G) ==
# Bogag cinwaankoodu aan wax macne ah lahayn {{Anchor|G1}} (tusaale: dhsjkfg).
# Bogag tijaabo ah {{Anchor|G2}} (tusaale: Ma halkan ayaan wax ku qori karaa?).
# Burburin toos ah iyo khiyaano cad. {{Anchor|G3}}
# Bogag dib loogu sameeyo isla nuxurkii kadib dood tirtirid iyo tirtirid lagu saleeyay natiijada doodda. {{Anchor|G4}}
# Bogag uu sameeyay ama tafatiray isticmaalaha laga mamnuucay ka qaybgalka tafatirka Wikipedia. Waa in uu yahay isticmaalaha keliya ee tafatiray bogga, islamarkaana aan laga qaadin mamnuucidda. {{Anchor|G5}}
# Tirtirid farsamo oo aan muran lahayn oo loogu talagalay dayactir. {{Anchor|G6}}
# Bog uu codsaday abuurihiisu in la tirtiro, haddii codsigu yahay mid niyad wanaagsan leh, isla markaana uu yahay qofka keliya ee ku daray nuxurka ugu badan bogga. {{Anchor|G7}}
# Bogag ku tiirsan bog aan jirin ama la tirtiray, sida bogagga doodda. {{Anchor|G8}}
# Tallaabooyin maamul; Wikimedia waxay xaq u leedahay inay tirtirto bog kasta xaalad gaar ah, lagumana soo celin karo oggolaansho la'aan. {{Anchor|G9}}
# Bogag loogu talagalay oo keliya weeraridda mawduuca bogga ama hanjabiddiisa. {{Anchor|G10}}
# Xayeysiisyo cad, tusaale: “Waxaan idinku martiqaadaynaa shir...” ama “Waa inaad iibsataan badeecaddan.” {{Anchor|G11}}
# Bogag ay ku jiraan codsiyo keliya. {{Anchor|G12}}
# Khudbado ama qoraallo aan lahayn xog aqooneed. {{Anchor|G13}}
# Bog madhan oo aan lahayn qoraal caadi ah.
{{Anchor|a|A|articles|ARTICLES|article|Article|ARTICLE|art|ART|arti}}
{{Anchor|ARTI}}
== Maqaallada (A) ==
# '''Aan macne lahayn''': Maqaallo aad u gaaban oo aan oggolaanayn in la fahmo mawduuca. {{Anchor|A1}}
# Maqaallo gebi ahaanba ku qoran luqad aan Af-Soomaali ahayn. {{Anchor|A2}}
# '''Aan nuxur lahayn''': sida maqaal cinwaan keliya leh ama xiriirro dibadeed keliya leh. {{Anchor|A3}}
# Maqaal loo wareejiyay mashruuc wiki kale. {{Anchor|A4}}
# Maqaallo jebinaya siyaasadda qoysaska iyo nasabka. {{Anchor|A5}}
# Maqaal si toos ah looga soo guuriyay maqaal kale oo aan xiriir la lahayn cinwaankiisa. {{Anchor|A6}}
# Taariikh nololeed qof si cad aan u buuxinayn shuruudaha milgaha. {{Anchor|A7}}
# Maqaal leh xog is khilaafsan oo isku dhex yaacsan. {{Anchor|A8}}
# Maqaal hore loo tirtiray sabab xuquuqda daabacaadda ah oo isla qofkii dib u soo geliyay. {{Anchor|A9}}
# Maqaallo leh jebin cad oo xuquuqda daabacaadda ah. {{Anchor|A10}}
# Turjumaad mashiin oo liidata. {{Anchor|A11}}
{{Anchor|Images.2FMedia|Images&Media|Images & Media|Images|IMAGES|Media|MEDIA|image|IMAGE|I}}
{{Anchor|M|img|IMG|F|f|files|Files|FILES|MD|md}}
{{Anchor|mda|MDA|Images and media}}
== Faylasha (F) ==
# Sawir xor ah oo leh nuqul la mid ah ama ka wanaagsan oo ku jira Wikipedia-da Af-Soomaali. {{Anchor|F1}}
# Sawirro dhaawacmay ama madhan. {{Anchor|F2}}
# Sawirro aan xor ahayn oo loo samayn karo beddel xor ah ama aan la isticmaalin. {{Anchor|F3}}
# Sawirro leh nuqul ku jira Commons. {{Anchor|F4}}
# Bogagga sharaxaadda sawirrada ku jira Commons haddii sharaxaaddoodu aan faa’iido lahayn. {{Anchor|F5}}
# Sawirro si soo noqnoqota loo geliyo. {{Anchor|F6}}
# Sawirro hore loo tirtiray kadibna dib loo geliyay iyada oo aan wax isbeddel ah lagu samayn. {{Anchor|F7}}
# Faylal aan ahayn sawir, cod ama muuqaal, isla markaana aan Wikipedia loogu baahnayn. {{Anchor|F8}}
== Wareejinnada (R) ==
# Wareejinno u socda bogag aan jirin. {{Anchor|R1}}
# Wareejinno ka yimaada maqaal una socda magac-bannaan kale oo aan la oggolayn. {{Anchor|R2}}
# Wareejinno aan loo baahnayn ama khaladaad qoraal oo aan macquul ahayn. {{Anchor|R3}}
== Bogagga doodda ==
# Bogagga doodda ee bogag la tirtiray. {{Anchor|Bogagga doodda1}}
# Bogagga doodda ee aan khusayn horumarinta mawduuca. {{Anchor|Bogagga doodda2}}
# Bogagga doodda ee leh wareejin.
== Bogagga isticmaalaha (U) ==
# Bog-hoosaadyada isticmaalayaasha marka uu codsado isticmaaluhu. {{Anchor|U1}}
# Bogagga doodda iyo bogagga isticmaalayaasha aan diiwaangashanayn. {{Anchor|U2}}
# Bog isticmaalaha oo leh ururin sawirro aan xor ahayn. {{Anchor|U3}}
# Bog isticmaalaha oo leh xog ama dood aan la xiriirin Wikipedia. {{Anchor|U5}}
{{Anchor|c|C|cat|CAT|category|Category|CATEGORY}}
== Qaybaha (C) ==
# Qaybaha aan la isticmaalin muddo afar maalmood ah, islamarkaana aan la filayn in la isticmaalo bisha soo socota. {{Anchor|C1}}
== Template-yada (T) ==
# Template aan lahayn isticmaal faa’iido leh ama si khalad ah loo sameeyay. {{Anchor|T1}}
== Boggaga (P) ==
# Bog aan lahayn mawduuc weyn, ama mawduuciisu yahay biqil, isla markaana aan lahayn ugu yaraan saddex mawduuc oo ka weyn biqil.
{{Box|guduud khafiif ah|Talo: Haddii aad aaminsan tahay in bog uu buuxinayo shuruudaha kor ku xusan, kuna rabto maamule inuu tirtiro, ku dar <code><nowiki>{{Shub|Sababta tirtirka}}</nowiki></code> korka bogga.}}
a05wy47j5giqkfgjt3ry8v3irjiis33
Moorhusen
0
53312
311177
309678
2026-10-26T09:41:20Z
Fornax
48015
([[c:GR|GR]]) [[File:DEU Moorhusen (Wilstermarsch) COA.png]] → [[File:DEU Moorhusen (Wilstermarsch) COA.svg]]
311177
wikitext
text/x-wiki
{{Infobox German location
|name = Moorhusen
|image_photo =
|image_coa = DEU Moorhusen (Wilstermarsch) COA.svg
|coordinates = {{coord|53|58|N|9|23|E|format=dms|display=inline,title}}
|image_plan = Moorhusen in IZ.png
|state =
|district = Steinburg
|Amt = Itzehoe-Land
|elevation = 1
|area = 4.68
|postal_code = 25554
|area_code = 04823
|licence = IZ
|Gemeindeschlüssel = 01 0 61 070
|website = [http://www.amtitzehoe-land.de/ www.amtitzehoe-<br />land.de]
|mayor = Holger Dunker
|party =
}}
'''Moorhusen''' waa degmo ka tirsan gobolka [[Steinburg]], ee [[Schleswig-Holstein]], [[Germany|Jarmalka]].
==Tixraacyada==
{{Reflist}}
{{authority control}}
5frz50jab13xp1yzinkqra19znimpjr
MediaWiki:Gadget-Twinkle
8
53692
310890
310882
2026-10-25T12:04:19Z
Isma4l
41797
/* */
310890
wikitext
text/x-wiki
[[:en:Wikipedia:Twinkle|Twinkle]]: ku dar badhamada liiska si loo otomaatigoojiyo hawlaha caadiga ah, oo ay ku jiraan: warbixinta kharibaadda, digida kharibayaasha, codsashada tirtiridda ama dhowridda, soo dhaweynta isticmaaleyaasha, iyo calaamadaynta maqaallada ([[Wikipedia:Twinkle/Preferences|dooqyadaada]])
e35bfwrxa1if1vlj1iz2mpk69tj85dq
Wikipedia:Twinkle/Preferences
4
53695
310885
2026-10-25T12:01:55Z
Isma4l
41797
Bog cusub: <templatestyles src="Wikipedia:Twinkle/Preferences/styles.css"/> Isticmaal dejinta guddiga hoose si aad ugu habayso [[Wikipedia:Twinkle|Twinkle]] si uu ugu ekaado doorbidyadaada shakhsiga ah. Ogow in doorbidyadaada lagu kaydiyo [[Special:MyPage/twinkleoptions.js|hoos-bog ka tirsan boggaaga isticmaale]]. Kaliya adiga, [[Wikipedia:Interface administrators|maamulayaasha is dhexgalka Wikipedia]], iyo :Meta:Special:MyLanguage/Interface editors|tifatirayaasha is dhexgalka caalamiga...
310885
wikitext
text/x-wiki
<templatestyles src="Wikipedia:Twinkle/Preferences/styles.css"/>
Isticmaal dejinta guddiga hoose si aad ugu habayso [[Wikipedia:Twinkle|Twinkle]] si uu ugu ekaado doorbidyadaada shakhsiga ah.
Ogow in doorbidyadaada lagu kaydiyo [[Special:MyPage/twinkleoptions.js|hoos-bog ka tirsan boggaaga isticmaale]]. Kaliya adiga, [[Wikipedia:Interface administrators|maamulayaasha is dhexgalka Wikipedia]], iyo [[:Meta:Special:MyLanguage/Interface editors|tifatirayaasha is dhexgalka caalamiga ah]] ayaa wax ka beddeli kara doorbidyadaada, laakiin dejinta aad dooratay ayaa qof walba u muuqata sida koodka [[JavaScript]]. Uma baahnid inaad gacanta ku soo dejiso doorbidyadaada, Twinkle ayaa kuu samayn doona adiga.
{{-}}
<div id="twinkle-config" class="nopopups"> <!-- si uu u waafajiyo qaabka SimpleWindow -->
<div id="twinkle-config-titlebar" style="line-height: 1em; height: 1em; padding: 0.4em 0.3em 0.5em;">'''Doorbidyada Twinkle'''</div>
<div id="twinkle-config-content" style="padding: 0.4em;">
<div id="twinkle-config-notwinkle">'''Waa inaad haysataa Twinkle oo rakiban (haddii ay ahaan lahayd [[:en:Wikipedia:Gadget|qalab ]] ama [[Wikipedia:Twinkle#Installation|gacanta ugu rakiban sida qoraal isticmaale]]) si aad u isticmaasho boggan.'''<!-- <br />(Haddii aad Twinkle gacanta ku rakibtay, waxaad u baahan tahay inaad ku darto qaybta "twinkleconfig" si tani u shaqeyso.) --><p>Haddii Twinkle uu rakiban yahay oo uu si fiican u shaqeynayo, waxaa laga yaabaa inaad u baahato inaad sugto daqiiqado kooban si qoraalku u soo dejisto.</p></div>
</div>
</div><noinclude>
{{pp-semi-indef}}</noinclude>
{{DEFAULTSORT:Twinkle Preferences}}
[[Category:Qalabka ka hortagga kharibaadda ee Wikipedia]]
[[Category:Qoraallada Wikipedia]]
adakochm20wc0lwrgr7vmctryi4xt9q
310888
310885
2026-10-25T12:03:29Z
Isma4l
41797
La ilaaliyay "[[Wikipedia:Twinkle/Preferences]]" ([Wax ka badal=U ogolow kaliya isticmaalayaasha la xaqiijiyay] (aan xad lahayn) [Wareeji=U ogolow kaliya isticmaalayaasha la xaqiijiyay] (aan xad lahayn))
310885
wikitext
text/x-wiki
<templatestyles src="Wikipedia:Twinkle/Preferences/styles.css"/>
Isticmaal dejinta guddiga hoose si aad ugu habayso [[Wikipedia:Twinkle|Twinkle]] si uu ugu ekaado doorbidyadaada shakhsiga ah.
Ogow in doorbidyadaada lagu kaydiyo [[Special:MyPage/twinkleoptions.js|hoos-bog ka tirsan boggaaga isticmaale]]. Kaliya adiga, [[Wikipedia:Interface administrators|maamulayaasha is dhexgalka Wikipedia]], iyo [[:Meta:Special:MyLanguage/Interface editors|tifatirayaasha is dhexgalka caalamiga ah]] ayaa wax ka beddeli kara doorbidyadaada, laakiin dejinta aad dooratay ayaa qof walba u muuqata sida koodka [[JavaScript]]. Uma baahnid inaad gacanta ku soo dejiso doorbidyadaada, Twinkle ayaa kuu samayn doona adiga.
{{-}}
<div id="twinkle-config" class="nopopups"> <!-- si uu u waafajiyo qaabka SimpleWindow -->
<div id="twinkle-config-titlebar" style="line-height: 1em; height: 1em; padding: 0.4em 0.3em 0.5em;">'''Doorbidyada Twinkle'''</div>
<div id="twinkle-config-content" style="padding: 0.4em;">
<div id="twinkle-config-notwinkle">'''Waa inaad haysataa Twinkle oo rakiban (haddii ay ahaan lahayd [[:en:Wikipedia:Gadget|qalab ]] ama [[Wikipedia:Twinkle#Installation|gacanta ugu rakiban sida qoraal isticmaale]]) si aad u isticmaasho boggan.'''<!-- <br />(Haddii aad Twinkle gacanta ku rakibtay, waxaad u baahan tahay inaad ku darto qaybta "twinkleconfig" si tani u shaqeyso.) --><p>Haddii Twinkle uu rakiban yahay oo uu si fiican u shaqeynayo, waxaa laga yaabaa inaad u baahato inaad sugto daqiiqado kooban si qoraalku u soo dejisto.</p></div>
</div>
</div><noinclude>
{{pp-semi-indef}}</noinclude>
{{DEFAULTSORT:Twinkle Preferences}}
[[Category:Qalabka ka hortagga kharibaadda ee Wikipedia]]
[[Category:Qoraallada Wikipedia]]
adakochm20wc0lwrgr7vmctryi4xt9q
310889
310888
2026-10-25T12:03:49Z
Isma4l
41797
/* */
310889
wikitext
text/x-wiki
<templatestyles src="Wikipedia:Twinkle/Preferences/styles.css"/>
Isticmaal dejinta guddiga hoose si aad ugu habayso [[Wikipedia:Twinkle|Twinkle]] si uu ugu ekaado doorbidyadaada shakhsiga ah.
Ogow in doorbidyadaada lagu kaydiyo [[Special:MyPage/twinkleoptions.js|hoos-bog ka tirsan boggaaga isticmaale]]. Kaliya adiga, [[Wikipedia:Interface administrators|maamulayaasha is dhexgalka Wikipedia]], iyo [[:Meta:Special:MyLanguage/Interface editors|tifatirayaasha is dhexgalka caalamiga ah]] ayaa wax ka beddeli kara doorbidyadaada, laakiin dejinta aad dooratay ayaa qof walba u muuqata sida koodka [[JavaScript]]. Uma baahnid inaad gacanta ku soo dejiso doorbidyadaada, Twinkle ayaa kuu samayn doona adiga.
{{-}}
<div id="twinkle-config" class="nopopups"> <!-- si uu u waafajiyo qaabka SimpleWindow -->
<div id="twinkle-config-titlebar" style="line-height: 1em; height: 1em; padding: 0.4em 0.3em 0.5em;">'''Doorbidyada Twinkle'''</div>
<div id="twinkle-config-content" style="padding: 0.4em;">
<div id="twinkle-config-notwinkle">'''Waa inaad haysataa Twinkle oo rakiban (haddii ay ahaan lahayd [[:en:Wikipedia:Gadget|qalab ]] ama [[Wikipedia:Twinkle#Installation|gacanta ugu rakiban sida qoraal isticmaale]]) si aad u isticmaasho boggan.'''<!-- <br />(Haddii aad Twinkle gacanta ku rakibtay, waxaad u baahan tahay inaad ku darto qaybta "twinkleconfig" si tani u shaqeyso.) --><p>Haddii Twinkle uu rakiban yahay oo uu si fiican u shaqeynayo, waxaa laga yaabaa inaad u baahato inaad sugto daqiiqado kooban si qoraalku u soo dejisto.</p></div>
</div>
</div><noinclude>
</noinclude>
{{DEFAULTSORT:Twinkle Preferences}}
[[Category:Qalabka ka hortagga kharibaadda ee Wikipedia]]
[[Category:Qoraallada Wikipedia]]
5jw83xdw4vt278u8xibzam4hqcd895z
Wikipedia:Twinkle/Preferences/styles.css
4
53696
310886
2026-10-25T12:02:34Z
Isma4l
41797
Isma4l abuuray bogga [[Wikipedia:Twinkle/Preferences/styles.css]] isagoo oo leh nooc nuxur aan caadi ahayn "CSS la nadiifiyay"
310886
sanitized-css
text/css
phoiac9h4m842xq45sp7s6u21eteeq1
310887
310886
2026-10-25T12:02:53Z
Isma4l
41797
Abuuray
310887
sanitized-css
text/css
/* Twinkle config */
#twinkle-config {
border: 1px solid #666;
background: var(--twinkle-bgcolor-dialog, #F0F8FF);
color: inherit;
}
#twinkle-config label {
color: var(--color-base, #202122);
}
#twinkle-config-titlebar {
background: var(--twinkle-bgcolor-titlebar, #BCCADF);
color: inherit;
}
#twinkle-config-buttonpane {
background: var(--twinkle-bgcolor-titlebar, #BCCADF);
color: inherit;
padding: 0.5em;
}
1wvntv4j9qpv2zlgubvus07p6cj4hj1
MediaWiki:Gadget-confirmationRollback-mobile.js
8
53697
310891
2026-10-25T12:06:51Z
Isma4l
41797
Abuuray
310891
javascript
text/javascript
/********************************************************************
** ***DIIBAAD: FAYLKA QALABKA CAALAMIGA AH*** **
** Wixii isbeddel ah ee lagu sameeyo faylkan waxay saameyn doonaan **
** isticmaaleyaal badan. Fadlan ka wada hadal isbeddellada bogga **
** wada-hadalka ama [[WP:VPT]] ka hor inta aadan tifatirin. **
********************************************************************/
//<nowiki>
(function() {
if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
$(".mw-rollback-link").on('click', function(e) {
var linkText = $(e.target).text(),
count = linkText.match(/\d/) ? linkText.match(/\d+/)[0] : null,
message = 'Ma rabtaa inaad dib u celiso ' + (count ? count + ' tifatir' : 'tifatirka') + ' uu sameeyay ' + mw.util.getParamValue('from',e.target.href) + '?';
if(!confirm(message)) return e.preventDefault();
});
}
}());
//</nowiki>
j4fgntd4fkxqrw22jo9ao4v3qkvj23e
MediaWiki:Gadget-confirmationRollback-mobile
8
53698
310892
2026-10-25T12:09:01Z
Isma4l
41797
/* */ Abuuray
310892
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-default}}">(D)</abbr></sup> U baahan xaqiijin ka hor inta aan la fulin dib u celinta qalabka gacanta
ncyybsry1xce3uvd98lyb7qcvt2kf5u
MediaWiki:Gadget-modrollback.js
8
53699
310893
2026-10-25T12:10:24Z
Isma4l
41797
Abuuray
310893
javascript
text/javascript
mw.loader.load( '//www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-modrollback.js&action=raw&ctype=text/javascript' );
buhtrsjlhs6lk8w8vohrnsslebh36sq
MediaWiki:Gadget-modrollback
8
53700
310894
2026-10-25T12:11:25Z
Isma4l
41797
/* */
310894
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-sister}}">(S)</abbr></sup> Ka dib marka aad dib u celiso tafatirka isticmaale, si otomaatig ah u fur boggiisa tabarucaadka. (Fiiro gaar ah: Ma waafaqsana doorbiditaanka muuqaalka ee "{{int:Tog-showrollbackconfirmation}}").
j9ap3i2ibbyifnxweqj9k1uvuum2f5c
MediaWiki:Gadget-section-daalacashada
8
53701
310895
2026-10-25T12:16:32Z
Isma4l
41797
/* */
310895
wikitext
text/x-wiki
Daalacan
6xg25yw809keofizbqz5x7s5g0gfdd7
MediaWiki:Gadget-removeAccessKeys.js
8
53702
310896
2026-10-25T12:17:44Z
Isma4l
41797
Abuuray
310896
javascript
text/javascript
// **********************************************************************
// ** ***DIIBAAD: FAYLKA QALABKA CAALAMIGA AH*** **
// ** isbeddellada lagu sameeyo faylkan waxay saameeyaan **
// ** isticmaaleyaal badan. **
// ** fadlan kala hadal bogga wada-hadalka ka hor inta aadan tifatirin **
// ** **
// **********************************************************************
// Laga soo dejiyay nooca taariikhdu ahayd: 2007-04-17T22:22:27
// Deminta furayaasha gelitaanka, fiiri [[Wikipedia talk:WikiProject User scripts/Scripts/removeAccessKeys|bogga wada-hadalka]]
jQuery(document).ready(function($) {
if (mw.config.get('skin') == 'vector') {
var head = document.getElementById('mw-head');
if (head) removeKeys(head.getElementsByTagName('a'));
var panel = document.getElementById('mw-panel');
if (panel) removeKeys(panel.getElementsByTagName('a'));
} else {
var columnOne = document.getElementById('column-one');
if (!columnOne) columnOne = document.getElementById('mw_portlets');
if (!columnOne) return;
removeKeys(columnOne.getElementsByTagName('a'));
var cactions = document.getElementById('p-cactions');
if (cactions) removeKeys(cactions.getElementsByTagName('a'));
var personal = document.getElementById('p-personal');
if (personal) removeKeys(personal.getElementsByTagName('a'));
}
removeKeys(document.getElementsByTagName('input'));
removeKeys(document.getElementsByTagName('label'));
});
function removeKeys(nodeList) {
var el;
for (var i = 0; i < nodeList.length; i++) {
el = nodeList[i];
if (!el.accessKey) continue;
if (!window.removeAccessKeys || removeAccessKeys.indexOf(el.accessKey) >= 0) {
el.accessKey = ''; // el.setAttribute('accessKey', '');
$(el).updateTooltipAccessKeys();
}
}
}
n3f5tliar2o305scq1qzk53ck8qdh0e
MediaWiki:Gadget-removeAccessKeys
8
53703
310897
2026-10-25T12:18:48Z
Isma4l
41797
/* */
310897
wikitext
text/x-wiki
Demi [[:en:Wikipedia:Keyboard shortcuts|furayaasha gelitaanka]]
ttsv3vjzba5e5zde3ew9gexkmvjmem7
MediaWiki:Gadget-searchFocus.js
8
53704
310898
2026-10-25T12:20:07Z
Isma4l
41797
Abuuray
310898
javascript
text/javascript
// _________________________________________________________________________________________
// | |
// | === DIIBAAD: FAYLKA QALABKA CAALAMIGA AH === |
// | Isbeddellada lagu sameeyo boggan waxay saameeyaan isticmaaleyaal badan. |
// | Fadlan kala hadal isbeddellada bogga wada-hadalka ama [[Wikipedia_talk:Gadget]] |
// | ka hor inta aadan tifatirin. |
// |_________________________________________________________________________________________|
//
if ( mw.config.get( 'wgIsMainPage' ) ) {
$( function () {
$( '#searchInput' ).focus();
} );
}
oiav5d8zt9w7ny8ymf8mtepw7hdg96v
MediaWiki:Gadget-searchFocus
8
53705
310899
2026-10-25T12:21:17Z
Isma4l
41797
/* */ Abuuray
310899
wikitext
text/x-wiki
Ku hay cursor-ka sanduuqa raadinta markii la soo dejinayo Bogga Hore
b8f695thx0zh498ics2lh1w2lb62jcg
MediaWiki:Gadget-ImageAnnotator.js
8
53706
310900
2026-10-25T12:25:30Z
Isma4l
41797
Abuuray
310900
javascript
text/javascript
/*
ImageAnnotator v2.3.2
Faahfaahinta sawirka. Sawir xaglaha sawirka ee thumbnail-ka sawirka ee lagu muujiyey bogga
sharaxaadda sawirka oo ku xir sharaxaad qoraal ah oo la soo bandhigi doono marka jiirka
uu dul maro xaglaha. Haddii sawirku leeyahay faahfaahin, soo bandhig xaglaha. Ku dar badhan
si aad u abuurto faahfaahin cusub.
Fiiro gaar ah: haddii sawir leh faahfaahin lagu dul qoro nuqul cusub, kaliya soo bandhig
faahfaahinta haddii cabbirka sawirka sare uu la mid yahay cabbirka la kaydiyay si sax ah.
Si loo soo celiyo faahfaahinta, qofku wuxuu u baahan doonaa inuu si gacanta ah u tifatiro bogga
sharaxaadda sawirka, isaga oo hagaajinaya cabbirka sawirka iyo isku-duwaha xagasha, ama dib u geliya faahfaahinta.
Qoraaga: [[User:Lupo]], Juun 2009 - Maarso 2010
Ruqsadda: Ruqsad afar jibaaran GFDL, GPL, LGPL iyo Creative Commons Attribution 3.0 (CC-BY-3.0)
Dooro ruqsad kasta oo ka mid ah kuwan aad ugu jeceshahay :-)
Fiiri http://commons.wikimedia.org/wiki/Help:Gadget-ImageAnnotator wixii dukumeenti ah.
*/
/* global importScript, importScriptURI,
LAPI, Tooltip, Tooltips, TextCleaner, UIElements, Buttons,
ImageAnnotator, ImageAnnotator_disable */
/* eslint-disable one-var, vars-on-top, camelcase, no-use-before-define,
eqeqeq, no-alert, no-loop-func, no-inner-declarations */
if ( typeof ImageAnnotator === 'undefined' ) { // Ka ilaali ku darista badan
importScript( 'MediaWiki:LAPI.js' );
importScript( 'MediaWiki:Tooltips.js' );
importScript( 'MediaWiki:TextCleaner.js' );
importScript( 'MediaWiki:UIElements.js' );
( function () { // Baaxadda maxalliga ah
var ImageAnnotator_config = null;
var ImageAnnotation = function () {
this.initialize.apply( this, arguments );
};
ImageAnnotation.compare = function ( a, b ) {
var result = b.area() - a.area();
if ( result !== 0 ) { return result; }
// Kaliya si loo hubiyo in nidaamku buuxo
return a.model.id - b.model.id;
};
ImageAnnotation.prototype = {
// Xagasha lagu soo bandhigayo sawirka: div leh pos iyo size
view: null,
// Matalaadda gudaha ee faahfaahinta
model: null,
// Qalab-tilmaameedka si loo soo bandhigo faahfaahinta
tooltip: null,
// Nuxurka qalab-tilmaameedka
content: null,
// Tixraaca daawadayaasha ee xusuus tani ay leedahay
viewer: null,
initialize: function ( node, viewer, id ) {
var is_new = false;
var view_w = 0, view_h = 0, view_x = 0, view_y = 0;
this.viewer = viewer;
if ( LAPI.DOM.hasClass( node, IA.annotation_class ) ) {
// Soo saar xogta aan u baahanahay
var x = IA.getIntItem( 'view_x_' + id, viewer.scope );
var y = IA.getIntItem( 'view_y_' + id, viewer.scope );
var w = IA.getIntItem( 'view_w_' + id, viewer.scope );
var h = IA.getIntItem( 'view_h_' + id, viewer.scope );
var html = IA.getRawItem( 'content_' + id, viewer.scope );
if ( x === null || y === null || w === null || h === null || html === null ) { throw new Error( 'Xusuusin aan shaqaynayn' ); }
if ( x < 0 || x >= viewer.full_img.width || y < 0 || y >= viewer.full_img.height ) { throw new Error( 'Xusuusin aan shaqaynayn: asalka xusuusinta ' + id + ' waa mid aan shaqaynayn' ); }
if (
x + w > viewer.full_img.width + 10 ||
y + h > viewer.full_img.height + 10
) {
throw new Error( 'Xusuusin aan shaqaynayn: cabbirku wuxuu ka baxayaa sawirka xusuusinta ' + id );
}
// Xusuusinta ay qoreen noocyada hore waxaa laga yaabaa inay yara weynaadaan, taas oo keentay + 10 kor ku xusan. Hagaaji tan.
if ( x + w > viewer.full_img.width ) { w = viewer.full_img.width - x; }
if ( y + h > viewer.full_img.height ) { h = viewer.full_img.height - y; }
view_w = Math.floor( w / viewer.factors.dx );
view_h = Math.floor( h / viewer.factors.dy );
view_x = Math.floor( x / viewer.factors.dx );
view_y = Math.floor( y / viewer.factors.dy );
this.view = LAPI.make(
'div', null,
{
position: 'absolute',
display: 'none',
lineHeight: '0px', // IE
fontSize: '0px', // IE
top: String( view_y ) + 'px',
left: String( view_x ) + 'px',
width: String( view_w ) + 'px',
height: String( view_h ) + 'px'
}
);
// Waxaan ku dari doonaa aragtida DOM-ka marka aan soo dejino dhammaan xusuusinta
this.model = {
id: id,
dimension: { x: x, y: y, w: w, h: h },
wiki: '',
html: html.cloneNode( true )
};
} else {
is_new = true;
this.view = node;
this.model = {
id: -1,
dimension: null,
wiki: '',
html: null
};
view_w = this.view.offsetWidth - 2; // Ka jar ballaca xadka la isku daray
view_h = this.view.offsetHeight - 2;
view_x = this.view.offsetLeft;
view_y = this.view.offsetTop;
}
// Ku qasab cabbir ugu yar aragtida. Xarun ka dhig afar geesaha 6x6px dhexda aragtida hore.
// Haddii aan isdhaafino xadka sawirka, adjustRectangleSize ayaa daryeeli doonta goor dambe.
if ( view_w < 6 ) { view_x = Math.floor( view_x + view_w / 2 - 3 ); view_w = 6; }
if ( view_h < 6 ) { view_y = Math.floor( view_y + view_h / 2 - 3 ); view_h = 6; }
Object.merge(
{
left: String( view_x ) + 'px',
top: String( view_y ) + 'px',
width: String( view_w ) + 'px',
height: String( view_h ) + 'px'
},
this.view.style
);
this.view.style.zIndex = 500; // Ka hooseeya qalab-tilmaameedyada
try {
this.view.style.border = '1px solid ' + this.viewer.outer_border;
} catch ( ex ) {
this.view.style.border = '1px solid ' + IA.outer_border;
}
this.view.appendChild(
LAPI.make(
'div', null
, { lineHeight: '0px', // IE
fontSize: '0px', // IE
width: String( Math.max( view_w - 2, 0 ) ) + 'px', // -2 si looga tago meel bannaan oo xadka ah
height: String( Math.max( view_h - 2, 0 ) ) + 'px'
}
)
// width=100% si sax ah uma shaqeyso: xadka div-ka gudaha ayaa ka muuqda bannaanka dhinaca midig iyo hoose ee FF.
);
try {
this.view.firstChild.style.border = '1px solid ' + this.viewer.inner_border;
} catch ( ex ) {
this.view.firstChild.style.border = '1px solid ' + IA.inner_border;
}
if ( is_new ) { viewer.adjustRectangleSize( this.view ); }
// IE si u gaar ah ayay dhacdada ugu gudbisaa aragtida xitaa haddii ay dabooliso daboolkayagu, iyada oo soo bandhigeysa qalab-tilmaameedyada
// marka la sawirayo afar geesood cusub, taas oo wareerinaysa oo soo saarta riyo xulasho ah. Sida darteed waxaan kaliya
// soo bandhignaa afar geesood oo ceyriin ah iyada oo aan la lifaaqin wax qalab-tilmaameed ah inta la sawirayo. Yaab badan.
this.dummy = this.view.cloneNode( true );
viewer.img_div.appendChild( this.dummy );
if ( !is_new ) {
// Xusuusinta cusub waxay helayaan qalab-tilmaameedkooda kaliya marka tifaftiruhu kaydiyo, haddii kale IE waxaa laga yaabaa inay isku daydo
// inay furto haddii jiirku u soo guuro aragtida xitaa inkastoo uu jiro daboolka korkooda!
this.setTooltip();
}
},
setTooltip: function () {
if ( this.tooltip || !this.view ) { return; } // Hore bay u degan tahay, ama waa musuqmaasuq
// Fiiro gaar ah: IE, ha ka dhigin qalab-tilmaameedyada inay soo muuqdaan si otomaatig ah. IE si sax ah uma samayso bartilmaameedyada
// hufan oo waa inaan annagu soo bandhignaa oo qarinno annaga oo adeegsanaya dhagaystaha mousemove ee daawadayaasha
// si kastaba ha ahaatee. Dhacdada marmarka qaored ee IE u dirto qalab-tilmaameedka waxay keeni kartaa libiqsi xun.
this.tooltip = new Tooltip(
this.view.firstChild,
this.display.bind( this ),
{
activate: ( LAPI.DOM.is_ie ? Tooltip.NONE : Tooltip.HOVER ),
deactivate: ( LAPI.DOM.is_ie ? Tooltip.ESCAPE : Tooltip.LEAVE ),
close_button: null,
mode: Tooltip.MOUSE,
mouse_offset: { x: -5, y: -5, dx: ( IA.is_rtl ? -1 : 1 ), dy: 1 },
open_delay: 0,
hide_delay: 0,
onclose: ( function ( tooltip, evt ) {
if ( this.view ) {
try {
this.view.style.border = '1px solid ' + this.viewer.outer_border;
} catch ( ex ) {
this.view.style.border = '1px solid ' + IA.outer_border;
}
}
if ( this.viewer.tip == tooltip ) { this.viewer.tip = null; }
// Qari dhammaan sanduuqyada haddii aan joogno bannaanka sawirka. Waxay ku tiirsan tahay qaris hubinaysa
// isku-duwayasha! (Haddii kale, mar walba waanu qarin lahayn...)
if ( evt ) { this.viewer.hide( evt ); }
} ).bind( this ),
onopen: ( function ( tooltip ) {
if ( this.view ) {
try {
this.view.style.border = '1px solid ' + this.viewer.active_border;
} catch ( ex ) {
this.view.style.border = '1px solid ' + IA.active_border;
}
}
this.viewer.tip = tooltip;
} ).bind( this )
},
IA.tooltip_styles
);
},
display: function ( evt ) {
if ( !this.content ) {
this.content = LAPI.make( 'div' );
var main = LAPI.make( 'div' );
this.content.appendChild( main );
this.content.main = main;
if ( this.model.html ) { main.appendChild( this.model.html.cloneNode( true ) ); }
// Hubi in popup-ku uu koobayo dhammaan sabeynayaasha
this.content.appendChild( LAPI.make( 'div', null, { clear: 'both' } ) );
if ( this.viewer.may_edit ) {
this.content.button_section = LAPI.make(
'div',
null,
{
fontSize: 'smaller',
textAlign: ( IA.is_rtl ? 'left' : 'right' ),
borderTop: IA.tooltip_styles.border
}
);
this.content.appendChild( this.content.button_section );
this.content.button_section.appendChild( LAPI.DOM.makeLink(
'#',
ImageAnnotator.UI.get( 'wpImageAnnotatorEdit', true ),
null,
LAPI.Evt.makeListener( this, this.edit )
) );
if ( ImageAnnotator_config.mayDelete() ) {
this.content.button_section.appendChild( document.createTextNode( '\xa0' ) );
this.content.button_section.appendChild( LAPI.DOM.makeLink(
'#',
ImageAnnotator.UI.get( 'wpImageAnnotatorDelete', true ),
null,
LAPI.Evt.makeListener( this, this.remove_event )
) );
}
}
}
return this.content;
},
edit: function ( evt ) {
if ( IA.canEdit() ) { IA.editor.editNote( this ); }
if ( evt ) { return LAPI.Evt.kill( evt ); }
return false;
},
remove_event: function ( evt ) {
if ( IA.canEdit() ) { this.remove(); }
return LAPI.Evt.kill( evt );
},
remove: function () {
if ( !this.content ) { // Xusuusin cusub: kaliya burburi.
this.destroy();
return true;
}
if ( !ImageAnnotator_config.mayDelete() ) { return false; }
// Xir oo ka saar qalab-tilmaameedka kaliya haddii tifatirku guulaystay! Xaggee iyo sidee loo soo bandhigaa fariimaha qaladka?
var reason = '';
if ( !ImageAnnotator_config.mayBypassDeletionPrompt() || !window.ImageAnnotator_noDeletionPrompt ) {
// Weydii sababta ka saaridda
reason = prompt( ImageAnnotator.UI.get( 'wpImageAnnotatorDeleteReason', true ), '' );
if ( reason === null ) { return false; } // La joojiyay
reason = reason.trim();
if ( !reason.length ) {
if ( !ImageAnnotator_config.emptyDeletionReasonAllowed() ) { return false; }
}
// Dib u soo bandhig qalab-tilmaameedka (iyada oo aan dib loo hagaajin, ma hayno isku-duwaha jiirka halkan) haddii
// la qariyay sababtoo ah digida. Haddii ay suurtagal tahay, waxaan rabnaa in isticmaalahu arko wareegaha.
this.tooltip.show_now( this.tooltip );
}
var self = this;
var spinnerId = 'image_annotation_delete_' + this.model.id;
LAPI.Ajax.injectSpinner( this.content.button_section.lastChild, spinnerId );
if ( this.tooltip ) { this.tooltip.size_change(); }
LAPI.Ajax.editPage(
mw.config.get( 'wgPageName' ),
function ( doc, editForm, failureFunc, revision_id ) {
try {
if ( revision_id && revision_id != mw.config.get( 'wgCurRevisionId' ) ) { throw new Error( '#Nooca bogga (aqoonsiga dib-u-eegista) isma waafaqsana: is khilaafka tifatirka.' ); }
var textbox = editForm.wpTextbox1;
if ( !textbox ) { throw new Error( '#Server-ku wuxuu ku jawaabay bog tifatir oo aan shaqaynayn.' ); }
var pagetext = textbox.value.replace( /\r\n/g, '\n' );
// Caadi ka dhig maaraynta dhamaadka-safka ee kala duwan. Opera iyo IE waxay isticmaali karaan \r\n, halka kuwa kale
// browser-ada ay isticmaalaan '\n'. Fiiro gaar ah in dhammaan browser-ada ay sameeyaan waxa saxda ah haddii '\n' la daro.
// Caadi ahaan ma danayno, laakiin halkan waxaan u baahanahay tan si aan u hubino inaanan ka tagin saf dheera ah
// jabinta marka aan ka saarno xusuusinta.
IA.setWikitext( pagetext );
var span = IA.findNote( pagetext, self.model.id );
if ( !span ) { // Hmmm? Uma muuqato inay jirto
LAPI.Ajax.removeSpinner( spinnerId );
if ( self.tooltip ) { self.tooltip.size_change(); }
self.destroy();
return;
}
var char_before = 0;
var char_after = 0;
if ( span.start > 0 ) { char_before = pagetext.charCodeAt( span.start - 1 ); }
if ( span.end < pagetext.length ) { char_after = pagetext.charCodeAt( span.end ); }
if (
String.fromCharCode( char_before ) == '\n' &&
String.fromCharCode( char_after ) == '\n'
) {
span.start = span.start - 1;
}
pagetext = pagetext.substring( 0, span.start ) + pagetext.substring( span.end );
textbox.value = pagetext;
var summary = editForm.wpSummary;
if ( !summary ) {
throw new Error( '#Goobta kooban lama helin. Hubi in boggaga tifatirku leeyihiin XHTML sax ah.' );
}
IA.setSummary(
summary,
ImageAnnotator.UI.get( 'wpImageAnnotatorRemoveSummary', true ) ||
'[[MediaWiki talk:Gadget-ImageAnnotator.js|Ka saarista xusuusinta sawirka]]$1',
( reason.length ? reason + ': ' : '' ) + self.model.wiki
);
} catch ( ex ) {
failure( null, ex );
return;
}
var edit_page = doc;
LAPI.Ajax.submitEdit(
editForm,
function ( request ) {
if ( edit_page.isFake && ( typeof edit_page.dispose === 'function' ) ) { edit_page.dispose(); }
var revision_id = LAPI.WP.revisionFromHtml( request.responseText );
if ( !revision_id ) {
failureFunc( request, new Error( 'Aqoonsiga dib-u-eegista lama helin. Fadlan dib u soo deji bogga.' ) );
return;
}
mw.config.set( 'wgCurRevisionId', revision_id ); // Kor u qaad aqoonsiga dib-u-eegista!!
LAPI.Ajax.removeSpinner( spinnerId );
if ( self.tooltip ) { self.tooltip.size_change(); }
self.destroy();
},
function ( request, ex ) {
if ( edit_page.isFake && ( typeof edit_page.dispose === 'function' ) ) { edit_page.dispose(); }
failureFunc( request, ex );
}
);
},
function ( request, ex ) {
// Guuldaro. Maxaa hadda la yeelayaa? TODO: Hirgeli nooc ka mid ah jawaab-celinta isticmaalaha.
LAPI.Ajax.removeSpinner( spinnerId );
if ( self.tooltip ) { self.tooltip.size_change(); }
}
);
return true;
},
destroy: function () {
if ( this.view ) { LAPI.DOM.removeNode( this.view ); }
if ( this.dummy ) { LAPI.DOM.removeNode( this.dummy ); }
if ( this.tooltip ) { this.tooltip.hide_now(); }
if ( this.model && this.model.id > 0 && this.viewer ) { this.viewer.deregister( this ); }
this.model = null;
this.view = null;
this.content = null;
this.tooltip = null;
this.viewer = null;
},
area: function () {
if ( !this.model || !this.model.dimension ) { return 0; }
return ( this.model.dimension.w * this.model.dimension.h );
},
cannotEdit: function () {
if ( this.content && this.content.button_section ) {
LAPI.DOM.removeNode( this.content.button_section );
this.content.button_section = null;
if ( this.tooltip ) { this.tooltip.size_change(); }
}
}
}; // dhammaadka ImageAnnotation
var ImageAnnotationEditor = function () { this.initialize.apply( this, arguments ); };
ImageAnnotationEditor.prototype = {
initialize: function () {
var editor_width = 50;
// Ixtiraam goobta ballaca ee isticmaalahu cayimay haddii ay jirto
if ( window.ImageAnnotationEditor_columns &&
!isNaN( window.ImageAnnotationEditor_columns ) &&
window.ImageAnnotationEditor_columns >= 30 &&
window.ImageAnnotationEditor_columns <= 100 ) {
editor_width = window.ImageAnnotationEditor_columns;
}
this.editor = new LAPI.Edit(
'', editor_width, 6,
{
box: ImageAnnotator.UI.get( 'wpImageAnnotatorEditorLabel', false ),
preview: ImageAnnotator.UI.get( 'wpImageAnnotatorPreview', true ).capitalizeFirst(),
save: ImageAnnotator.UI.get( 'wpImageAnnotatorSave', true ).capitalizeFirst(),
revert: ImageAnnotator.UI.get( 'wpImageAnnotatorRevert', true ).capitalizeFirst(),
cancel: ImageAnnotator.UI.get( 'wpImageAnnotatorCancel', true ).capitalizeFirst(),
nullsave: ImageAnnotator_config.mayDelete() ?
ImageAnnotator.UI.get( 'wpImageAnnotatorDelete', true ).capitalizeFirst() :
null,
post: ImageAnnotator.UI.get( 'wpImageAnnotatorCopyright', false )
},
{
onsave: this.save.bind( this ),
onpreview: this.onpreview.bind( this ),
oncancel: this.cancel.bind( this ),
ongettext: function ( text ) {
if ( text == null ) { return ''; }
text = text.trim()
.replace( /\{\{(\s*ImageNote(End)?\s*\|)/g, '{{$1' );
// Ka ilaali dadka isku dayaya in ay jabiyaan xusuusinta ula kac
if ( text.length && typeof TextCleaner !== 'undefined' ) { text = TextCleaner.sanitizeWikiText( text, true ); }
return text;
}
}
);
this.box = LAPI.make( 'div' );
this.box.appendChild( this.editor.getView() );
// Ku xaddid ballaca sanduuqa xadaynta cabbirka qoraalka, adigoo tixgelinaya
// hababka qalab-tilmaameedka. *Ha* ku darin si fudud this.box ama aragtida tifatiraha, Opera waxay u dhaqmaysaa si la yaab leh
// haddii sanduuqyada qoraalku ay weligood qarsoonaayeen habaynta muuqashada! Isticmaal sanduuq qoraal oo labaad oo la isku tuuro
// beddelkeeda.
var temp = LAPI.make( 'div', null, IA.tooltip_styles );
temp.appendChild( LAPI.make( 'textarea', { cols: editor_width, rows: 6 } ) );
Object.merge(
{
position: 'absolute',
top: '0px',
left: '-10000px',
visibility: 'hidden'
},
temp.style
);
document.body.appendChild( temp );
// Hadda waan ognahay inta uu le'eg yahay sanduuqan qoraalku
var box_width = temp.offsetWidth;
LAPI.DOM.removeNode( temp );
// Fiiro gaar ah: waxaan u baahannahay inaan isticmaalno qalab-tilmaameed leh shaqo abuuraha nuxurka firfircoon halkan sababtoo ah
// nuxurka taagan waxaa lagu soo celceliyaa gudaha Tooltip. Ku soo celcelinta IE waxay lumisaa dhammaan gacmeeyeyaasha ku lifaaqan,
// sidaas darteed kontaroolada tifatiruhu ma shaqeyn doonaan mar dambe. (Tani dhib ma aha FF3,
// halkaas oo nuqul-samaynta ay ilaaliso gacmeeyeyaasha.)
this.tooltip = new Tooltip(
IA.get_cover(),
this.get_editor.bind( this ),
{
activate: Tooltip.NONE, // Mar walba waan soo bandhigi doonaa si cad
deactivate: Tooltip.ESCAPE,
close_button: null, // Waxaan leenahay badhanka joojinta si kastaba ha ahaatee
mode: Tooltip.FIXED,
anchor: Tooltip.TOP_LEFT,
mouse_offset: { x: 10, y: 10, dx: 1, dy: 1 }, // Si xun u isticmaal tan: leexasho go'an oo ka timid aragtida
max_pixels: ( box_width ? box_width + 20 : 0 ), // + 20 waxay bixisaa xoogaa dabacsanaan ah
z_index: 2010, // Ka sarreeya daboolka.
open_delay: 0,
hide_delay: 0,
onclose: this.close_tooltip.bind( this )
},
IA.tooltip_styles
);
this.note = null;
this.visible = false;
LAPI.Evt.listenTo( this, this.tooltip.popup, IA.mouse_in,
function ( evt ) {
Array.forEach( IA.viewers, ( function ( viewer ) {
if ( viewer != this.viewer && viewer.visible ) { viewer.hide(); }
} ).bind( this ) );
}
);
},
get_editor: function () {
return this.box;
},
editNote: function ( note ) {
var same_note = ( note == this.note );
this.note = note;
this.viewer = this.note.viewer;
var cover = IA.get_cover();
cover.style.cursor = 'auto';
IA.show_cover();
if ( note.tooltip ) { note.tooltip.hide_now(); }
IA.is_editing = true;
if ( note.content && !IA.wiki_read ) {
// Xusuusin jirta, oo ma haysano wikitext weli: tag oo soo qaado
var self = this;
LAPI.Ajax.apiGet(
'query',
{
prop: 'revisions',
titles: mw.config.get( 'wgPageName' ),
rvlimit: 1,
rvstartid: mw.config.get( 'wgCurRevisionId' ),
rvprop: 'ids|content'
},
function ( request, json_result ) {
if ( json_result && json_result.query && json_result.query.pages ) {
// Waa inay haysataa kaliya hal bog halkan
for ( var page in json_result.query.pages ) {
var p = json_result.query.pages[ page ];
if ( p && p.revisions && p.revisions.length ) {
var rev = p.revisions[ 0 ];
if ( rev.revid == mw.config.get( 'wgCurRevisionId' ) && rev[ '*' ] && rev[ '*' ].length ) { IA.setWikitext( rev[ '*' ] ); }
}
break;
}
}
// TODO: Maxaa dhacaya guuldaro ka dib?
self.open_editor( same_note, cover );
},
function ( request ) {
// TODO: Maxaa dhacaya guuldaro ka dib?
self.open_editor( same_note, cover );
}
);
} else {
this.open_editor( same_note, cover );
}
},
open_editor: function ( same_note, cover ) {
this.editor.hidePreview();
if ( !same_note || this.editor.textarea.readOnly ) {
// Xusuusin kala duwan, ama qalad kaydinta waqtigii ugu dambeeyay
this.editor.setText( this.note.model.wiki );
}
this.editor.enable( LAPI.Edit.SAVE + LAPI.Edit.PREVIEW + LAPI.Edit.REVERT + LAPI.Edit.CANCEL );
this.editor.textarea.readOnly = false;
this.editor.textarea.style.backgroundColor = 'white';
// Deji booska marka loo eego aragtida xusuusinta.
var view_pos = LAPI.Pos.position( this.note.view );
var origin = LAPI.Pos.position( cover );
this.tooltip.options.fixed_offset.x =
view_pos.x - origin.x + this.tooltip.options.mouse_offset.x;
this.tooltip.options.fixed_offset.y =
view_pos.y - origin.y + this.tooltip.options.mouse_offset.y;
this.tooltip.options.fixed_offset.dx = 1;
this.tooltip.options.fixed_offset.dy = 1;
// Hubi in dhageystayaasha dhacdada jiirka la saaray, gaar ahaan IE.
this.dim = { x: this.note.view.offsetLeft, y: this.note.view.offsetTop,
w: this.note.view.offsetWidth, h: this.note.view.offsetHeight };
this.viewer.setShowHideEvents( false );
this.viewer.hide(); // Hubi in xusuusinta la qariyay
this.viewer.toggle( true ); // Soo bandhig dhammaan afar geesoodka xusuusinta (laakiin dummies-ka oo kaliya)
// Hadda soo bandhig tifatiraha
this.tooltip.show_tip( null, false );
var tpos = LAPI.Pos.position( this.editor.textarea );
var ppos = LAPI.Pos.position( this.tooltip.popup );
tpos = tpos.x - ppos.x;
if ( tpos + this.editor.textarea.offsetWidth > this.tooltip.popup.offsetWidth ) { this.editor.textarea.style.width = ( this.tooltip.popup.offsetWidth - 2 * tpos ) + 'px'; }
if ( LAPI.Browser.is_ie ) {
// Xaji ballaca sanduuqa qoraalka si looga hortago libiqsiga xun ee riix kasta oo furaha ah IE6...
this.editor.textarea.style.width = this.editor.textarea.offsetWidth + 'px';
}
this.visible = true;
},
hide_editor: function ( evt ) {
if ( !this.visible ) { return; }
this.visible = false;
IA.is_editing = false;
this.tooltip.hide_now( evt );
if ( evt && evt.type == 'keydown' && !this.saving ) {
// ESC ayaa la riixay xusuusinta cusub ka hor isku day kaydinta
this.cancel();
}
IA.hide_cover();
this.viewer.setDefaultMsg();
this.viewer.setShowHideEvents( true );
this.viewer.hide();
this.viewer.show(); // Hubi inaan helno aragtida dhabta ah mar dambe.
// FIXME nooca 2.1: Nasiib darro, ma hayno booska jiirka halkan, markaa mararka qaarkood aanu
// soo bandhigi karno afar geesoodka xusuusinta xitaa haddii jiirku hadda joogo bannaanka sawirka. (Waxay ahayd
// meel ka mid ah tifatiraha kiisaska badankood (haddii badhanka tifatiraha la gujiyay), laakiin haddii ESC la
// riixay, waxaa laga yaabaa inay noqoto meel kasta.)
},
save: function ( editor ) {
var data = editor.getText();
if ( !data || !data.length ) {
// Qoraal madhan
if ( this.note.remove() ) {
this.hide_editor();
this.cancel();
this.note = null;
} else {
this.hide_editor();
this.cancel();
}
return;
} else if ( data == this.note.model.wiki ) {
// Qoraalku isbeddel ma leh
this.hide_editor();
this.cancel();
return;
}
// Dhis waxa la gelinayo
var dim = Object.clone( this.note.model.dimension );
if ( !dim ) {
dim = {
x: Math.round( this.dim.x * this.viewer.factors.dx ),
y: Math.round( this.dim.y * this.viewer.factors.dy ),
w: Math.round( this.dim.w * this.viewer.factors.dx ),
h: Math.round( this.dim.h * this.viewer.factors.dy )
};
// Hubi in wax walba ay ku dhex jiraan xadka
if ( dim.x + dim.w > this.viewer.full_img.width ) {
if ( dim.w > this.dim.w * this.viewer.factors.dx ) {
dim.w--;
if ( dim.x + dim.w > this.viewer.full_img.width ) {
if ( dim.x > 0 ) { dim.x--; } else { dim.w = this.viewer.full_img.width; }
}
} else {
// Ballacu horay bay u ahayd mid hoos loo soo wareegiyay
if ( dim.x > 0 ) { dim.x--; }
}
}
if ( dim.y + dim.h > this.viewer.full_img.height ) {
if ( dim.h > this.dim.h * this.viewer.factors.dy ) {
dim.h--;
if ( dim.y + dim.h > this.viewer.full_img.height ) {
if ( dim.y > 0 ) { dim.y--; } else { dim.h = this.viewer.full_img.height; }
}
} else {
// Dhererku horay bay u ahaa mid hoos loo soo wareegiyay
if ( dim.y > 0 ) { dim.y--; }
}
}
// Haddii uu weli aad u weyn yahay, hagaaji ballaca iyo dhererka
if ( dim.x + dim.w > this.viewer.full_img.width ) {
if ( this.viewer.full_img.width > dim.x ) {
dim.w = this.viewer.full_img.width - dim.x;
} else {
dim.x = this.viewer.full_img.width - 1;
dim.w = 1;
}
}
if ( dim.y + dim.h > this.viewer.full_img.height ) {
if ( this.viewer.full_img.height > dim.y ) {
dim.h = this.viewer.full_img.height - dim.y;
} else {
dim.y = this.viewer.full_img.height - 1;
dim.h = 1;
}
}
}
this.to_insert =
'{{ImageNote' +
'|id=' + this.note.model.id +
'|x=' + dim.x + '|y=' + dim.y + '|w=' + dim.w + '|h=' + dim.h +
'|dimx=' + this.viewer.full_img.width +
'|dimy=' + this.viewer.full_img.height +
'|style=2' +
'}}\n' +
data + ( data.endsWith( '\n' ) ? '' : '\n' ) +
'{{ImageNoteEnd|id=' + this.note.model.id + '}}';
// Hadda tifatir bogga
var self = this;
this.editor.busy( true );
this.editor.enable( 0 ); // Demi dhammaan badhamada
this.saving = true;
LAPI.Ajax.editPage(
mw.config.get( 'wgPageName' ),
function ( doc, editForm, failureFunc, revision_id ) {
try {
if ( revision_id && revision_id != mw.config.get( 'wgCurRevisionId' ) ) {
// Bogga waxaa la tifatiray tan iyo markii uu isticmaalahu soo dejiyay.
throw new Error( '#Nooca bogga (aqoonsiga dib-u-eegista) isma waafaqsana: is khilaafka tifatirka.' );
}
// Wax ka beddel bogga
var textbox = editForm.wpTextbox1;
if ( !textbox ) { throw new Error( '#Server-ku wuxuu ku jawaabay bog tifatir oo aan shaqaynayn.' ); }
var pagetext = textbox.value;
IA.setWikitext( pagetext );
var span = null;
if ( self.note.content ) { // Haddii kale waa xusuusin cusub!
span = IA.findNote( pagetext, self.note.model.id );
}
if ( span ) { // Beddel
pagetext =
pagetext.substring( 0, span.start ) +
self.to_insert +
pagetext.substring( span.end );
} else { // Haddii la waayo, ku dar dhamaadka
// Isku day inaad ku darto isla markaaba ka dib xusuusinta jirta
var lastNote = pagetext.lastIndexOf( '{{ImageNoteEnd|id=' );
if ( lastNote >= 0 ) {
var endLastNote = pagetext.substring( lastNote ).indexOf( '}}' );
if ( endLastNote < 0 ) {
endLastNote = pagetext.substring( lastNote ).indexOf( '\n' );
if ( endLastNote < 0 ) { lastNote = -1; } else { lastNote += endLastNote; }
} else { lastNote += endLastNote + 2; }
}
if ( lastNote >= 0 ) {
pagetext =
pagetext.substring( 0, lastNote ) +
'\n' + self.to_insert +
pagetext.substring( lastNote );
} else { pagetext = pagetext.trimRight() + '\n' + self.to_insert; }
}
textbox.value = pagetext;
var summary = editForm.wpSummary;
if ( !summary ) { throw new Error( '#Goobta kooban lama helin. Hubi in boggaga tifatirku leeyihiin XHTML sax ah.' ); }
// Haddii [[MediaWiki:Copyrightwarning]] uu yahay XHTML aan shaqaynayn, waxaa laga yaabaa inaanan haysan wpSummary!
if ( self.note.content != null ) {
IA.setSummary(
summary,
ImageAnnotator.UI.get( 'wpImageAnnotatorChangeSummary', true ) ||
'[[MediaWiki talk:Gadget-ImageAnnotator.js|Beddelidda xusuusinta sawirka]]$1',
data
);
} else {
IA.setSummary(
summary,
ImageAnnotator.UI.get( 'wpImageAnnotatorAddSummary', true ) ||
'[[MediaWiki talk:Gadget-ImageAnnotator.js|Ku darista xusuusinta sawirka]]$1',
data
);
}
} catch ( ex ) {
failureFunc( null, ex );
return;
}
var edit_page = doc;
LAPI.Ajax.submitEdit(
editForm,
function ( request ) {
// Gudbinta guulaysatay ka dib.
if ( edit_page.isFake && ( typeof edit_page.dispose === 'function' ) ) { edit_page.dispose(); }
// TODO: Xaqiiqadii, tifatirku wuu soo maray halkan, markaa wicitaanka failureFunc ee
// aan iswaafaqsanayn sax ma aha. Ma u baahanahay inaan dib u soo dejino bogga?
var id = 'image_annotation_content_' + self.note.model.id;
var doc = LAPI.Ajax.getHTML( request, failureFunc, id );
if ( !doc ) { return; }
var html = LAPI.$( id, doc );
if ( !html ) {
if ( doc.isFake && ( typeof doc.dispose === 'function' ) ) { doc.dispose(); }
failureFunc( request, new Error( '#Xusuusinta lama helin kaydinta ka dib. Fadlan dib u soo deji bogga.' ) );
return;
}
var revision_id = LAPI.WP.revisionFromHtml( request.responseText );
if ( !revision_id ) {
if ( doc.isFake && ( typeof doc.dispose === 'function' ) ) { doc.dispose(); }
failureFunc( request, new Error( '#Iswaafaqin la\'aanta nooca kaydinta ka dib. Fadlan dib u soo deji bogga.' ) );
return;
}
mw.config.set( 'wgCurRevisionId', revision_id ); // Kor u qaad aqoonsiga dib-u-eegista!!
self.note.model.html = LAPI.DOM.importNode( document, html, true );
if ( doc.isFake && ( typeof doc.dispose === 'function' ) ) { doc.dispose(); }
self.note.model.dimension = dim; // diiwaangeli cabbirka
self.note.model.html.style.display = '';
self.note.model.wiki = data;
self.editor.busy( false );
if ( self.note.content ) {
LAPI.DOM.removeChildren( self.note.content.main );
self.note.content.main.appendChild( self.note.model.html );
} else {
// Xusuusin cusub.
self.note.display(); // Dhab ahaantii waa magac khaldan. Kaliya waxay abuurtaa 'content'.
if ( self.viewer.annotations.length > 1 ) {
self.viewer.annotations.sort( ImageAnnotation.compare );
var idxOfNote = Array.indexOf( self.viewer.annotations, self.note );
if ( idxOfNote + 1 < self.viewer.annotations.length ) {
LAPI.DOM.insertNode( self.note.view, self.viewer.annotations[ idxOfNote + 1 ].view );
}
}
}
self.to_insert = null;
self.saving = false;
if ( !self.note.tooltip ) { self.note.setTooltip(); }
self.hide_editor();
IA.is_editing = false;
self.editor.setText( data ); // Haddii ay dhacdo in xusuusinta isla markaana la dib-u-furo: billow wareegga dib-u-samaynta cusub
}
, function ( request, ex ) {
if ( edit_page.isFake && ( typeof edit_page.dispose === 'function' ) ) { edit_page.dispose(); }
failureFunc( request, ex );
}
);
},
function ( request, ex ) {
self.editor.busy( false );
self.saving = false;
// TODO: Sidee iyo halkee lagu soo bandhigayaa qaladka haddii isticmaalahu xiray tifatiraha ESC (ama iyada oo la
// furayo qalab-tilmaameed kale) dhanka kale?
if ( !self.visible ) { return; }
// Beddel qalab-tilmaameedka si uu u soo bandhigo qaladka.
self.editor.setText( self.to_insert );
// Fariinta qaladka. Isticmaal goobta horudhaca tan.
var error_msg = ImageAnnotator.UI.get( 'wpImageAnnotatorSaveError', false );
var lk = getElementsByClassName( error_msg, 'span', 'wpImageAnnotatorOwnPageLink' );
if ( lk && lk.length && lk[ 0 ].firstChild.nodeName.toLowerCase() === 'a' ) {
lk = lk[ 0 ].firstChild;
lk.href = mw.config.get( 'wgServer' ) + mw.config.get( 'wgArticlePath' ).replace( '$1', encodeURIComponent( mw.config.get( 'wgPageName' ) ) ) + '?action=edit';
}
if ( ex ) {
var ex_msg = LAPI.formatException( ex, true );
if ( ex_msg ) {
ex_msg.style.borderBottom = '1px solid red';
var tmp = LAPI.make( 'div' );
tmp.appendChild( ex_msg );
tmp.appendChild( error_msg );
error_msg = tmp;
}
}
self.editor.setPreview( error_msg );
self.editor.showPreview();
self.editor.textarea.readOnly = true;
// Ku qasab asal cawl fudud, maadaama IE uusan lahayn tilmaam akhris-kaliya oo muuqaal ah.
self.editor.textarea.style.backgroundColor = '#EEEEEE';
self.editor.enable( LAPI.Edit.CANCEL ); // Demi dhammaan badhamada kale
}
);
},
onpreview: function ( editor ) {
if ( this.tooltip ) { this.tooltip.size_change(); }
},
cancel: function ( editor ) {
if ( !this.note ) { return; }
if ( !this.note.content ) {
// Ma jiro nuxur: Jooji oo ka saar xusuusintan!
this.note.destroy();
this.note = null;
}
if ( editor ) { this.hide_editor(); }
},
close_tooltip: function ( tooltip, evt ) {
this.hide_editor( evt );
this.cancel();
}
};
var ImageNotesViewer = function () { this.initialize.apply( this, arguments ); };
ImageNotesViewer.prototype = {
initialize: function ( descriptor, may_edit ) {
Object.merge( descriptor, this );
this.annotations = [];
this.max_id = 0;
this.main_div = null;
this.msg = null;
this.may_edit = may_edit;
this.setup_done = false;
this.tip = null;
this.icon = null;
this.factors = {
dx: this.full_img.width / this.thumb.width,
dy: this.full_img.height / this.thumb.height
};
if ( !this.isThumbnail && !this.isOther ) {
this.setup();
} else {
// Caadi ka dhig namespace-ka realName-ka 'File' si loo xisaabtiyo sawirada suurtogal ah ee lagu kaydiyay
// kaydka ajnabiga ah (Commons). Haddii kale macluumaadka goor dambe la soo dejinayo waxaa laga yaabaa inay guuldaraystaan sababtoo ah
// xiriirku waa mid maxalli ah waxaana laga yaabaa in si dhab ah loo bixiyo sida "Bild:Foo.jpg". Haddii boggaasi uusan jirin
// maxalli ahaan, waxaan rabnaa inaan ku weydiino Commons ku saabsan "File:Foo.jpg". Commons ma fahmo
// magacyada namespace-ka maxalliga ah ee wiki-yada kale, laakiin magaca namespace-ka rasmiga ah 'File' wuxuu shaqeeyaa
// sidoo kale maxalli ahaan.
this.realName = 'File:' + this.realName.substring( this.realName.indexOf( ':' ) + 1 );
}
},
setup: function ( onlyIcon ) {
this.setup_done = true;
var name = this.realName;
if ( this.isThumbnail || this.scope == document || this.may_edit || !IA.haveAjax ) {
this.imgName = this.realName;
this.realName = '';
} else {
name = getElementsByClassName( this.scope, '*', 'wpImageAnnotatorFullName' );
this.realName = ( ( name && name.length ) ? LAPI.DOM.getInnerText( name[ 0 ] ) : '' );
this.imgName = this.realName;
}
var annotations = getElementsByClassName( this.scope, 'div', IA.annotation_class );
if ( !this.may_edit && ( !annotations || annotations.length === 0 ) ) { return; } // Wax la qabto ma jiro
// Div lagu dhex daray sawirka. Waxay hubisaa in wax kasta oo aan ku darno si habboon loo dhigay
// sawirka korkiisa, xitaa haddii cabbirka daaqada browser-ka uu isbeddelo oo dib-u-habeyn dhaco.
var isEnabledImage = LAPI.DOM.hasClass( this.scope, 'wpImageAnnotatorEnable' );
if ( !this.isThumbnail && !this.isOther && !isEnabledImage ) {
this.img_div = LAPI.make( 'div', null, { position: 'relative', width: String( this.thumb.width ) + 'px' } );
var floater = LAPI.make(
'div', null,
{
cssFloat: ( IA.is_rtl ? 'right' : 'left' ),
styleFloat: ( IA.is_rtl ? 'right' : 'left' ), // IE...
width: String( this.thumb.width ) + 'px',
position: 'relative' // Wax ka hagaajiya cayayaanka habaynta IE...
}
);
floater.appendChild( this.img_div );
this.img.parentNode.parentNode.insertBefore( floater, this.img.parentNode );
this.img_div.appendChild( this.img.parentNode );
// Iyo hadda clear:left si nuxurka kale uga muuqdo sawirka hoostiisa, sida caadiga ah.
var breaker = LAPI.make( 'div', null, { clear: ( IA.is_rtl ? 'right' : 'left' ) } );
LAPI.DOM.insertAfter( breaker, floater );
// Ka saar tag-ga br ee aan loo baahnayn.
if ( breaker.nextSibling && breaker.nextSibling.nodeName.toLowerCase() == 'br' ) { LAPI.DOM.removeNode( breaker.nextSibling ); }
} else if ( this.isOther || isEnabledImage ) {
this.img_div = LAPI.make( 'div', null, { position: 'relative', width: String( this.thumb.width ) + 'px' } );
this.img.parentNode.parentNode.insertBefore( this.img_div, this.img.parentNode );
this.img_div.appendChild( this.img.parentNode );
// Geli mid kale si aad u leedahay file_div, si aan si sax ah u waafajino qoraalka fariinta
this.file_div = LAPI.make( 'div', null, { width: String( this.thumb.width ) + 'px' } );
this.img_div.parentNode.insertBefore( this.file_div, this.img_div );
this.file_div.appendChild( this.img_div );
} else { // Thumbnail
this.img_div = LAPI.make(
'div',
{ className: 'thumbimage' },
{ position: 'relative', width: String( this.thumb.width ) + 'px' }
);
this.img.parentNode.parentNode.insertBefore( this.img_div, this.img.parentNode );
this.img.style.border = 'none';
this.img_div.appendChild( this.img.parentNode );
}
if (
( this.isThumbnail || this.isOther ) && !this.may_edit &&
(
onlyIcon ||
this.iconOnly ||
ImageAnnotator_config.inlineImageUsesIndicator(
name, this.isLocal, this.thumb, this.full_img, annotations.length, this.isThumbnail
)
)
) {
// Isticmaal gacmeeyaha onclick beddelkeeda xiriirka ku jira sawirka. Xiriirku waxaa laga yaabaa inay leeyahay asal caddaad ah oo caadi ah
// laakiin waxaan rabnaa inaan hubinno inaan haysano hufnaan. Sawirku waa inuu noqdaa PNG oo la tilmaamay oo ah 8-bit
// ama GIF oo leh asal hufan.
this.icon = ImageAnnotator.UI.get( 'wpImageAnnotatorIndicatorIcon', false );
if ( this.icon ) { this.icon = this.icon.firstChild; } // Ka bood span-ka ama div-ka sanduuqa fariinta
// Ka ilaali khaldamada habaynta
if (
this.icon &&
this.icon.nodeName.toLowerCase() == 'a' &&
this.icon.firstChild.nodeName.toLowerCase() == 'img'
) {
// Hubi inaan isticmaalno borotokoolka saxda ah:
var srcFixed = this.icon.firstChild.getAttribute( 'src', 2 ).replace( /^https?:/, document.location.protocol );
this.icon.firstChild.src = srcFixed;
this.icon.firstChild.title = this.icon.title;
this.icon = this.icon.firstChild;
} else if ( !this.icon || this.icon.nodeName.toLowerCase() !== 'img' ) {
this.icon = LAPI.DOM.makeImage(
IA.indication_icon,
14, 14,
ImageAnnotator.UI.get( 'wpImageAnnotatorHasNotesMsg', true ) || ''
);
}
Object.merge(
{ position: 'absolute', zIndex: 1000, top: '0px', cursor: 'pointer' }
, this.icon.style
);
this.icon.onclick = ( function () { location.href = this.img.parentNode.href; } ).bind( this );
if ( IA.is_rtl ) { this.icon.style.right = '0px'; } else { this.icon.style.left = '0px'; }
this.img_div.appendChild( this.icon );
// Iyo waqtiga la dhameeyay. Waxaan kaliya tusinaa astaanta, wax maareyn dhacdo ah oo raaxo leh looma baahna.
return;
}
// Deji midabada
var colors = IA.getRawItem( 'colors', this.scope );
this.outer_border =
colors && IA.getItem( 'outer', colors ) || IA.outer_border;
this.inner_border =
colors && IA.getItem( 'inner', colors ) || IA.inner_border;
this.active_border =
colors && IA.getItem( 'active', colors ) || IA.active_border;
if ( annotations ) {
for ( var i = 0; i < annotations.length; i++ ) {
var id = annotations[ i ].id;
if ( id && /^image_annotation_note_(\d+)$/.test( id ) ) {
id = parseInt( id.substring( 'image_annotation_note_'.length ) );
} else { id = null; }
if ( id ) {
if ( id > this.max_id ) { this.max_id = id; }
var w = IA.getIntItem( 'full_width_' + id, this.scope );
var h = IA.getIntItem( 'full_height_' + id, this.scope );
if (
w == this.full_img.width && h == this.full_img.height &&
!Array.exists( this.annotations, function ( note ) { return note.model.id == id; } )
) {
try {
this.register( new ImageAnnotation( annotations[ i ], this, id ) );
} catch ( ex ) {
// Liq.
}
}
}
}
}
if ( this.annotations.length > 1 ) { this.annotations.sort( ImageAnnotation.compare ); }
// Ku dar afar geesoodka xusuusinta jirta DOM-ka hadda oo la kala soocay.
Array.forEach( this.annotations, ( function ( note ) { this.img_div.appendChild( note.view ); } ).bind( this ) );
if ( this.isThumbnail ) {
this.main_div = getElementsByClassName( this.file_div, 'div', 'thumbcaption' );
if ( !this.main_div || this.main_div.length == 0 ) { this.main_div = null; } else { this.main_div = this.main_div[ 0 ]; }
}
if ( !this.main_div ) {
this.main_div = LAPI.make( 'div' );
if ( IA.is_rtl ) {
this.main_div.style.direction = 'rtl';
this.main_div.style.textAlign = 'right';
this.main_div.className = 'rtl';
} else {
this.main_div.style.textAlign = 'left';
}
if ( !this.isThumbnail && !this.isOther && !isEnabledImage ) {
LAPI.DOM.insertAfter( this.main_div, this.file_div );
} else {
LAPI.DOM.insertAfter( this.main_div, this.img_div );
}
}
if (
!( this.isThumbnail || this.isOther ) ||
!this.noCaption &&
!IA.hideCaptions &&
ImageAnnotator_config.displayCaptionInArticles(
name, this.isLocal, this.thumb, this.full_img, annotations.length, this.isThumbnail
)
) {
this.msg = LAPI.make( 'div', null, { display: 'none' } );
if ( IA.is_rtl ) {
this.msg.style.direction = 'rtl';
this.msg.className = 'rtl';
}
if ( this.isThumbnail ) { this.msg.style.fontSize = '90%'; }
this.main_div.appendChild( this.msg );
}
// Deji waalidiinta overflow-ga, haddii ay jiraan
var simple = !!window.getComputedStyle;
var checks = ( simple ? [ 'overflow', 'overflow-x', 'overflow-y' ] :
[ 'overflow', 'overflowX', 'overflowY' ]
);
var curStyle = null;
for ( var up = this.img.parentNode.parentNode; up != document.body; up = up.parentNode ) {
curStyle = ( simple ? window.getComputedStyle( up, null ) : ( up.currentStyle || up.style ) );
// "up.style" dhab ahaantii waa khalad, laakiin waa dib-u-gurasho ku-tiirsanaan leh oo ugu fiican.
var overflow = Array.any( checks, function ( t ) {
var o = curStyle[ t ];
return ( o && o != 'visible' ) ? o : null;
} );
if ( overflow ) {
if ( !this.overflowParents ) { this.overflowParents = [ up ]; } else { this.overflowParents[ this.overflowParents.length ] = up; }
}
}
if ( this.overflowParents && this.may_edit ) {
// Reeb tifatirka haddii aan haysano habayn waalan oo kale.
this.may_edit = false;
IA.may_edit = false;
}
this.show_evt = LAPI.Evt.makeListener( this, this.show );
if ( this.overflowParents || LAPI.Browser.is_ie ) {
// Haddii aan haysano overflowParents, sidoo kale isticmaal dhagaystaha mousemove si aad u tustid/u qariso guud ahaan
// aragtida (FF ma dirto dhacdooyinka mouseout haddii xadka muuqda uu weli ku dhex jiro sawirka, tusaale ahaan,
// haddii aanu dhammaan sawirku muuqan). IE, sidoo kale isticmaal dhagaystahan si aad u tustid/u qariso xusuusinta
// haddii aan weli ku dhex jirno aagga muuqda ee sawirka. IE waxay u gudbisaa dhacdooyinka mouse_over img
// xitaa haddii jiirku ku jiro afar geesoodka xusuusinta. Sida muuqata ma maareyso div-yada hufan si sax ah. Natiijo ahaan, xusuusintu waxay soo bixi doonaan oo baabi'i doonaan kaliya marka jiirku ka gudbo xadka, oo haddii qofku u guuro jiirka si degdeg ah xadka, ma helno wax dhacdo ah gabi ahaanba. Taasi ma fiicna.
this.move_evt = LAPI.Evt.makeListener( this, this.check_hide );
} else { this.hide_evt = LAPI.Evt.makeListener( this, this.hide ); }
this.move_listening = false;
this.setShowHideEvents( true );
this.visible = false;
this.setDefaultMsg();
},
cannotEdit: function () {
if ( !this.may_edit ) { return; }
this.may_edit = false;
Array.forEach( this.annotations, function ( note ) { note.cannotEdit(); } );
},
setShowHideEvents: function ( set ) {
if ( this.icon ) { return; }
if ( set ) {
LAPI.Evt.attach( this.img, IA.mouse_in, this.show_evt );
if ( this.hide_evt ) { LAPI.Evt.attach( this.img, IA.mouse_out, this.hide_evt ); }
} else {
LAPI.Evt.remove( this.img, IA.mouse_in, this.show_evt );
if ( this.hide_evt ) {
LAPI.Evt.remove( this.img, IA.mouse_out, this.hide_evt );
} else if ( this.move_listening ) { this.removeMoveListener(); }
}
},
removeMoveListener: function () {
if ( this.icon ) { return; }
this.move_listening = false;
if ( this.move_evt ) {
if ( !LAPI.Browser.is_ie && typeof document.captureEvents === 'function' ) { document.captureEvents( null ); }
LAPI.Evt.remove( document, 'mousemove', this.move_evt, true );
}
},
adjustRectangleSize: function ( node ) {
if ( this.icon ) { return; }
// Hubi in sanduuqyada xusuusintu aysan isdhaafin xadka sawirka; waxaan heli karnaa loop dhacdo ah
// haddii kale haddii jiirku uu ku jiray xadkaas isdhaafsan, taasoo keeneysa libiqsi.
var view_x = node.offsetLeft;
var view_y = node.offsetTop;
var view_w = node.offsetWidth;
var view_h = node.offsetHeight;
if ( view_x === 0 ) { view_x = 1; }
if ( view_y === 0 ) { view_y = 1; }
if ( view_x + view_w >= this.thumb.width ) {
view_w = this.thumb.width - view_x - 1;
if ( view_w <= 4 ) { view_w = 4; view_x = this.thumb.width - view_w - 1; }
}
if ( view_y + view_h >= this.thumb.height ) {
view_h = this.thumb.height - view_y - 1;
if ( view_h <= 4 ) { view_h = 4; view_y = this.thumb.height - view_h - 1; }
}
// Hadda deji booska iyo ballaca iyo dhererka, adigoo jaraya ballaca xadka la isku daray
if (
view_x != node.offsetLeft || view_y != node.offsetTop ||
view_w != node.offsetWidth || view_h != node.offsetHeight
) {
node.style.top = String( view_y ) + 'px';
node.style.left = String( view_x ) + 'px';
node.style.width = String( view_w - 2 ) + 'px';
node.style.height = String( view_h - 2 ) + 'px';
node.firstChild.style.width = String( view_w - 4 ) + 'px';
node.firstChild.style.height = String( view_h - 4 ) + 'px';
}
},
toggle: function ( dummies ) {
var i;
if ( !this.annotations || this.annotations.length === 0 || this.icon ) { return; }
if ( dummies ) {
for ( i = 0; i < this.annotations.length; i++ ) {
this.annotations[ i ].view.style.display = 'none';
if ( this.visible && this.annotations[ i ].tooltip ) { this.annotations[ i ].tooltip.hide_now( null ); }
this.annotations[ i ].dummy.style.display = ( this.visible ? 'none' : '' );
if ( !this.visible ) { this.adjustRectangleSize( this.annotations[ i ].dummy ); }
}
} else {
for ( i = 0; i < this.annotations.length; i++ ) {
this.annotations[ i ].dummy.style.display = 'none';
this.annotations[ i ].view.style.display = ( this.visible ? 'none' : '' );
if ( !this.visible ) { this.adjustRectangleSize( this.annotations[ i ].view ); }
if ( this.visible && this.annotations[ i ].tooltip ) { this.annotations[ i ].tooltip.hide_now( null ); }
}
}
this.visible = !this.visible;
},
show: function ( evt ) {
if ( this.visible || this.icon ) { return; }
this.toggle( IA.is_adding || IA.is_editing );
if ( this.move_evt && !this.move_listening ) {
LAPI.Evt.attach( document, 'mousemove', this.move_evt, true );
this.move_listening = true;
if ( !LAPI.Browser.is_ie && typeof document.captureEvents === 'function' ) { document.captureEvents( Event.MOUSEMOVE ); }
}
},
hide: function ( evt ) {
if ( this.icon ) { return true; }
if ( !this.visible ) {
// Haa?
if ( this.move_listening ) { this.removeMoveListener(); }
return true;
}
if ( evt ) {
var mouse_pos = LAPI.Pos.mousePosition( evt );
if ( mouse_pos ) {
if ( this.tip ) {
// Hubi inaan ku dhex jirno xusuusinta muuqata.
if ( LAPI.Pos.isWithin( this.tip.popup, mouse_pos.x, mouse_pos.y ) ) { return true; }
}
var is_within = true;
var img_pos = LAPI.Pos.position( this.img );
var rect = {
x: img_pos.x,
y: img_pos.y,
r: ( img_pos.x + this.img.offsetWidth ),
b: ( img_pos.y + this.img.offsetHeight )
};
var i;
if ( this.overflowParents ) {
// Waxaan ku dhex jirnaa waxyaabo qaar oo leh overflow:hidden ama overflow:auto ama overflow:scroll oo la dejiyay.
// Xisaabi gobolka dhabta ah ee muuqda adigoo isdhaafsiinaya afar geesoodka ay bixiyaan img_pos iyo
// this.img.offsetWidth, this.img.offsetTop oo wata afar geesoodka dhammaan waalidiinta overflow-ga.
function intersect_rectangles( a, b ) {
if ( b.x > a.r || b.r < a.x || b.y > a.b || b.b < a.y ) { return { x: 0, y: 0, r: 0, b: 0 }; }
return {
x: Math.max( a.x, b.x ),
y: Math.max( a.y, b.y ),
r: Math.min( a.r, b.r ),
b: Math.min( a.b, b.b )
};
}
for ( i = 0; i < this.overflowParents.length && rect.x < rect.r && rect.y < rect.b; i++ ) {
img_pos = LAPI.Pos.position( this.overflowParents[ i ] );
img_pos.r = img_pos.x + this.overflowParents[ i ].clientWidth;
img_pos.b = img_pos.y + this.overflowParents[ i ].clientHeight;
rect = intersect_rectangles( rect, img_pos );
}
}
is_within = !( rect.x >= rect.r || rect.y >= rect.b || // Afar geesood madhan
rect.x >= mouse_pos.x || rect.r <= mouse_pos.x ||
rect.y >= mouse_pos.y || rect.b <= mouse_pos.y
);
if ( is_within ) {
if ( LAPI.Browser.is_ie && evt.type === 'mousemove' ) {
var display;
// Ku wareeg nidaamka dambe si aad si sax ah ugu soo bandhigto xusuusinta afar geesoodka sare!
for ( i = this.annotations.length - 1; i >= 0; i-- ) {
display = this.annotations[ i ].view.style.display;
if (
display !== 'none' && display != null &&
LAPI.Pos.isWithin( this.annotations[ i ].view.firstChild, mouse_pos.x, mouse_pos.y )
) {
if ( !this.annotations[ i ].tooltip.visible ) { this.annotations[ i ].tooltip.show( evt ); }
return true;
}
}
if ( this.tip ) { this.tip.hide_now(); } // Gudaha sawirka, laakiin ma aha gudaha afar geesoodka xusuusinta
}
return true;
}
}
}
// Ma aha gudaha sawirka, ama qaris qasab ah (ma jiro dhacdo)
if ( this.move_listening ) { this.removeMoveListener(); }
this.toggle( IA.is_adding || IA.is_editing );
return true;
},
check_hide: function ( evt ) {
if ( this.icon ) { return true; }
if ( this.visible ) { this.hide( evt ); }
return true;
},
register: function ( new_note ) {
this.annotations[ this.annotations.length ] = new_note;
if ( new_note.model.id > 0 ) {
if ( new_note.model.id > this.max_id ) { this.max_id = new_note.model.id; }
} else {
new_note.model.id = ++this.max_id;
}
},
deregister: function ( note ) {
Array.remove( this.annotations, note );
if ( note.model.id == this.max_id ) { this.max_id--; }
if ( this.annotations.length === 0 ) { this.setDefaultMsg(); } // Haddii aan ka saarnay kii ugu dambeeyay, tirtir fariinta
},
setDefaultMsg: function () {
if ( this.annotations && this.annotations.length && this.msg ) {
LAPI.DOM.removeChildren( this.msg );
this.msg.appendChild( ImageAnnotator.UI.get( 'wpImageAnnotatorHasNotesMsg', false ) );
if ( this.realName && typeof this.realName === 'string' && this.realName.length ) {
var otherPageMsg = ImageAnnotator.UI.get( 'wpImageAnnotatorEditNotesMsg', false );
if ( otherPageMsg ) {
var lk = otherPageMsg.getElementsByTagName( 'a' );
if ( lk && lk.length ) {
lk = lk[ 0 ];
lk.parentNode.replaceChild(
LAPI.DOM.makeLink(
mw.config.get( 'wgArticlePath' ).replace( '$1', encodeURIComponent( this.realName ) ),
this.realName,
this.realName
),
lk
);
this.msg.appendChild( otherPageMsg );
}
}
}
this.msg.style.display = '';
} else {
if ( this.msg ) { this.msg.style.display = 'none'; }
}
if ( IA.button_div && this.may_edit ) { IA.button_div.style.display = ''; }
}
};
var IA = {
// Shaygani waxaa masuul ka ah dejinta xusuusinta marka bog la soo dejiyo. Wuxuu soo dejiyaa dhammaan
// xusuusinta ku jirta isha bogga, wuxuuna ku daraa badhanka "Sharax sawirkan" oo lagu daray taageerada
// sawiridda xagasha sawirka haddii uu jiro hal sawir oo kaliya oo tifatirku la oggol yahay.
haveAjax: false,
button_div: null,
add_button: null,
cover: null,
border: null,
definer: null,
mouse_in: ( window.ActiveXObject ? 'mouseenter' : 'mouseover' ),
mouse_out: ( window.ActiveXObject ? 'mouseleave' : 'mouseout' ),
annotation_class: 'image_annotation',
// Qaabka xusuusinta ee Wikitext. Fiiro gaar ah: waxaa jira laba qaab, mid duug ah iyo mid cusub.
// Waxaan qornaa midka ugu cusub (dambeeya) oo kaliya, laakiin waxaan akhrisan karnaa sidoo kale qaababka duugga ah. Nidaamku waa
- // muhiim, sababtoo ah qaabka duugga ah wuxuu sidoo kale isticmaalay ImageNote template, laakiin ujeeddo kala duwan.
note_delim: [
{
start: '<div id="image_annotation_note_$1"',
end: '</div><!-- End of annotation $1-->',
content_start: '<div id="image_annotation_content_$1">\n',
content_end: '</div>\n<span id="image_annotation_wikitext_$1"'
},
{
start: '{{ImageNote|id=$1',
end: '{{ImageNoteEnd|id=$1}}',
content_start: '}}\n',
content_end: '{{ImageNoteEnd|id=$1}}'
}
],
tooltip_styles: { // Qaabka dhammaan qalab-tilmaameedyada
border: '1px solid #8888aa',
backgroundColor: '#ffffe0',
padding: '0.3em',
fontSize: ( ( mw.config.get( 'skin' ) == 'monobook' || mw.config.get( 'skin' ) == 'modern' ) ? '127%' : '100%' )
// Kor u qaad cabbirka qoraalka caadiga ah
},
editor: null,
wiki_read: false,
is_rtl: false,
move_listening: false,
is_tracking: false,
is_adding: false,
is_editing: false,
zoom_threshold: 8.0,
zoom_factor: 4.0,
install_attempts: 0,
max_install_attempts: 10, // Ugu badnaan 5 ilbidhiqsi
imgs_with_notes: [],
thumbs: [],
other_images: [],
// Dib-u-gurasho
indication_icon: '//upload.wikimedia.org/wikipedia/commons/8/8a/Gtk-dialog-info-14px.png',
install: function ( config ) {
if ( typeof ImageAnnotator_disable !== 'undefined' && !!ImageAnnotator_disable ) { return; }
if ( !config || ImageAnnotator_config != null ) { return; }
// Hubi laba jeer.
if ( !config.viewingEnabled() ) { return; }
var self = IA;
ImageAnnotator_config = config;
// Go'aan ka gaar haddii aan haysano XmlHttp. Waxaan isku dayeynaa inaan go'aaminno tan halkan si aan uga fogaano
// inaan qabano shaqo aad u badan.
if (
window.XMLHttpRequest &&
typeof LAPI !== 'undefined' &&
typeof LAPI.Ajax !== 'undefined' &&
typeof LAPI.Ajax.getRequest !== 'undefined'
) {
self.haveAjax = ( LAPI.Ajax.getRequest() != null );
self.ajaxQueried = true;
} else {
self.haveAjax = true; // Naxariis. Waxaa laga yaabaa inay ka dhacdo IE. Waxaan hubin doonaa mar labaad goor dambe.
self.ajaxQueried = false;
}
// Waxaan ku dari doonaa self.haveAjax mar kale goor dambe, si aan u qabano kiiska !ajaxQueried.
self.may_edit = mw.config.get( 'wgNamespaceNumber' ) >= 0 && mw.config.get( 'wgArticleId' ) > 0 && self.haveAjax && config.editingEnabled();
function namespaceCheck( list ) {
if ( !list || Object.prototype.toString.call( list ) !== '[object Array]' ) { return false; }
var namespaceIds = mw.config.get( 'wgNamespaceIds' );
if ( !namespaceIds ) { return false; }
var namespaceNumber = mw.config.get( 'wgNamespaceNumber' );
for ( var i = 0; i < list.length; i++ ) {
if (
typeof list[ i ] === 'string' &&
(
list[ i ] === '*' ||
namespaceIds[ list[ i ].toLowerCase().replace( / /g, '_' ) ] === namespaceNumber
)
) {
return true;
}
}
return false;
}
self.rules = { inline: {}, thumbs: {}, shared: {} };
// Hadda deji xeerarka caadiga ah. Aan la cayimin waxay ka dhigan tahay dejinta caadiga ah (run si loo tuso, beenta astaanta),
// laakiin waxaa lagu badali karaa xeerarka sawirka kasta. Haddii la dejiyo, laguma beddeli karo xeerarka sawirka kasta.
//
if (
!self.haveAjax ||
!config.generalImagesEnabled() ||
namespaceCheck( window.ImageAnnotator_no_images || null )
) {
self.rules.inline.show = false;
self.rules.thumbs.show = false;
self.rules.shared.show = false;
} else {
if (
!self.haveAjax ||
!config.thumbsEnabled() ||
namespaceCheck( window.ImageAnnotator_no_thumbs || null )
) {
self.rules.thumbs.show = false;
}
if ( mw.config.get( 'wgNamespaceNumber' ) == 6 ) {
self.rules.shared.show = true;
} else if ( !config.sharedImagesEnabled() ||
namespaceCheck( window.ImageAnnotator_no_shared || null )
) {
self.rules.shared.show = false;
}
if ( namespaceCheck( window.ImageAnnotator_icon_images || null ) ) { self.rules.inline.icon = true; }
if ( namespaceCheck( window.ImageAnnotator_icon_thumbs || null ) ) { self.rules.thumbs.icon = true; }
}
// Xeerka isticmaalaha ee lagu soo bandhigayo qoraallada sawirada ee maqaallada
self.hideCaptions = namespaceCheck( window.ImageAnnotator_hide_captions || null );
var do_images = typeof self.rules.inline.show === 'undefined' || self.rules.inline.show;
if ( do_images ) {
// Ku beddelidda maqaalka-ka-baxsan ee soo bandhigida xusuusinta ee sawirada inline iyo thumbnails
var rules = document.getElementById( 'wpImageAnnotatorImageRules' );
if ( rules ) {
if ( rules.className.indexOf( 'wpImageAnnotatorNone' ) >= 0 ) {
self.rules.inline.show = false;
self.rules.thumbs.show = false;
self.rules.shared.show = false;
}
if (
typeof self.rules.inline.show === 'undefined' &&
rules.className.indexOf( 'wpImageAnnotatorDisplay' ) >= 0
) {
self.rules.inline.show = true;
}
if ( rules.className.indexOf( 'wpImageAnnotatorNoThumbDisplay' ) >= 0 ) {
self.rules.thumbs.show = false;
}
if (
typeof self.rules.thumbs.show === 'undefined' &&
rules.className.indexOf( 'wpImageAnnotatorThumbDisplay' ) >= 0
) {
self.rules.thumbs.show = true;
}
if ( rules.className.indexOf( 'wpImageAnnotatorInlineDisplayIcons' ) >= 0 ) {
self.rules.inline.icon = true;
}
if ( rules.className.indexOf( 'wpImageAnnotatorThumbDisplayIcons' ) >= 0 ) {
self.rules.thumbs.icon = true;
}
if ( rules.className.indexOf( 'wpImageAnnotatorOnlyLocal' ) >= 0 ) {
self.rules.shared.show = false;
}
}
}
// Hubi in qiimaha la wadaago la dejiyay
self.rules.shared.show = typeof self.rules.shared.show === 'undefined' || self.rules.shared.show;
var do_thumbs = typeof self.rules.thumbs.show === 'undefined' || self.rules.thumbs.show;
if ( do_images ) {
var bodyContent = document.getElementById( 'bodyContent' ) || // monobook, vector
document.getElementById( 'mw_contentholder' ) || // modern
document.getElementById( 'article' ); // skins hore
if ( bodyContent ) {
var all_imgs = bodyContent.getElementsByTagName( 'img' );
// Tani waxay ka hortagtaa dhex marida bog leh in ka badan 400 oo sawir
// Waxaa jira kiisas xad-dhaaf ah sida [[Emoji]] oo tirada badan ee sawiradu ay sababi karaan
// dib u dhac weyn gaar ahaan Chrome
if ( all_imgs.length > 400 ) {
// sifeeynta array-ga, si fudud waa khiyaano si looga fogaado indentation badan
all_imgs = [];
}
for ( var i = 0; i < all_imgs.length; i++ ) {
// Ka reeb dhammaan kuwa ku jira img_with_notes ama thumbnails. Sidoo kale ka reeb dhammaan galleries.
var up = all_imgs[ i ].parentNode;
if ( up.nodeName.toLowerCase() !== 'a' ) { continue; }
up = up.parentNode;
if ( ( ' ' + up.className + ' ' ).indexOf( ' wpImageAnnotatorOff ' ) >= 0 ) { continue; }
if ( ( ' ' + up.className + ' ' ).indexOf( ' thumbinner ' ) >= 0 ) {
if ( do_thumbs ) { self.thumbs[ self.thumbs.length ] = up; }
continue;
}
up = up.parentNode;
if ( !up ) { continue; }
if ( ( ' ' + up.className + ' ' ).indexOf( ' wpImageAnnotatorOff ' ) >= 0 ) { continue; }
if ( ( ' ' + up.className + ' ' ).indexOf( ' wpImageAnnotatorEnable ' ) >= 0 ) {
self.imgs_with_notes[ self.imgs_with_notes.length ] = up;
continue;
}
up = up.parentNode;
if ( !up ) { continue; }
// Sawirada kale ee aan ku jirin galleries
if ( ( ' ' + up.className + ' ' ).indexOf( ' wpImageAnnotatorOff ' ) >= 0 ) { continue; }
if ( ( ' ' + up.className + ' ' ).indexOf( ' gallerybox ' ) >= 0 ) { continue; }
if ( ( ' ' + up.className + ' ' ).indexOf( ' wpImageAnnotatorEnable ' ) >= 0 ) {
self.imgs_with_notes[ self.imgs_with_notes.length ] = up;
continue;
}
up = up.parentNode;
if ( !up ) { continue; }
if ( ( ' ' + up.className + ' ' ).indexOf( ' wpImageAnnotatorOff ' ) >= 0 ) { continue; }
if ( ( ' ' + up.className + ' ' ).indexOf( ' gallerybox ' ) >= 0 ) { continue; }
if ( ( ' ' + up.className + ' ' ).indexOf( ' wpImageAnnotatorEnable ' ) >= 0 ) {
self.imgs_with_notes[ self.imgs_with_notes.length ] = up;
} else {
// Ka ilaali qoraallada kale ee ku daraya tirooyin aan la cayimin oo divs ah (dshuf tusaale ahaan!)
var is_other = true;
while ( up && up.nodeName.toLowerCase() == 'div' && is_other ) {
up = up.parentNode;
if ( up ) { is_other = ( ' ' + up.className + ' ' ).indexOf( ' gallerybox ' ) < 0; }
}
if ( is_other ) { self.other_images[ self.other_images.length ] = all_imgs[ i ]; }
}
} // dhamaadka loop-ka
}
} else {
self.imgs_with_notes = getElementsByClassName( document, '*', 'wpImageAnnotatorEnable' );
if ( do_thumbs ) { self.thumbs = getElementsByClassName( document, 'div', 'thumbinner' ); } // Ma jiro galleries!
}
if (
mw.config.get( 'wgNamespaceNumber' ) == 6 ||
( self.imgs_with_notes.length ) ||
( self.thumbs.length ) ||
( self.other_images.length )
) {
// Daabac qaybo ka mid ah habaynta.
ImageAnnotator.UI = config.UI;
self.outer_border = config.outer_border;
self.inner_border = config.inner_border;
self.active_border = config.active_border;
self.new_border = config.new_border;
self.wait_for_required_libraries();
}
},
wait_for_required_libraries: function () {
if ( typeof Tooltip === 'undefined' || typeof LAPI === 'undefined' ) {
if ( IA.install_attempts++ < IA.max_install_attempts ) {
setTimeout( IA.wait_for_required_libraries, 500 ); // 0.5 ilbidhiqsi.
}
return;
}
if ( LAPI.Browser.is_opera && !LAPI.Browser.is_opera_ge_9 ) { return; } // Opera 8 waxay leedahay dhibaatooyin culus
// Hel UI-ga. Waxaa la filayaa inaan u baahanahay haddii aan gaarnay halkan.
IA.setup_ui();
IA.setup();
},
setup: function () {
var self = IA;
self.imgs = [];
// Qabo labada RTL ee asaliga ah iyo RTL ee "la farsameeyay" iyada oo la adeegsanayo [[MediaWiki:Rtl.js]]
self.is_rtl =
LAPI.DOM.hasClass( document.body, 'rtl' ) ||
(
LAPI.DOM.currentStyle && // Cabsidii: lagu daray dhowaan, qof walba ma haysan karo
LAPI.DOM.currentStyle( document.body, 'direction' ) == 'rtl'
);
var stylepath = mw.config.get( 'stylepath' ) || '/skin';
// Isticmaal tan si aad si ku-meel-gaar ah ugu soo bandhigto sawir bannaanka shaashada si aad u hesho cabbirkiisa
var testImgDiv = LAPI.make(
'div', null,
{
display: 'none', position: 'absolute', width: '300px',
overflow: 'hidden', overflowX: 'hidden', left: '-10000px'
}
);
document.body.insertBefore( testImgDiv, document.body.firstChild );
function img_check( img, is_other ) {
var srcW = parseInt( img.getAttribute( 'width', 2 ), 10 );
var srcH = parseInt( img.getAttribute( 'height', 2 ), 10 );
// Ha samayn wax horudhacyo yar yar ah. Waxaan u baahanahay xoogaa ballac ah si aan awood ugu yeelanno inaan meel dhigno
// xagasha ka dib...
if ( !srcW || !srcH || srcW < 20 || srcH < 20 ) { return null; }
// Sawirada aan ahayn thumbnail, xadka cabbirku wuu ka weyn yahay.
if ( is_other && ( srcW < 60 || srcH < 60 ) ) { return null; }
var w = img.clientWidth; // Ha isticmaalin offsetWidth, thumbnails waxay yeelan karaan xadka...
var h = img.clientHeight;
// Haddii sawirka uu hadda qarsan yahay, clientWidth iyo clientHeight lama dejin. Isku day
// si adag si aad u hesho ballaca iyo dhererka dhabta ah:
if ( ( !w || !h ) && img.style.display != 'none' ) {
var copied = img.cloneNode( true );
copied.style.display = '';
testImgDiv.appendChild( copied );
testImgDiv.style.display = '';
w = copied.clientWidth;
h = copied.clientHeight;
testImgDiv.style.display = 'none';
LAPI.DOM.removeNode( copied );
}
// Ka bax haddii sawirka aan si sax ah loo soo dejinin sabab qaar ka mid ah:
if ( w != srcW || h != srcH ) { return null; }
// Ka reeb sawirada nidaamka
if ( img.src.contains( stylepath ) ) { return null; }
// Kaliya haddii uu ku dhex jiro xiriiriye
if ( img.parentNode.nodeName.toLowerCase() != 'a' ) { return null; }
if ( is_other ) {
// Kaliya haddii dhismaha img-within-link uu ku dhex jiro shay ka koobnaan kara div!
if ( /^(p|span)$/i.test( img.parentNode.parentNode.nodeName ) ) {
// Kiis gaar ah: sadarka waxaa ku jiri kara kaliya walxaha inline, laakiin waxaan rabnaa inaan awood u yeelanno inaan maamulno
// faylasha sadarka keligood ah. Waxaa laga yaabaa inaan u baahanahay inaan si sax ah u kala qaybino sadarka oo aan ku duubno sawirka
// div, laakiin hadda waxaan u qaadaneynaa in dhammaan browser-ada ay maamuli karaan div gudaha sadarka ama
// span ee sadarka si macno leh, xitaa haddii aan si dhab ah loo oggolayn.
} else if ( !/^(object|applet|map|fieldset|noscript|iframe|body|div|li|dd|blockquote|center|ins|del|button|th|td|form)$/i.test( img.parentNode.parentNode.nodeName ) ) { return null; }
}
// Ka reeb wax kasta oo ku dhex jira xusuusinta sawirka!
var up = img.parentNode.parentNode;
while ( up != document.body ) {
if ( LAPI.DOM.hasClass( up, IA.annotation_class ) ) { return null; }
up = up.parentNode;
}
return { width: w, height: h };
}
function setup_one( scope ) {
var file_div = scope;
var is_thumb =
scope != document &&
scope.nodeName.toLowerCase() == 'div' &&
LAPI.DOM.hasClass( scope, 'thumbinner' );
var is_other = scope.nodeName.toLowerCase() == 'img';
if ( is_other && self.imgs.length && scope == self.imgs[ 0 ] ) { return null; }
if ( scope == document ) {
file_div = LAPI.$( 'file' );
} else if ( !is_thumb && !is_other ) {
file_div = getElementsByClassName( scope, 'div', 'wpImageAnnotatorFile' );
if ( !file_div || file_div.length != 1 ) { return null; }
file_div = file_div[ 0 ];
}
if ( !file_div ) { return null; }
var img = null;
if ( scope == document ) {
img = LAPI.WP.getPreviewImage( mw.config.get( 'wgTitle' ) );
// TIFFs waxaa laga yaabaa inay noqdaan kuwo badan oo bog ah: oggolow kaliya TIFFs hal bog ah
if ( document.pageselector ) { img = null; }
} else if ( is_other ) {
img = scope;
} else {
img = file_div.getElementsByTagName( 'img' );
if ( !img || img.length === 0 ) { return null; }
img = img[ 0 ];
}
if ( !img ) { return null; }
var dim = img_check( img, is_other );
if ( !dim ) { return null; }
// Shuruud ahaan ka reeb sawirada la wadaago.
if (
scope != document &&
!self.rules.shared.show &&
ImageAnnotator_config.imageIsFromSharedRepository( img.src )
) { return null; }
var name = null;
if ( scope == document ) {
name = mw.config.get( 'wgPageName' );
} else {
name = LAPI.WP.pageFromLink( img.parentNode );
if ( !name ) { return null; }
name = name.replace( / /g, '_' );
if ( is_thumb || is_other ) {
var img_src = decodeURIComponent( img.getAttribute( 'src', 2 ) ).replace( / /g, '_' );
// img_src waa inay lahaataa qayb "/name" halkaas meel ka mid ah
var colon = name.indexOf( ':' );
if ( colon <= 0 ) { return null; }
var img_name = name.substring( colon + 1 );
if ( img_src.search( new RegExp( '/' + img_name.escapeRE() + '(/.*)?$' ) ) < 0 ) { return null; }
// Haddii xiriirku uusan ku socon namespace-ka faylka, ma heli doonno cabbirka buuxa goor dambe iyo
// sidaas darteed wax shaqo ah kuma qaban doono.
}
}
if ( name.search( /\.(jpe?g|png|gif|svg|tiff?|webp)$/i ) < 0 ) { return null; } // Kaliya PNG, JPE?G, GIF, SVG, TIFF?, iyo WebP
// Ugu dambeyntii hubi wpImageAnnotatorControl
var icon_only = false;
var no_caption = false;
if ( is_thumb || is_other ) {
var up = img.parentNode.parentNode;
// Saddex heer waa ku filan: thumbinner-thumb-control, ama floatnone-center-control, ama toos ah
for ( var i = 0; ++i <= 3 && up; up = up.parentNode ) {
if ( LAPI.DOM.hasClass( up, 'wpImageAnnotatorControl' ) ) {
if ( LAPI.DOM.hasClass( up, 'wpImageAnnotatorOff' ) ) { return null; }
if ( LAPI.DOM.hasClass( up, 'wpImageAnnotatorIconOnly' ) ) { icon_only = true; }
if ( LAPI.DOM.hasClass( up, 'wpImageAnnotatorCaptionOff' ) ) { no_caption = true; }
break;
}
}
}
return { scope: scope,
file_div: file_div,
img: img,
realName: name,
isThumbnail: is_thumb,
isOther: is_other,
thumb: { width: dim.width, height: dim.height },
iconOnly: icon_only,
noCaption: no_caption
};
}
function setup_images( list ) {
Array.forEach( list,
function ( elem ) {
var desc = setup_one( elem );
if ( desc ) { self.imgs[ self.imgs.length ] = desc; }
}
);
}
if ( mw.config.get( 'wgNamespaceNumber' ) == 6 ) {
setup_images( [ document ] );
self.may_edit = self.may_edit && ( self.imgs.length == 1 );
setup_images( self.imgs_with_notes );
} else {
setup_images( self.imgs_with_notes );
self.may_edit = self.may_edit && ( self.imgs.length == 1 );
}
self.may_edit = self.may_edit && location.href.search( /[?&]oldid=/ ) < 0;
if ( self.haveAjax ) {
setup_images( self.thumbs );
setup_images( self.other_images );
}
// Ka saar div-ka tijaabada
LAPI.DOM.removeNode( testImgDiv );
if ( self.imgs.length === 0 ) { return; }
// Waxaan helnaa qoraallada UI si isbarbar sococ ah, laakiin waxaan u sugnaa bilowga complete_setup, halkaas oo aan
// ugu baahanahay. Tani waxay leedahay faa'iido gaar ah haddii ay tahay inaan u yeerno cabbirka faylalka hoos ku qoran.
if ( self.imgs.length == 1 && self.imgs[ 0 ].scope == document && !self.haveAjax ) {
// Isku day inaad hesho cabbirka buuxa Ajax la'aan.
self.imgs[ 0 ].full_img = LAPI.WP.fullImageSizeFromPage();
if ( self.imgs[ 0 ].full_img.width > 0 && self.imgs[ 0 ].full_img.height > 0 ) {
self.setup_step_two();
return;
}
}
// Hel cabbirka buuxa ee dhammaan sawirada. Haddii ay ka badato 50, samee wicitaano dhowr ah. (API-gu wuxuu leeyahay xad.)
// Sidoo kale ka fogow isticmaalka Ajax ee IE6...
var cache = {};
var names = [];
Array.forEach( self.imgs, function ( img, idx ) {
if ( cache[ img.realName ] ) {
cache[ img.realName ][ cache[ img.realName ].length ] = idx;
} else {
cache[ img.realName ] = [ idx ];
names[ names.length ] = img.realName;
}
} );
var to_do = names.length;
var done = 0;
function check_done( length ) {
done += length;
if ( done >= names.length ) {
if ( typeof ImageAnnotator.info_callbacks !== 'undefined' ) { ImageAnnotator.info_callbacks = null; }
self.setup_step_two();
}
}
function make_calls( execute_call, url_limit ) {
function build_titles( from, length, url_limit ) {
var done = 0;
var text = '';
for ( var i = from; i < from + length; i++ ) {
var new_text = names[ i ];
if ( url_limit ) {
new_text = encodeURIComponent( new_text );
if ( text.length && ( text.length + new_text.length + 1 > url_limit ) ) { break; }
}
text += ( text.length ? '|' : '' ) + new_text;
done++;
}
return { text: text, n: done };
}
var start = 0, chunk = 0, params;
while ( to_do > 0 ) {
params = build_titles( start, Math.min( 50, to_do ), url_limit );
execute_call( params.n, params.text );
to_do -= params.n;
start += params.n;
}
}
function set_info( json ) {
try {
if ( json && json.query && json.query.pages ) {
function get_size( info ) {
if ( !info.imageinfo || info.imageinfo.length === 0 ) { return; }
var title = info.title.replace( / /g, '_' );
var indices = cache[ title ];
if ( !indices ) { return; }
Array.forEach(
indices
, function ( i ) {
self.imgs[ i ].full_img = { width: info.imageinfo[ 0 ].width,
height: info.imageinfo[ 0 ].height };
self.imgs[ i ].has_page = ( typeof info.missing === 'undefined' );
self.imgs[ i ].isLocal = !info.imagerepository || info.imagerepository == 'local';
if ( i != 0 || !self.may_edit || !info.protection || mw.config.get( 'wgNamespaceNumber' ) != 6 ) { return; }
// Daryeel habaynta ilaalinta
var protection = Array.any( info.protection, function ( e ) {
return ( e.type == 'edit' ? e : null );
} );
self.may_edit =
!protection ||
( mw.config.get( 'wgUserGroups' ) && mw.config.get( 'wgUserGroups' ).join( ' ' ).contains( protection.level ) );
}
);
}
for ( var page in json.query.pages ) {
get_size( json.query.pages[ page ] );
}
} // dhamaadka if
} catch ( ex ) {
}
}
if ( ( !window.XMLHttpRequest && !!window.ActiveXObject ) || !self.haveAjax ) {
// IE waxay leedahay dejin amni oo doqonimo ah oo weydiineysa in ActiveX la oggolaado. Waxaan ka fogaanaynaa taas
// oo aan adeegsaneyno getScript beddelkeeda parseWikitext kiiskan.
ImageAnnotator.info_callbacks = [];
var template = mw.config.get( 'wgServer' ) + mw.config.get( 'wgScriptPath' ) + '/api.php?action=query&format=json' +
'&prop=info|imageinfo&inprop=protection&iiprop=size' +
'&titles=&callback=ImageAnnotator.info_callbacks[].callback';
if ( template.startsWith( '//' ) ) { template = document.location.protocol + template; } // Ka fogow URI-yada borotokoolka la xiriira (cayayaanka IE7)
make_calls(
function ( length, titles ) {
var idx = ImageAnnotator.info_callbacks.length;
ImageAnnotator.info_callbacks[ idx ] = {
callback: function ( json ) {
set_info( json );
ImageAnnotator.info_callbacks[ idx ].done = true;
if ( ImageAnnotator.info_callbacks[ idx ].script ) {
LAPI.DOM.removeNode( ImageAnnotator.info_callbacks[ idx ].script );
ImageAnnotator.info_callbacks[ idx ].script = null;
}
check_done( length );
},
done: false
};
ImageAnnotator.info_callbacks[ idx ].script = IA.getScript(
template.replace( 'info_callbacks[].callback', 'info_callbacks[' + idx + '].callback' )
.replace( '&titles=&', '&titles=' + titles + '&' ),
true // Kaydinta maxalliga ah ma leh!
);
// Waxaan dhaafnaa kaydka JavaScript ee maxalliga ah ee importScriptURI, laakiin IE, weli waxaa laga yaabaa inaan
// ka helno qoraalka kaydka browser-ka, iyo haddii taasi dhacdo, IE waxay fulin kartaa
// qoraalka (oo u yeeri karta wicitaanka dibadda) si iswaafaqsan ka hor inta aan la dhamayn hawsha. Nadiifi
// kiiskaas.
if (
ImageAnnotator.info_callbacks && ImageAnnotator.info_callbacks[ idx ] &&
ImageAnnotator.info_callbacks[ idx ].done && ImageAnnotator.info_callbacks[ idx ].script
) {
LAPI.DOM.removeNode( ImageAnnotator.info_callbacks[ idx ].script );
ImageAnnotator.info_callbacks[ idx ].script = null;
}
},
( LAPI.Browser.is_ie ? 1950 : 4000 ) - template.length // XOOGGAA dabacsanaan ah oo loogu talagalay cabbiraadaha kaydinta
);
} else {
make_calls(
function ( length, titles ) {
LAPI.Ajax.apiGet(
'query'
, { titles: titles,
prop: 'info|imageinfo',
inprop: 'protection',
iiprop: 'size'
}
, function ( request, json_result ) {
set_info( json_result );
check_done( length );
}
, function () { check_done( length ); }
);
}
);
} // dhamaadka if wuxuu isticmaali karaa Ajax
},
setup_ui: function () {
// Dhammaystir shayga UI ee aan ka helnay habaynta.
ImageAnnotator.UI.ready = false;
ImageAnnotator.UI.repo = null;
ImageAnnotator.UI.needs_plea = false;
var readyEvent = [];
ImageAnnotator.UI.fireReadyEvent = function () {
if ( ImageAnnotator.UI.ready ) { return; } // Horay bay u shidantahay, wax la qabto ma jiro.
ImageAnnotator.UI.ready = true;
// U yeer dhammaan gacmeeyeyaasha diiwaangashan, oo tirtir array-ga.
Array.forEach( readyEvent, function ( f, idx ) {
try { f(); } catch ( ex ) {}
readyEvent[ idx ] = null;
} );
readyEvent = null;
};
ImageAnnotator.UI.addReadyEventHandler = function ( f ) {
if ( ImageAnnotator.UI.ready ) {
f(); // Horay bay u shidantahay: u yeer toos
} else {
readyEvent[ readyEvent.length ] = f;
}
};
ImageAnnotator.UI.setup = function () {
if ( ImageAnnotator.UI.repo ) { return; }
var self = ImageAnnotator.UI;
var node = LAPI.make( 'div', null, { display: 'none' } );
document.body.appendChild( node );
if ( typeof UIElements === 'undefined' ) {
self.basic = true;
self.repo = {};
for ( var item in self.defaults ) {
node.innerHTML = self.defaults[ item ];
self.repo[ item ] = node.firstChild;
LAPI.DOM.removeChildren( node );
}
} else {
self.basic = false;
self.repo = UIElements.emptyRepository( self.defaultLanguage );
for ( var item in self.defaults ) {
node.innerHTML = self.defaults[ item ];
UIElements.setEntry( item, self.repo, node.firstChild );
LAPI.DOM.removeChildren( node );
}
UIElements.load( 'wpImageAnnotatorTexts', null, null, self.repo );
}
LAPI.DOM.removeNode( node );
};
ImageAnnotator.UI.get = function ( id, basic, no_plea ) {
var self = ImageAnnotator.UI;
if ( !self.repo ) { self.setup(); }
var result = null;
var add_plea = false;
if ( self.basic ) {
result = self.repo[ id ];
} else {
result = UIElements.getEntry( id, self.repo, mw.config.get( 'wgUserLanguage' ), null );
add_plea = !result;
if ( !result ) { result = UIElements.getEntry( id, self.repo ); }
}
self.needs_plea = add_plea;
if ( !result ) { return null; } // Hmmm... maxaa dhacay halkan? Caadi ahaan waxaan haynaa caadooyin...
if ( basic ) { return LAPI.DOM.getInnerText( result ).trim(); }
result = result.cloneNode( true );
if ( mw.config.get( 'wgServer' ).contains( '/commons' ) && add_plea && !no_plea ) {
// Ku dar codsi turjumaad.
if ( result.nodeName.toLowerCase() == 'div' ) {
result.appendChild( self.get_plea() );
} else {
var span = LAPI.make( 'span' );
span.appendChild( result );
span.appendChild( self.get_plea() );
result = span;
}
}
return result;
};
ImageAnnotator.UI.get_plea = function () {
var self = ImageAnnotator.UI;
var translate = self.get( 'wpTranslate', false, true ) || 'turjum';
var span = LAPI.make( 'small' );
span.appendChild( document.createTextNode( '\xa0(' ) );
span.appendChild(
LAPI.DOM.makeLink(
mw.config.get( 'wgServer' ) + mw.config.get( 'wgScript' ) + '?title=MediaWiki_talk:ImageAnnotatorTexts' +
'&action=edit§ion=new&withJS=MediaWiki:ImageAnnotatorTranslator.js' +
'&language=' + mw.config.get( 'wgUserLanguage' ),
translate,
( typeof translate === 'string' ? translate : LAPI.DOM.getInnerText( translate ).trim() )
)
);
span.appendChild( document.createTextNode( ')' ) );
return span;
};
ImageAnnotator.UI.init = function ( html_text_or_json ) {
var text;
if ( typeof html_text_or_json === 'string' ) {
text = html_text_or_json;
} else if (
typeof html_text_or_json !== 'undefined' &&
typeof html_text_or_json.parse !== 'undefined' &&
typeof html_text_or_json.parse.text !== 'undefined' &&
typeof html_text_or_json.parse.text[ '*' ] !== 'undefined'
) {
text = html_text_or_json.parse.text[ '*' ];
} else {
text = null;
}
if ( !text ) {
ImageAnnotator.UI.fireReadyEvent();
return;
}
var node = LAPI.make( 'div', null, { display: 'none' } );
document.body.appendChild( node );
try {
node.innerHTML = text;
} catch ( ex ) {
LAPI.DOM.removeNode( node );
node = null;
// Liq. Waxaan kaliya la shaqeyn doonaa UI-ga caadiga ah
}
if ( node && !ImageAnnotator.UI.repo ) { ImageAnnotator.UI.setup(); }
ImageAnnotator.UI.fireReadyEvent();
};
var ui_page = '{{MediaWiki:ImageAnnotatorTexts' +
( mw.config.get( 'wgUserLanguage' ) != mw.config.get( 'wgContentLanguage' ) ? '|lang=' + mw.config.get( 'wgUserLanguage' ) : '' ) +
'|live=1}}';
function get_ui_no_ajax() {
var url =
mw.config.get( 'wgServer' ) + mw.config.get( 'wgScriptPath' ) + '/api.php?action=parse&pst&text=' +
encodeURIComponent( ui_page ) + '&title=API&prop=text&format=json' +
'&callback=ImageAnnotator.UI.init&maxage=14400&smaxage=14400';
// Natiijada waxaa la kaydiyay 4 saacadood. Sida saxda ah loo maareeyo qaladka? Waxaa u muuqata inaysan jirin hab lagu qabto
// taas oo ku taal IE. (FF, waxaan isticmaali karnaa dhagaystaha onerror ee tag-ga script, laakiin FF, waxaan isticmaalnaa Ajax
// si kastaba ha ahaatee.)
IA.getScript( url, true ); // Kaydinta maxalliga ah ma leh!
}
function get_ui() {
IA.haveAjax = ( LAPI.Ajax.getRequest() != null );
IA.ajaxQueried = true;
// Waxay shaqaysaa oo kaliya Ajax (laakiin markaas, inta badan qoraalkan ma shaqeeyo la'aanteed).
// Hubi waxa tani ku samaynaysa waqtiga soo dejinta... Haddii dad badani isticmaalaan tan, waxaa laga yaabaa inay fiicnaato
// in qoraallada UI lagu daro xoogaa footer ah sida aan ku sameynay Special:Upload. Runtu waxay tahay, qof walba
// wuxuu heli lahaa qoraallada, xitaa dadka aan isticmaalin tan, laakiin qoraalladu waa kuwo yar si kastaba ha ahaatee...
if ( !IA.haveAjax ) {
get_ui_no_ajax(); // Dib-u-gurasho.
return;
}
LAPI.Ajax.parseWikitext(
ui_page,
ImageAnnotator.UI.init,
ImageAnnotator.UI.fireReadyEvent,
false,
null,
'API', // Xarig go'an si loo suurtogeliyo kaydinta gabi ahaanba.
14400 // Kaydinta 4 saacadood.
);
} // dhamaadka get_ui
if ( !window.XMLHttpRequest && !!window.ActiveXObject ) {
// IE waxay leedahay dejin amni oo doqonimo ah oo weydiineysa in ActiveX la oggolaado. Waxaan ka fogaanaynaa taas
// oo aan adeegsaneyno getScript beddelkeeda parseWikitext kiiskan. Faa'iido darradu
// waxay tahay inaysan sameynin wax haddii tani ay guuldarraysto sabab qaar ka mid ah.
get_ui_no_ajax();
} else {
get_ui();
}
},
setup_step_two: function () {
var self = IA;
// Tuur wixii sawiro ah ee aan ka maqan yahay thumbnail ama cabbirka sawirka buuxa.
// Sidoo kale tuura thumbnails-ka ka weyn sawirka buuxa.
self.imgs = Array.select( self.imgs, function ( elem, idx ) {
var result =
elem.thumb.width > 0 && elem.thumb.height > 0 &&
typeof elem.full_img !== 'undefined' &&
elem.full_img.width > 0 && elem.full_img.height > 0 &&
elem.full_img.width >= elem.thumb.width &&
elem.full_img.height >= elem.thumb.height;
if ( self.may_edit && idx === 0 && !result ) { self.may_edit = false; }
return result;
} );
if ( self.imgs.length === 0 ) { return; }
ImageAnnotator.UI.addReadyEventHandler( IA.complete_setup );
},
complete_setup: function () {
// Waxaan hubinnay inaan haysano UI halkan sababtoo ah tan waxaa loo yaqaan kaliya marka dhacdada diyaarka ah ee
// shayga UI la shido.
var self = IA;
// Hubi ogolaanshaha tifatirka
if ( self.may_edit && mw.config.get( 'wgRestrictionEdit' ) ) {
self.may_edit = (
( mw.config.get( 'wgRestrictionEdit' ).length === 0 || mw.config.get( 'wgUserGroups' ) && mw.config.get( 'wgUserGroups' ).join( ' ' ).contains( 'sysop' ) ) ||
(
mw.config.get( 'wgRestrictionEdit' ).length === 1 && mw.config.get( 'wgRestrictionEdit' )[ 0 ] === 'autoconfirmed' &&
mw.config.get( 'wgUserGroups' ) && mw.config.get( 'wgUserGroups' ).join( ' ' ).contains( 'confirmed' ) // confirmed & autoconfirmed
)
);
}
if ( self.may_edit ) {
// Hubi in sawirku yahay mid maxalli ah. Ha oggolaan tifatirka haddii faylku yahay mid fog.
var sharedUpload = getElementsByClassName( document, 'div', 'sharedUploadNotice' );
self.may_edit = ( !sharedUpload || sharedUpload.length === 0 );
}
if ( self.may_edit && mw.config.get( 'wgNamespaceNumber' ) != 6 ) {
// Kaliya u oggolow tifatirka haddii magaca bogga la kaydiyay uu la mid yahay kan hadda jira.
var img_page_name = getElementsByClassName( self.imgs[ 0 ].scope, '*', 'wpImageAnnotatorPageName' );
if ( img_page_name && img_page_name.length ) { img_page_name = LAPI.DOM.getInnerText( img_page_name[ 0 ] ); } else { img_page_name = ''; }
self.may_edit = ( img_page_name.replace( / /g, '_' ) == mw.config.get( 'wgTitle' ).replace( / /g, '_' ) );
}
if ( self.may_edit && self.ajaxQueried ) { self.may_edit = self.haveAjax; }
// Hadda abuur daawadayaasha dhammaan sawirada
self.viewers = new Array( self.imgs.length );
for ( var i = 0; i < self.imgs.length; i++ ) {
self.viewers[ i ] = new ImageNotesViewer( self.imgs[ i ], i === 0 && self.may_edit );
}
if ( self.may_edit ) {
// Ixtiraam beddelka isticmaalaha ee zoom-ka, haddii uu jiro
self.zoom_threshold = ImageAnnotator_config.zoom_threshold;
if (
typeof window.ImageAnnotator_zoom_threshold !== 'undefined' &&
!isNaN( window.ImageAnnotator_zoom_threshold ) &&
window.ImageAnnotator_zoom_threshold >= 0.0
) {
// Haddii qof uu u dejiyo qiimo sare oo macno la'aan ah, taasi waa dhibkiisa: ma jiri doonto wax
// zoom ah.
self.zoom_threshold = window.ImageAnnotator_zoom_threshold;
}
// Hagaaji xadka zoom-ka ee thumbnails-ka yar yar ama sawirada leh ballaca/dhererka aad u xun,
// laakiin kaliya haddii aan *awoodno* inaan zoom-gareyno ugu yaraan laba jeer
if (
self.viewers[ 0 ].full_img.width > 300 &&
Math.min( self.viewers[ 0 ].factors.dx, self.viewers[ 0 ].factors.dy ) >= 2.0
) {
if (
self.viewers[ 0 ].thumb.width < 400 ||
self.viewers[ 0 ].thumb.width / self.viewers[ 0 ].thumb.height > 2.0 ||
self.viewers[ 0 ].thumb.height / self.viewers[ 0 ].thumb.width > 2.0
) {
self.zoom_threshold = 0; // Ku qasab zoom
}
}
self.editor = new ImageAnnotationEditor();
function track( evt ) {
evt = evt || window.event;
if ( self.is_adding ) { self.update_zoom( evt ); }
if ( !self.is_tracking ) { return LAPI.Evt.kill( evt ); }
var mouse_pos = LAPI.Pos.mousePosition( evt );
if ( !LAPI.Pos.isWithin( self.cover, mouse_pos.x, mouse_pos.y ) ) { return; }
var origin = LAPI.Pos.position( self.cover );
// Ka dhig booska jiirka mid ku xiran daboolka
mouse_pos.x = mouse_pos.x - origin.x;
mouse_pos.y = mouse_pos.y - origin.y;
if ( mouse_pos.x >= self.base_x ) {
self.definer.style.width = String( mouse_pos.x - self.base_x ) + 'px';
self.definer.style.left = String( self.base_x ) + 'px';
} else {
self.definer.style.width = String( self.base_x - mouse_pos.x ) + 'px';
self.definer.style.left = String( mouse_pos.x ) + 'px';
}
if ( mouse_pos.y >= self.base_y ) {
self.definer.style.height = String( mouse_pos.y - self.base_y ) + 'px';
self.definer.style.top = String( self.base_y ) + 'px';
} else {
self.definer.style.height = String( self.base_y - mouse_pos.y ) + 'px';
self.definer.style.top = String( mouse_pos.y ) + 'px';
}
return LAPI.Evt.kill( evt );
}
function pause( evt ) {
LAPI.Evt.remove( document, 'mousemove', track, true );
if ( !LAPI.Browser.is_ie && typeof document.captureEvents === 'function' ) { document.captureEvents( null ); }
self.move_listening = false;
}
function resume( evt ) {
// captureEvents dhab ahaantii waa la diiday, laakiin kuma guulaysanin inaan ka dhigo tan mid la shaqeysa
// addEventListener kaliya.
if ( ( self.is_tracking || self.is_adding ) && !self.move_listening ) {
if ( !LAPI.Browser.is_ie && typeof document.captureEvents === 'function' ) { document.captureEvents( Event.MOUSEMOVE ); }
LAPI.Evt.attach( document, 'mousemove', track, true );
self.move_listening = true;
}
}
function stop_tracking( evt ) {
evt = evt || window.event;
// Hubi inaan ku dhex jirno sawirka. Fiiro gaar ah: hubintani waxay ku guuldaraysan kartaa kaliya IE >= 7, browser-ada kale,
// waxaan ku lifaaqnaa dhagaystaha self.cover sidaas darteed xitaa ma helno dhacdooyin ka baxsan
// xadkaas.
var mouse_pos = LAPI.Pos.mousePosition( evt );
if ( !LAPI.Pos.isWithin( self.cover, mouse_pos.x, mouse_pos.y ) ) { return; }
if ( self.is_tracking ) {
self.is_tracking = false;
self.is_adding = false;
// La dhammeeyay.
pause();
if ( LAPI.Browser.is_ie ) {
// Ku kalsoonow Microsoft inay wax walba khaldaan!
LAPI.Evt.remove( document, 'mouseup', stop_tracking );
} else {
LAPI.Evt.remove( self.cover, 'mouseup', stop_tracking );
}
LAPI.Evt.remove( window, 'blur', pause );
LAPI.Evt.remove( window, 'focus', resume );
self.cover.style.cursor = 'auto';
LAPI.DOM.removeNode( self.border );
LAPI.Evt.remove( self.cover, self.mouse_in, self.update_zoom_evt );
LAPI.Evt.remove( self.cover, self.mouse_out, self.hide_zoom_evt );
self.hide_zoom();
self.viewers[ 0 ].hide(); // Qari dhammaan sanduuqyada jira
if ( !self.definer || self.definer.offsetWidth <= 0 || self.definer.offsetHeight <= 0 ) {
// Waxba: kaliya ka saar definer-ka:
if ( self.definer ) { LAPI.DOM.removeNode( self.definer ); }
// Dib u lifaaq dhagaystayaasha dhacdada
self.viewers[ 0 ].setShowHideEvents( true );
self.hide_cover();
self.viewers[ 0 ].setDefaultMsg();
// Iyo hubi inaan helno aragtida dhabta ah mar labaad
self.viewers[ 0 ].show();
} else {
// Waxaan haysanaa div leh xoogaa baaxad ah: ka saar qabashada dhacdada oo abuur xusuusin cusub
var new_note = new ImageAnnotation( self.definer, self.viewers[ 0 ], -1 );
self.viewers[ 0 ].register( new_note );
self.editor.editNote( new_note );
}
self.definer = null;
}
if ( evt ) { return LAPI.Evt.kill( evt ); }
return false;
}
function start_tracking( evt ) {
if ( !self.is_tracking ) {
self.is_tracking = true;
evt = evt || window.event;
// Deji booska, cabbirka 1
var mouse_pos = LAPI.Pos.mousePosition( evt );
var origin = LAPI.Pos.position( self.cover );
self.base_x = mouse_pos.x - origin.x;
self.base_y = mouse_pos.y - origin.y;
Object.merge(
{ left: String( self.base_x ) + 'px',
top: String( self.base_y ) + 'px',
width: '0px',
height: '0px',
display: ''
}
, self.definer.style
);
// Deji gacmeeyeyaasha jiirka
LAPI.Evt.remove( self.cover, 'mousedown', start_tracking );
if ( LAPI.Browser.is_ie ) {
LAPI.Evt.attach( document, 'mouseup', stop_tracking ); // Si sax ah uga shaqayn mayso self.cover...
} else {
LAPI.Evt.attach( self.cover, 'mouseup', stop_tracking );
}
resume();
LAPI.Evt.attach( window, 'blur', pause );
LAPI.Evt.attach( window, 'focus', resume );
}
if ( evt ) { return LAPI.Evt.kill( evt ); }
return false;
}
function add_new( evt ) {
if ( !self.canEdit() ) { return; }
self.editor.hide_editor();
Tooltips.close();
var cover = self.get_cover();
cover.style.cursor = 'crosshair';
self.definer = LAPI.make(
'div', null,
{
border: '1px solid ' + IA.new_border,
display: 'none',
position: 'absolute',
top: '0px',
left: '0px',
width: '0px',
height: '0px',
padding: '0',
lineHeight: '0px', // IE waxay u baahan tahay tan, xitaa inkastoo aysan jirin wax khad ah oo gudaha ah
fontSize: '0px', // IE
zIndex: cover.style.zIndex - 2 // Ka hooseeya div-ka qabashada jiirka
}
);
self.viewers[ 0 ].img_div.appendChild( self.definer );
// Geli habka raadraaca jiirka si aad u qeexdo baaxadda aragtida. Farta jiirku waxay ku taal bannaanka sawirka,
// sidaas darteed ma jiraan qalab-tilmaameedyadeenna oo muuqda.
self.viewers[ 0 ].img_div.appendChild( self.border );
self.show_cover();
self.is_tracking = false;
self.is_adding = true;
LAPI.Evt.attach( cover, 'mousedown', start_tracking );
resume();
self.button_div.style.display = 'none';
// Ka saar dhagaystayaasha dhacdada ee sawirka: IE mararka qaarkood waxay u yeertaa xitaa marka sawirku daboolan yahay
self.viewers[ 0 ].setShowHideEvents( false );
self.viewers[ 0 ].hide(); // Hubi in xusuusinta la qariyay
self.viewers[ 0 ].toggle( true ); // Soo bandhig dhammaan afar geesoodka xusuusinta (laakiin dummies-ka oo kaliya)
self.update_zoom_evt = LAPI.Evt.makeListener( self, self.update_zoom );
self.hide_zoom_evt = LAPI.Evt.makeListener( self, self.hide_zoom );
self.show_zoom();
LAPI.Evt.attach( cover, self.mouse_in, self.update_zoom_evt );
LAPI.Evt.attach( cover, self.mouse_out, self.hide_zoom_evt );
LAPI.DOM.removeChildren( self.viewers[ 0 ].msg );
self.viewers[ 0 ].msg.appendChild( ImageAnnotator.UI.get( 'wpImageAnnotatorDrawRectMsg', false ) );
self.viewers[ 0 ].msg.style.display = '';
}
self.button_div = LAPI.make( 'div' );
self.viewers[ 0 ].main_div.appendChild( self.button_div );
self.add_button = LAPI.DOM.makeButton(
'ImageAnnotationAddButton',
ImageAnnotator.UI.get( 'wpImageAnnotatorAddButtonText', true ),
add_new
);
var add_plea = ImageAnnotator.UI.needs_plea;
self.button_div.appendChild( self.add_button );
self.help_link = self.createHelpLink();
if ( self.help_link ) {
self.button_div.appendChild( document.createTextNode( '\xa0' ) );
self.button_div.appendChild( self.help_link );
}
if ( add_plea && mw.config.get( 'wgServer' ).contains( '/commons' ) ) { self.button_div.appendChild( ImageAnnotator.UI.get_plea() ); }
} // dhamaadka if may_edit
// Hel boggaga sharaxaadda faylka ee thumbnails. Sawir wixii daawadayaal ah ee aan u baahanahay inaan tan ku samayno.
var cache = {};
var get_local = [];
var get_foreign = [];
Array.forEach( self.viewers, function ( viewer, idx ) {
if ( viewer.setup_done || viewer.isLocal && !viewer.has_page ) { return; }
// Maamul oo kaliya sawirada ah mid ajnabi ah ama maxalli ah oo leh bog.
if ( cache[ viewer.realName ] ) {
cache[ viewer.realName ][ cache[ viewer.realName ].length ] = idx;
} else {
cache[ viewer.realName ] = [ idx ];
if ( !viewer.has_page ) {
get_foreign[ get_foreign.length ] = viewer.realName;
} else {
get_local[ get_local.length ] = viewer.realName;
}
}
} );
if ( get_local.length === 0 && get_foreign.length === 0 ) { return; }
// Hadda waxaan haysanaa magacyo bog oo gaar ah oo ku jira cache-ka iyo to_do. Tag oo soo qaado faylalka u dhigma
// boggaga sharaxaadda. Waxaan samaynaa taxane ah wicitaano isbarbar socda oo isku mar ah si looga fogaado in la taabto
// xadka API-ga iyo in lagu hayo dhererka URL-ka xadka hoostiisa wicitaannada foreign_repo.
function make_calls( list, execute_call, url_limit ) {
function composer( list, from, length, url_limit ) {
function compose( list, from, length, url_limit ) {
var text = '';
var done = 0;
for ( var i = from; i < from + length; i++ ) {
var new_text =
'<div class="wpImageAnnotatorInlineImageWrapper" style="display:none;">' +
'<span class="image_annotation_inline_name">' + list[ i ] + '</span>' +
'{{:' + list[ i ] + '}}' + // Qodka hore si looga fogaado in la helo xiriirada sawirada buuxa haddii aan ku dhufanno xadka parser-ka
'</div>';
if ( url_limit ) {
new_text = encodeURIComponent( new_text );
if ( text.length && ( text.length + new_text.length > url_limit ) ) { break; }
}
text = text + new_text;
done++;
// Intaa waxaa dheer, xaddid tirada boggaga sawirka ee la soo qaadayo: kuwani waxay noqon karaan kuwo waaweyn, iyo server-ka
// waxaa laga yaabaa inuu diido inuu dhab ahaantii sameeyo transclusions laakiin waxaa laga yaabaa inuu kiiskaas ku daro sawirada buuxa
// natiijada, taas oo naga dhigi lahayd inaan soo dejino sawirada buuxa, taas oo ah mid masiibo ah haddii ay jiraan
// thumbnails badan oo ku socda sawiro waaweyn bogga.
if ( done == 5 ) { break; }
}
return { text: text, n: done };
}
var param = compose( list, from, length, url_limit );
execute_call( param.text );
return param.n;
}
var start = 0, chunk = 0, to_do = list.length;
while ( to_do > 0 ) {
chunk = composer( list, start, Math.min( 50, to_do ), url_limit );
to_do -= chunk;
start += chunk;
}
}
var divRE = /(<\s*div\b)|(<\/\s*div\s*>)/ig;
var blockStart = '<div class="wpImageAnnotatorInlineImageWrapper"';
var inlineNameEnd = '</span>';
var noteStart = '<div id="image_annotation_note_';
var noteControlRE = /<div\s*class="(wpImageAnnotatorInlinedRules|image_annotation_colors")(\S|\s)*?\/div>/g;
// Codsigayaga parse wuxuu soo celiyaa HTML-ka buuxa ee nuxurka boggaga sharaxaadda, oo ay ku jiraan shuruudo kasta
// shati ama macluumaad ama shuruudo kale oo aanan dan ka lahayn, waana kuwa ay ku jiri karaan
// sawirro dheeraad ah oo aynaan doorbideynin inaan soo dejino marka aan ku darno (X)HTML-kan DOM-ka. Sida darteed, aan
// ka saarno wax walba marka laga reebo xusuusinta.
function strip_noise( html ) {
var result = '';
var m;
// Marka koowaad, ka takhalus faallooyinka HTML iyo qoraallada
html = html.replace( /<!--(.|\s)*?-->/g, '' ).replace( /<script(.|\s)*?\/script>/g, '' );
var i = html.indexOf( blockStart, idx ), idx = 0, l = html.length;
// Hadda ururi boggaga
while ( idx < l && i >= idx ) {
var j = html.indexOf( inlineNameEnd, i + blockStart.length );
if ( j < i + blockStart.length ) { break; }
result += html.substring( i, j + inlineNameEnd.length );
idx = j + inlineNameEnd.length;
// Hadda ururi dhammaan xusuusinta sawirka sawirka ee boggaas
var note_begin = 0, next_block = html.indexOf( blockStart, idx );
// Ma haysanaa kontoroolka xusuusinta sawirka ama shuruudaha midabka?
j = idx;
for ( ;; ) {
noteControlRE.lastIndex = j;
m = noteControlRE.exec( html );
if ( !m || next_block >= idx && m.index > next_block ) { break; }
result += m[ 0 ];
j = m.index + m[ 0 ].length;
}
// Ururi xusuusinta
for ( ;; ) {
note_begin = html.indexOf( noteStart, idx );
// Hubi in xirmooyinka xiga ay soo horreeyaan
if ( note_begin < idx || ( next_block >= idx && note_begin > next_block ) ) { break; }
// Billow falanqaynta <div> iyo </div> ee ku dhex jira, laga bilaabo note_begin. Kaliya iska indho-tir tags-ka kale.
var level = 1, k = note_begin + noteStart.length;
while ( level > 0 && k < l ) {
divRE.lastIndex = k;
m = divRE.exec( html );
if ( !m || m.length < 2 ) {
k = l; // Waxba lama helin gabi ahaanba?
} else {
if ( m[ 1 ] ) {
level++; k = m.index + m[ 1 ].length; // divStart ayaa la helay marka hore
} else if ( m.length > 2 && m[ 2 ] ) {
level--; k = m.index + m[ 2 ].length; // divEnd ayaa la helay marka hore
} else {
k = l; // Haa?
}
}
} // dhamaadka loop-ka ee divs-ka ku dhex jira
result += html.substring( note_begin, k );
while ( level-- > 0 ) { result += '</div>'; } // Dhamaadka maqan.
idx = k;
} // dhamaadka loop-ka ururinta xusuusinta
result += '</div>'; // Xir xirmada
i = next_block;
} // dhamaadka loop-ka ururinta boggaga
return result;
}
function setup_thumb_viewers( html_text ) {
var node = LAPI.make( 'div', null, { display: 'none' } );
document.body.appendChild( node );
try {
node.innerHTML = strip_noise( html_text );
var pages = getElementsByClassName( node, 'div', 'wpImageAnnotatorInlineImageWrapper' );
for ( var i = 0; pages && i < pages.length; i++ ) {
var notes = getElementsByClassName( pages[ i ], 'div', self.annotation_class );
if ( !notes || notes.length === 0 ) {
continue;
}
var page = self.getItem( 'inline_name', pages[ i ] );
if ( !page ) { continue; }
page = page.replace( / /g, '_' );
var viewers = cache[ page ] || cache[ 'File:' + page.substring( page.indexOf( ':' ) + 1 ) ];
if ( !viewers || viewers.length === 0 ) {
continue;
}
// Cusbooneysii xeerarka.
var rules = getElementsByClassName( pages[ i ], 'div', 'wpImageAnnotatorInlinedRules' );
var local_rules = {
inline: Object.clone( IA.rules.inline ),
thumbs: Object.clone( IA.rules.thumbs )
};
if ( rules && rules.length ) {
rules = rules[ 0 ];
if (
typeof local_rules.inline.show === 'undefined' &&
LAPI.DOM.hasClass( rules, 'wpImageAnnotatorNoInlineDisplay' )
) {
local_rules.inline.show = false;
}
if (
typeof local_rules.inline.icon === 'undefined' &&
LAPI.DOM.hasClass( rules, 'wpImageAnnotatorInlineDisplayIcon' )
) {
local_rules.inline.icon = true;
}
if (
typeof local_rules.thumbs.show === 'undefined' &&
LAPI.DOM.hasClass( rules, 'wpImageAnnotatorNoThumbs' )
) {
local_rules.thumbs.show = false;
}
if (
typeof local_rules.thumbs.icon === 'undefined' &&
LAPI.DOM.hasClass( rules, 'wpImageAnnotatorThumbDisplayIcon' )
) {
local_rules.thumbs.icon = true;
}
}
// Hubi in dhammaan la dejiyay
local_rules.inline.show =
typeof local_rules.inline.show === 'undefined' || local_rules.inline.show;
local_rules.thumbs.show =
typeof local_rules.thumbs.show === 'undefined' || local_rules.thumbs.show;
local_rules.inline.icon =
typeof local_rules.inline.icon !== 'undefined' && local_rules.inline.icon;
local_rules.thumbs.icon =
typeof local_rules.thumbs.icon !== 'undefined' && local_rules.thumbs.icon;
if ( !local_rules.inline.show ) { continue; }
// Hadda isticmaal pages[i] sida baaxad la wadaago oo ay wada isticmaalaan dhammaan daawadayaasha isticmaalaya. Tan iyo markii aan nuqul-samayno
// nuxurka xusuusinta ee muujinta xusuusinta, tani waxay shaqeysaa. Haddii kale, waxaan ku qasbaneyn lahayn inaan ku koobino xusuusinta
// baaxadda daawade kasta.
document.body.appendChild( pages[ i ] ); // U rari bannaanka 'node'
// Deji baaxadda daawadayaasha oo dhameystir dejintooda.
Array.forEach( viewers, function ( v ) {
if ( !self.viewers[ v ].isThumbnail || local_rules.thumbs.show ) {
self.viewers[ v ].scope = pages[ i ];
self.viewers[ v ].setup( self.viewers[ v ].isThumbnail && local_rules.thumbs.icon ||
self.viewers[ v ].isOther && local_rules.inline.icon );
}
} );
}
} catch ( ex ) {}
LAPI.DOM.removeNode( node );
}
ImageAnnotator.script_callbacks = [];
function make_script_calls( list, api ) {
var template = api + '?action=parse&pst&text=&prop=text&format=json' +
'&maxage=1800&smaxage=1800&uselang=' + mw.config.get( 'wgUserLanguage' ) + // fiiri bugzilla 22764
'&callback=ImageAnnotator.script_callbacks[].callback';
if ( template.startsWith( '//' ) ) { template = document.location.protocol + template; } // Ka fogow URI-yada borotokoolka la xiriira (cayayaanka IE7)
make_calls(
list,
function ( text ) {
var idx = ImageAnnotator.script_callbacks.length;
ImageAnnotator.script_callbacks[ idx ] = {
callback: function ( json ) {
if ( json && json.parse && json.parse.text && json.parse.text[ '*' ] ) {
setup_thumb_viewers( json.parse.text[ '*' ] );
}
ImageAnnotator.script_callbacks[ idx ].done = true;
if ( ImageAnnotator.script_callbacks[ idx ].script ) {
LAPI.DOM.removeNode( ImageAnnotator.script_callbacks[ idx ].script );
ImageAnnotator.script_callbacks[ idx ].script = null;
}
},
done: false
};
ImageAnnotator.script_callbacks[ idx ].script =
IA.getScript(
template.replace( 'script_callbacks[].callback', 'script_callbacks[' + idx + '].callback' )
.replace( '&text=&', '&text=' + text + '&' ),
true // Kaydinta maxalliga ah ma leh!
);
if (
ImageAnnotator.script_callbacks && ImageAnnotator.script_callbacks[ idx ] &&
ImageAnnotator.script_callbacks[ idx ].done && ImageAnnotator.script_callbacks[ idx ].script
) {
LAPI.DOM.removeNode( ImageAnnotator.script_callbacks[ idx ].script );
ImageAnnotator.script_callbacks[ idx ].script = null;
}
},
( LAPI.DOM.is_ie ? 1950 : 4000 ) - template.length // XOOGGAA dabacsanaan ah oo loogu talagalay cabbiraadaha kaydinta
);
}
if ( ( !window.XMLHttpRequest && !!window.ActiveXObject ) || !self.haveAjax ) {
make_script_calls( get_local, mw.config.get( 'wgServer' ) + mw.config.get( 'wgScriptPath' ) + '/api.php' );
} else {
make_calls(
get_local,
function ( text ) {
LAPI.Ajax.parseWikitext(
text,
function ( html_text ) { if ( html_text ) { setup_thumb_viewers( html_text ); } },
function () {},
false,
null,
'API', // Xarig go'an si loo suurtogeliyo kaydinta gabi ahaanba
1800 // Kaydinta 30 daqiiqo.
);
}
);
}
// Ma isticmaali karo Ajax kaydka ajnabiga ah, waxaa laga yaabaa inuu jebiyo siyaasadda hal-asal (tusaale ahaan wikisource.org
// ilaa wikimedia.org). Fiiro gaar ah, halkan waa inaan ka taxadarnaa dhererka URL-ka! IE waxay leedahay xad ah 2083
// xarfo (2048 qaybta jidka), iyo server-yada sidoo kale waxay soo rogi karaan xadka (server-yada WMF,
// xadka waxaa u muuqda inay yihiin 8kB).
make_script_calls( get_foreign, ImageAnnotator_config.sharedRepositoryAPI() );
},
show_zoom: function () {
var self = IA;
if (
(
self.viewers[ 0 ].factors.dx < self.zoom_threshold &&
self.viewers[ 0 ].factors.dy < self.zoom_threshold
) ||
Math.max( self.viewers[ 0 ].factors.dx, self.viewers[ 0 ].factors.dy ) < 2.0
) {
// Ka hooseeya xadka zoom-ka, ama sawirka buuxa xitaa laba jeer ma aha cabbirka horudhaca
return;
}
if ( !self.zoom ) {
self.zoom = LAPI.make(
'div',
{ id: 'image_annotator_zoom' },
{
overflow: 'hidden',
width: '200px',
height: '200px',
position: 'absolute',
display: 'none',
top: '0px',
left: '0px',
border: '2px solid #666666',
backgroundColor: 'white',
zIndex: 2050 // Kor ku xusan wax walba
}
);
var src = self.viewers[ 0 ].img.getAttribute( 'src', 2 );
// Hagaaji zoom_factor
if ( self.zoom_factor > self.viewers[ 0 ].factors.dx || self.zoom_factor > self.viewers[ 0 ].factors.dy ) { self.zoom_factor = Math.min( self.viewers[ 0 ].factors.dx, self.viewers[ 0 ].factors.dy ); }
self.zoom.appendChild( LAPI.make( 'div', null, { position: 'relative' } ) );
// Xisaabi cabbirka zoom-ka iyo xiriirka isha
var zoom_width = Math.floor( self.viewers[ 0 ].thumb.width * self.zoom_factor );
var zoom_height = Math.floor( self.viewers[ 0 ].thumb.height * self.zoom_factor );
// SVGs, mar walba isticmaal PNG la miisaamay oo loogu talagalay zoom-ka.
if ( zoom_width > 0.9 * self.viewers[ 0 ].full_img.width && src.search( /\.svg\.png$/i ) < 0 ) {
// Haddii thumb-ka aan soo dejineyno uu ku jiro gudaha 80% ee cabbirka sawirka buuxa, waxaa laga yaabaa inaan sida oo kale
// u helno sawirka buuxa beddelkeeda nooc la miisaamay.
self.zoom_factor = Math.min( self.viewers[ 0 ].factors.dx, self.viewers[ 0 ].factors.dy );
zoom_width = self.viewers[ 0 ].full_img.width;
zoom_height = self.viewers[ 0 ].full_img.height;
}
// Dhis sawirka zoom-ka ee bilowga ah. Waxaan u baahanahay inaan nuqul-samayno; haddii aan abuurno gabi ahaanba
// node DOM cusub anagu naanay, waxaa laga yaabaa inuusan ka shaqeyn IE6...
var zoomed = self.viewers[ 0 ].img.cloneNode( true );
zoomed.width = String( zoom_width );
zoomed.height = String( zoom_height );
Object.merge( { position: 'absolute', top: '0px', left: '0px' }, zoomed.style );
self.zoom.firstChild.appendChild( zoomed );
// Isdhaaf
self.zoom.firstChild.appendChild(
LAPI.make(
'div', null,
{
width: '1px',
height: '200px',
borderLeft: '1px solid red',
position: 'absolute',
top: '0px',
left: '100px'
}
)
);
self.zoom.firstChild.appendChild(
LAPI.make(
'div', null,
{
width: '200px',
height: '1px',
borderTop: '1px solid red',
position: 'absolute',
top: '100px',
left: '0px'
}
)
);
document.body.appendChild( self.zoom );
LAPI.DOM.loadImage(
self.viewers[ 0 ].imgName,
src,
zoom_width,
zoom_height,
ImageAnnotator_config.thumbnailsGeneratedAutomatically(),
function ( img ) {
// Beddel sawirka self.zoom ee self.zoom_loader, iyadoo la hubinayo inaan ilaalino leexashada
img.style.position = 'absolute';
img.style.top = self.zoom.firstChild.firstChild.style.top;
img.style.left = self.zoom.firstChild.firstChild.style.left;
img.style.display = '';
self.zoom.firstChild.replaceChild( img, self.zoom.firstChild.firstChild );
}
);
}
self.zoom.style.display = 'none'; // Waxaa lagu soo bandhigi doonaa update
},
update_zoom: function ( evt ) {
if ( !evt ) { return; } // Waxaan u baahannahay dhacdo si aan u xisaabino boosaska!
var self = IA;
if ( !self.zoom ) { return; }
var mouse_pos = LAPI.Pos.mousePosition( evt );
var origin = LAPI.Pos.position( self.cover );
if ( !LAPI.Pos.isWithin( self.cover, mouse_pos.x, mouse_pos.y ) ) {
IA.hide_zoom();
return;
}
var dx = mouse_pos.x - origin.x;
var dy = mouse_pos.y - origin.y;
// dx, dy waa leexashada ku dhex jirta sawirka horudhaca. Waafaji sawirka zoom-ka si waafaqsan.
var top = -dy * self.zoom_factor + 100;
var left = -dx * self.zoom_factor + 100;
self.zoom.firstChild.firstChild.style.top = String( top ) + 'px';
self.zoom.firstChild.firstChild.style.left = String( left ) + 'px';
self.zoom.style.top = mouse_pos.y + 10 + 'px'; // Isla markiisa hoostooda tilmaamaha jiirka
// Si siman uga dhig mid ku dhex jira aragti.
var x = ( self.is_rtl ? mouse_pos.x - 10 : mouse_pos.x + 10 );
if ( x < 0 ) { x = 0; }
self.zoom.style.left = x + 'px';
self.zoom.style.display = '';
// Hadda oo aan haysano offsetWidth, sax booska.
if ( self.is_rtl ) {
x = mouse_pos.x - 10 - self.zoom.offsetWidth;
if ( x < 0 ) { x = 0; }
} else {
var off = LAPI.Pos.scrollOffset();
var view = LAPI.Pos.viewport();
if ( x + self.zoom.offsetWidth > off.x + view.x ) { x = off.x + view.x - self.zoom.offsetWidth; }
if ( x < 0 ) { x = 0; }
}
self.zoom.style.left = x + 'px';
},
hide_zoom: function ( evt ) {
if ( !IA.zoom ) { return; }
if ( evt ) {
var mouse_pos = LAPI.Pos.mousePosition( evt );
if ( LAPI.Pos.isWithin( IA.cover, mouse_pos.x, mouse_pos.y ) ) { return; }
}
IA.zoom.style.display = 'none';
},
createHelpLink: function () {
var msg = ImageAnnotator.UI.get( 'wpImageAnnotatorHelp', false, true );
if ( !msg || !msg.lastChild ) { return null; }
// Hubi inaan isticmaalno borotokoolka saxda ah ee dhammaan sawirada:
var imgs = msg.getElementsByTagName( 'img' );
var text;
var tgt;
if ( imgs ) {
for ( var i = 0; i < imgs.length; i++ ) {
var srcFixed = imgs[ i ].getAttribute( 'src', 2 ).replace( /^https?:/, document.location.protocol );
imgs[ i ].src = srcFixed;
}
}
if (
msg.childNodes.length == 1 &&
msg.firstChild.nodeName.toLowerCase() == 'a' &&
!LAPI.DOM.hasClass( msg.firstChild, 'image' )
) {
msg.firstChild.id = 'ImageAnnotationHelpButton';
return msg.firstChild; // Xiriiriye keligii ah
}
// Haddii kale, waa taxane ka kooban ilaa saddex sawir, ama span, oo ay ku xigto
// xiriiriye.
tgt = msg.lastChild;
if ( tgt.nodeName.toLowerCase() != 'a' ) { tgt = mw.config.get( 'wgServer' ) + mw.config.get( 'wgArticlePath' ).replace( '$1', 'Help:Gadget-ImageAnnotator' ); } else { tgt = tgt.href; }
function make_handler( tgt ) {
var target = tgt;
return function ( evt ) {
var e = evt || window.event;
location.href = target;
if ( e ) { return LAPI.Evt.kill( e ); }
return false;
};
}
imgs = msg.getElementsByTagName( 'img' );
if ( !imgs || !imgs.length ) {
// Waxaa la rabaa inaan haysano spans bixineysa qoraalka badhanka
text = msg.firstChild;
if ( text.nodeName.toLowerCase() === 'span' ) { text = LAPI.DOM.getInnerText( text ); } else { text = 'Caawimaad'; }
return LAPI.DOM.makeButton(
'ImageAnnotationHelpButton'
, text
, make_handler( tgt )
);
} else {
return Buttons.makeButton( imgs, 'ImageAnnotationHelpButton', make_handler( tgt ) );
}
},
get_cover: function () {
var self = IA;
var shim;
if ( !self.cover ) {
var pos = { position: 'absolute',
left: '0px',
top: '0px',
width: self.viewers[ 0 ].thumb.width + 'px',
height: self.viewers[ 0 ].thumb.height + 'px'
};
self.cover = LAPI.make( 'div', null, pos );
self.border = self.cover.cloneNode( false );
Object.merge(
{ border: '3px solid green', top: '-3px', left: '-3px' }, self.border.style );
self.cover.style.zIndex = 2000; // Kor ku xusan qalab-tilmaameedyada
if ( LAPI.Browser.is_ie ) {
shim = LAPI.make( 'iframe', { frameBorder: 0, tabIndex: -1 }, pos );
shim.style.filter = 'alpha(Opacity=0)'; // Hubi hufnaanta
// Nasiib darro, IE6/SP2 waxay leedahay "dejinta amniga" oo la yiraahdo "Binary and script
// behaviors". Haddii taas la demiyo, miirayaashu ma shaqeeyaan, iframe-keennana wuxuu
// u muuqan lahaa sidii afar geesood oo caddaan ah. Hagaaji tan adigoo marka hore dhigaya iframe-ka isla markaaba kor
// sawirka (si loo xakameeyo kontoroolkaas daaqada leh) oo markaas dhigaya *div kale* isla markaaba
// kor ku xusan shim-kan oo leh sawirka sida sawirkiisa asalka ah.
var imgZ = self.viewers[ 0 ].img.style.zIndex;
if ( isNaN( imgZ ) ) { imgZ = 10; } // Ikhtiyaari, togan, > 1, < 500
shim.style.zIndex = imgZ + 1;
self.ieFix = shim;
// Iyo hadda div-ka bgImage...
shim = LAPI.make( 'div', null, pos );
Object.merge(
{ top: '0px',
backgroundImage: 'url(' + self.viewers[ 0 ].img.src + ')',
zIndex: imgZ + 2
}
, shim.style
);
self.ieFix2 = shim;
}
if ( LAPI.Browser.is_opera ) {
// Waxaa u muuqata in dhacdooyinka ay si buuxda uga dhex maraan div-yada hufan ee Opera.
// Sida darteed waa inaan hubinnaa in dhacdooyinkan la dilay xitaa haddii uusan daboolkayagu
// maamulin.
shim = LAPI.make( 'div', null, pos );
shim.style.zIndex = self.cover.style.zIndex - 1;
LAPI.Evt.attach( shim, 'mousemove',
function ( evt ) { return LAPI.Evt.kill( evt || window.event ); } );
LAPI.Evt.attach( shim, 'mousedown',
function ( evt ) { return LAPI.Evt.kill( evt || window.event ); } );
LAPI.Evt.attach( shim, 'mouseup',
function ( evt ) { return LAPI.Evt.kill( evt || window.event ); } );
shim.style.cursor = 'default';
self.eventFix = shim;
}
self.cover_visible = false;
}
return self.cover;
},
show_cover: function () {
var self = IA;
if ( self.cover && !self.cover_visible ) {
if ( self.ieFix ) {
self.viewers[ 0 ].img_div.appendChild( self.ieFix );
self.viewers[ 0 ].img_div.appendChild( self.ieFix2 );
}
if ( self.eventFix ) { self.viewers[ 0 ].img_div.appendChild( self.eventFix ); }
self.viewers[ 0 ].img_div.appendChild( self.cover );
self.cover_visible = true;
}
},
hide_cover: function () {
var self = IA;
if ( self.cover && self.cover_visible ) {
if ( self.ieFix ) {
LAPI.DOM.removeNode( self.ieFix );
LAPI.DOM.removeNode( self.ieFix2 );
}
if ( self.eventFix ) { LAPI.DOM.removeNode( self.eventFix ); }
LAPI.DOM.removeNode( self.cover );
self.cover_visible = false;
}
},
getRawItem: function ( what, scope ) {
var node = null;
if ( !scope || scope == document ) {
node = LAPI.$( 'image_annotation_' + what );
} else {
node = getElementsByClassName( scope, '*', 'image_annotation_' + what );
if ( node && node.length ) { node = node[ 0 ]; } else { node = null; }
}
return node;
},
getItem: function ( what, scope ) {
var node = IA.getRawItem( what, scope );
if ( !node ) { return null; }
return LAPI.DOM.getInnerText( node ).trim();
},
getIntItem: function ( what, scope ) {
var x = IA.getItem( what, scope );
if ( x !== null ) { x = parseInt( x, 10 ); }
return x;
},
findNote: function ( text, id ) {
function find( text, id, delim ) {
var start = delim.start.replace( '$1', id );
var start_match = text.indexOf( start );
if ( start_match < 0 ) { return null; }
var end = delim.end.replace( '$1', id );
var end_match = text.indexOf( end );
if ( end_match < start_match + start.length ) { return null; }
return { start: start_match, end: end_match + end.length };
}
var result = null;
for ( var i = 0; i < IA.note_delim.length && !result; i++ ) {
result = find( text, id, IA.note_delim[ i ] );
}
return result;
},
setWikitext: function ( pagetext ) {
var self = IA;
if ( self.wiki_read ) { return; }
Array.forEach( self.viewers[ 0 ].annotations, function ( note ) {
if ( note.model.id >= 0 ) {
var span = self.findNote( pagetext, note.model.id );
if ( !span ) { return; }
// Hadda soo saar wikitext-ka
var code = pagetext.substring( span.start, span.end );
for ( var i = 0; i < self.note_delim.length; i++ ) {
var start = self.note_delim[ i ].content_start.replace( '$1', note.model.id );
var end = self.note_delim[ i ].content_end.replace( '$1', note.model.id );
var j = code.indexOf( start );
var k = code.indexOf( end );
if ( j >= 0 && k >= 0 && k >= j + start.length ) {
note.model.wiki = code.substring( j + start.length, k ).trim();
return;
}
}
}
} );
self.wiki_read = true;
},
setSummary: function ( summary, initial_text, note_text ) {
if ( initial_text.contains( '$1' ) ) {
var max = ( summary.maxlength || 200 ) - initial_text.length;
if ( note_text ) {
initial_text =
initial_text.replace( '$1', ': ' + note_text.replace( '\n', ' ' ).substring( 0, max ) );
} else {
initial_text = initial_text.replace( '$1', '' );
}
}
summary.value = initial_text;
},
getScript: function ( url, bypass_local_cache, bypass_caches ) {
// Ha isticmaalin LAPI halkan, waxaa laga yaabaa inaan weli la helin
if ( bypass_caches ) {
url += ( ( url.indexOf( '?' ) >= 0 ) ? '&' : '?' ) + 'dummyTimestamp=' + ( new Date() ).getTime();
}
// Ka fogow URI-yada borotokoolka la xiriira (cayayaanka IE7)
if ( url.length >= 2 && url.substring( 0, 2 ) === '//' ) { url = document.location.protocol + url; }
if ( bypass_local_cache ) {
var s = document.createElement( 'script' );
s.setAttribute( 'src', url );
s.setAttribute( 'type', 'text/javascript' );
document.getElementsByTagName( 'head' )[ 0 ].appendChild( s );
return s;
} else {
return mw.loader.load( url );
}
},
canEdit: function () {
var self = IA;
if ( self.may_edit ) {
if ( !self.ajaxQueried ) {
self.haveAjax = ( LAPI.Ajax.getRequest() != null );
self.ajaxQueried = true;
self.may_edit = self.haveAjax;
if ( !self.may_edit && self.button_div ) {
LAPI.DOM.removeChildren( self.button_div );
self.button_div.appendChild( ImageAnnotator.UI.get( 'wpImageAnnotatorCannotEditMsg', false ) );
self.viewers[ 0 ].msg.style.display = '';
self.viewers[ 0 ].cannotEdit();
}
}
}
return self.may_edit;
}
}; // dhammaadka IA
// Waafaqsanaanta gadaal
function getElementsByClassName( scope, tag, className ) {
if ( window.jQuery ) {
return jQuery( scope ).find( ( ( !tag || tag === '*' ) ? '' : tag ) + '.' + className );
} else {
// Wiki-yada aan WMF ahayn ee laga yaabo inaan lahayn jQuery (weli), isticmaal wikibits.js getElementsByClassName
return getElementsByClassName( scope, tag, className );
}
}
window.ImageAnnotator = {
install: function ( config ) { IA.install( config ); }
};
// Billow. Dhaaf kaydka; laakiin oggolow kaydinta dhinaca macmiilka ee 4 saacadood. Fayl yar.
IA.getScript(
mw.config.get( 'wgScript' ) + '?title=MediaWiki:ImageAnnotatorConfig.js&action=raw&ctype=text/javascript',
true // Kaydinta maxalliga ah ma leh!
);
}() ); // dhammaadka baaxadda maxalliga ah
} // dhammaadka if (ilaalinta ka hortagga ku darista laba jibaaran)
biftgcu0zipa11wghbof74jxrqifwhu
MediaWiki:Gadget-ImageAnnotator
8
53707
310901
2026-10-25T12:27:50Z
Isma4l
41797
/* */
310901
wikitext
text/x-wiki
[[:commons:Help:Gadget-ImageAnnotator|ImageAnnotator]]: fiiri qoraallada iyo faallooyinka sawirka ee ku jira bogagga sharaxaadda faylka
3o8ymdubdg0k8uk5orxgochdccoezb3
MediaWiki:Gadget-imagelinks.js
8
53708
310902
2026-10-25T12:28:45Z
Isma4l
41797
Abuuray
310902
javascript
text/javascript
/* _____________________________________________________________________________
* | |
* | === DIIBAAD: FAYLKA QALABKA CAALAMIGA AH === |
* | Isbeddellada lagu sameeyo boggan waxay saameeyaan isticmaaleyaal badan. |
* | Fadlan kala hadal isbeddellada bogga wada-hadalka ama [[WT:Gadget]] ka hor inta aadan tifatirin. |
* |_____________________________________________________________________________|
*/
/**
* Toos ugu xir xiriiriyeyaasha sawirka Commons
*
* @source https://www.mediawiki.org/wiki/Snippets/Direct_imagelinks_to_Commons Revision 2026-04-16
* @author Krinkle
*/
if ( mw.config.get( 'wgNamespaceNumber', 0 ) >= 0 ) {
mw.loader.using( [ 'mediawiki.util' ] ).then( function () {
mw.hook( 'wikipage.content' ).add( function ( $content ) {
var uploadBaseRe = /^(https:)?\/\/(?:upload|thumb)\.wikimedia\.org\/wikipedia\/commons/;
var localFileNSString = mw.config.get( 'wgFormattedNamespaces' )['6'] + ':';
var server = '(https:)?' + mw.util.escapeRegExp( mw.config.get( 'wgServer' ) );
var localBasePath = new RegExp( '^(?:' + server + ')?' + mw.util.escapeRegExp(
mw.util.getUrl( localFileNSString ) )
);
var localBaseScript = new RegExp( '^(?:' + server + ')?' + mw.util.escapeRegExp(
mw.util.wikiScript() + '?title=' + mw.util.wikiUrlencode( localFileNSString )
) );
var commonsBasePath = 'https://commons.wikimedia.org/wiki/File:';
var commonsBaseScript = 'https://commons.wikimedia.org/w/index.php?title=File:';
$content.find( 'a.image, a.mw-file-description' ).each( function ( i ) {
if ( uploadBaseRe.test( $( this ).find( 'img' ).attr( 'src' ) ) ) {
this.href = this.href
.replace( localBasePath, commonsBasePath )
.replace( localBaseScript, commonsBaseScript );
}
} );
} );
} );
}
7kt3u1ps5jllstgrrm363zkay4xh19g
MediaWiki:Gadget-imagelinks
8
53709
310903
2026-10-25T12:29:37Z
Isma4l
41797
/* */
310903
wikitext
text/x-wiki
U adeegso xiriiriyeyaasha sawirka Commons faylalka halkaas lagu martigeliyo
d0v0iuhej01c8tgishdzm2qw35557zs
MediaWiki:Gadget-popups.js
8
53710
310904
2026-10-25T12:36:27Z
Isma4l
41797
Abuuray
310904
javascript
text/javascript
// STARTFILE: main.js
// **********************************************************************
// ** **
// ** isbeddelada faylkaan waxay saameeyaan isticmaaleyso badan. **
// ** fadlan kala hadal bogga wada-hadalka ka hor inta aadan wax ka beddelin **
// ** **
// **********************************************************************
// ** **
// ** haddii aad wax ka beddesho faylkaan, hubi in tifaftirahaagu uu aqoonsan yahay **
// ** sida utf8, ama xarfaha layaabka leh iyo kuwa cajiibka ah ee ku jira magacyada **
// ** hoose ay si buuxda u jabi doonaan. Waxaad ku hubin kartaa badhanka muujinta **
// ** isbeddelada ka hor inta aadan gudbin tifaftirka. **
// ** tijaabo: مدیا מיוחד Мэдыя **
// ** **
// **********************************************************************
/* eslint-env browser */
/* global $, jQuery, mw, window */
// Hagaaji goor dambe
/* global log, errlog, popupStrings, wikEdUseWikEd, WikEdUpdateFrame */
$(() => {
//////////////////////////////////////////////////
// Guud ahaan (Globals)
//
// Isku dayaya in inta badan kuwaan la geliyo shayga pg (popup globals)
const pg = {
api: {}, // Codsiyada MediaWiki API
re: {}, // weedhaha joogtada ah (regexps)
ns: {}, // meelaha magacyada (namespaces)
string: {}, // xarfaha/ereyada la turjumi karo
wiki: {}, // macluumaadka bogga maxalliga ah
user: {}, // macluumaadka isticmaalaha hadda
misc: {}, // WAX KANCOL MA AHAYN
option: {}, // xulashooyinka, eeg newOption iwm.
optionDefault: {}, // qiimaha xulashada caadiga ah
flag: {}, // calaamadaha kala duwan
cache: {}, // kaydka bogga iyo sawirka
structures: {}, // qaab-dhismeedka xiriirinta navlink
timer: {}, // dhammaan noocyada saacadaha (oo aad u badan)
counter: {}, // .. iyo dhammaan noocyada xisaabiyeyaasha
current: {}, // macluumaadka xaaladda
fn: {}, // shaqooyinka (functions)
endoflist: null,
};
/* Jooji haddii qalabka/qoraalka la soo rarayo laba jeer */
/* Shay leh aqoonsiga "pg" wuxuu ku dari lahaa guryaha window.pg, iska indhatir hantidaas */
if (window.pg && !(window.pg instanceof HTMLElement)) {
return;
}
/* U dhoofinta macnaha guud ee caalamiga ah */
window.pg = pg;
/// Kala duwanaanshaha Maxalliga ah (Local Variables): ///
/// mode:c ///
/// End: ///
// ENDFILE: main.js
// STARTFILE: actions.js
function setupTooltips(container, remove, force, popData) {
log('setupTooltips, container=' + container + ', remove=' + remove);
if (!container) {
// wicitaanka ugu horreeya ee ugu muhiimsan
if (
getValueOf('popupOnEditSelection') &&
document &&
document.editform &&
document.editform.wpTextbox1
) {
document.editform.wpTextbox1.onmouseup = doSelectionPopup;
}
// maqaalka/nuxurku waa shay ku xiran qaab-dhismeedka
container = defaultPopupsContainer();
}
if (!remove && !force && container.ranSetupTooltipsAlready) {
return;
}
container.ranSetupTooltipsAlready = !remove;
let anchors;
anchors = container.getElementsByTagName('A');
setupTooltipsLoop(anchors, 0, 250, 100, remove, popData);
}
function defaultPopupsContainer() {
if (getValueOf('popupOnlyArticleLinks')) {
return (
document.querySelector('.skin-vector-2022 .vector-body') ||
document.getElementById('mw_content') ||
document.getElementById('content') ||
document.getElementById('article') ||
document
);
}
return document;
}
function setupTooltipsLoop(anchors, begin, howmany, sleep, remove, popData) {
log(simplePrintf('setupTooltipsLoop(%s,%s,%s,%s,%s)', arguments));
const finish = begin + howmany;
const loopend = Math.min(finish, anchors.length);
let j = loopend - begin;
log(
'setupTooltips: anchors.length=' +
anchors.length +
', begin=' +
begin +
', howmany=' +
howmany +
', loopend=' +
loopend +
', remove=' +
remove
);
const doTooltip = remove ? removeTooltip : addTooltip;
// isku day loop dhakhso badan (?)
if (j > 0) {
do {
const a = anchors[loopend - j];
if (typeof a === 'undefined' || !a || !a.href) {
log('waxaa helay sanduuq madhan index-ka ' + loopend - j);
continue;
}
doTooltip(a, popData);
} while (--j);
}
if (finish < anchors.length) {
setTimeout(() => {
setupTooltipsLoop(anchors, finish, howmany, sleep, remove, popData);
}, sleep);
} else {
if (!remove && !getValueOf('popupTocLinks')) {
rmTocTooltips();
}
pg.flag.finishedLoading = true;
}
}
// meesha ka saar popups-ka TOC-ga
// Tani sidoo kale waxay dishaa wax kasta oo onclick ah oo ka dhacayey toc-ga
function rmTocTooltips() {
const toc = document.getElementById('toc');
if (toc) {
const tocLinks = toc.getElementsByTagName('A');
const tocLen = tocLinks.length;
for (let j = 0; j < tocLen; ++j) {
removeTooltip(tocLinks[j], true);
}
}
}
function addTooltip(a, popData) {
if (!isPopupLink(a)) {
return;
}
a.onmouseover = mouseOverWikiLink;
a.onmouseout = mouseOutWikiLink;
a.onmousedown = killPopup;
a.hasPopup = true;
a.popData = popData;
}
function removeTooltip(a) {
if (!a.hasPopup) {
return;
}
a.onmouseover = null;
a.onmouseout = null;
if (a.originalTitle) {
a.title = a.originalTitle;
}
a.hasPopup = false;
}
function removeTitle(a) {
if (!a.originalTitle) {
a.originalTitle = a.title;
}
a.title = '';
}
function restoreTitle(a) {
if (a.title || !a.originalTitle) {
return;
}
a.title = a.originalTitle;
}
function registerHooks(np) {
const popupMaxWidth = getValueOf('popupMaxWidth');
if (typeof popupMaxWidth === 'number') {
const setMaxWidth = function () {
np.mainDiv.style.maxWidth = popupMaxWidth + 'px';
np.maxWidth = popupMaxWidth;
};
np.addHook(setMaxWidth, 'unhide', 'before');
}
np.addHook(addPopupShortcuts, 'unhide', 'after');
np.addHook(rmPopupShortcuts, 'hide', 'before');
}
function removeModifierKeyHandler(a) {
//ka saar dhageystayaasha furaha wax ka beddelka haddii ay jiraan kuwii lagu daray mouseOverWikiLink
document.removeEventListener('keydown', a.modifierKeyHandler, false);
document.removeEventListener('keyup', a.modifierKeyHandler, false);
}
function mouseOverWikiLink(evt) {
if (!evt && window.event) {
evt = window.event;
}
// haddii wax ka beddelaha loo baahdo, dhagayso,
// waxaan ka saari doonaa dhageystaha marka aan ka baxno xiriirkan ama aan dilno popup-ka.
if (getValueOf('popupModifier')) {
// haddii popupModifierAction = enable, waa inaan popup-gareynaa marka furaha la taabto
// haddii popupModifierAction = disable, waa inaan popup-gareynaa ilaa furaha la taabto mooyaane
const action = getValueOf('popupModifierAction');
const key = action == 'disable' ? 'keyup' : 'keydown';
const a = this;
a.modifierKeyHandler = function (evt) {
mouseOverWikiLink2(a, evt);
};
document.addEventListener(key, a.modifierKeyHandler, false);
}
return mouseOverWikiLink2(this, evt);
}
/**
* Waxaa la helayaa shayga liiska tixraacyada ee uu beegsanayo xiriirinta hoose ee la bixiyay.
* Tani waa caadiyan shay li (li element) oo ku dhex jira ol.references oo ku dhex jira reflist.
*
* @param {Element} a - Xiriirinta hoose (footnote link).
* @return {Element|boolean} Shayga la beegsaday, ama been haddii aan la helin.
*/
function footnoteTarget(a) {
const aTitle = Title.fromAnchor(a);
// Waxaan rabnaa ".3A" halkii ay ka noqon lahayd "%3A" ama "?" halkan, markaa isticmaal guryaha anchor si toos ah
const anch = aTitle.anchor;
if (!/^(cite_note-|_note-|endnote)/.test(anch)) {
return false;
}
const lTitle = Title.fromURL(location.href);
if (lTitle.toString(true) !== aTitle.toString(true)) {
return false;
}
let el = document.getElementById(anch);
while (el && typeof el.nodeName === 'string') {
const nt = el.nodeName.toLowerCase();
if (nt === 'li') {
return el;
} else if (nt === 'body') {
return false;
} else if (el.parentNode) {
el = el.parentNode;
} else {
return false;
}
}
return false;
}
function footnotePreview(x, navpop) {
let content = x.innerHTML;
const ol = x.closest('ol.mw-subreference-list');
if (ol) {
const referenceText = ol.parentElement.querySelector(
':scope > .reference-text'
);
if (referenceText) {
content =
'<div>' +
referenceText.outerHTML +
'<div style="display: block; margin-bottom: 0.7em;">' +
content +
'</div></div>';
}
}
setPopupHTML('<hr />' + content, 'popupPreview', navpop.idNumber);
}
function modifierPressed(evt) {
const mod = getValueOf('popupModifier');
if (!mod) {
return false;
}
if (!evt && window.event) {
evt = window.event;
}
return evt && mod && evt[mod.toLowerCase() + 'Key'];
}
// Hubisa haddii furaha saxda ah la taabtay/aan la taaban haddii loo baahdo
function isCorrectModifier(a, evt) {
if (!getValueOf('popupModifier')) {
return true;
}
// haddii popupModifierAction = enable, waa inaan popup-gareynaa marka furaha la taabto
// haddii popupModifierAction = disable, waa inaan popup-gareynaa ilaa furaha la taabto mooyaane
const action = getValueOf('popupModifierAction');
return (
(action == 'enable' && modifierPressed(evt)) || (action == 'disable' && !modifierPressed(evt))
);
}
function mouseOverWikiLink2(a, evt) {
if (!isCorrectModifier(a, evt)) {
return;
}
if (getValueOf('removeTitles')) {
removeTitle(a);
}
if (a == pg.current.link && a.navpopup && a.navpopup.isVisible()) {
return;
}
pg.current.link = a;
if (getValueOf('simplePopups') && !pg.option.popupStructure) {
// dib u deji *qiimaha caadiga ah* ee popupStructure
setDefault('popupStructure', 'original');
}
const article = new Title().fromAnchor(a);
// deji doorsoomaha caalamiga ah (ugh) si uu u haysto maqaalka (wikipage)
pg.current.article = article;
if (!a.navpopup) {
a.navpopup = newNavpopup(a, article);
pg.current.linksHash[a.href] = a.navpopup;
pg.current.links.push(a);
}
if (a.navpopup.pending === null || a.navpopup.pending !== 0) {
// labada popups ee cusub ama kuwa shaqada aan dhammaan lahayn dib ayaa looga bilaabayaa eber
simplePopupContent(a, article);
}
a.navpopup.showSoonIfStable(a.navpopup.delay);
clearInterval(pg.timer.checkPopupPosition);
pg.timer.checkPopupPosition = setInterval(checkPopupPosition, 600);
if (getValueOf('simplePopups')) {
if (getValueOf('popupPreviewButton') && !a.simpleNoMore) {
const d = document.createElement('div');
d.className = 'popupPreviewButtonDiv';
const s = document.createElement('span');
d.appendChild(s);
s.className = 'popupPreviewButton';
s['on' + getValueOf('popupPreviewButtonEvent')] = function () {
a.simpleNoMore = true;
d.style.display = 'none';
nonsimplePopupContent(a, article);
};
s.innerHTML = popupString('show preview');
setPopupHTML(d, 'popupPreview', a.navpopup.idNumber);
}
}
if (a.navpopup.pending !== 0) {
nonsimplePopupContent(a, article);
}
}
// simplePopupContent: nuxurka aan u baahnayn soo dejin dheeraad ah
// (waxaa la tusaa xitaa marka simplePopups ay run tahay)
function simplePopupContent(a, article) {
/* FIXME hack */ a.navpopup.hasPopupMenu = false;
a.navpopup.setInnerHTML(popupHTML(a));
fillEmptySpans({ navpopup: a.navpopup });
if (getValueOf('popupDraggable')) {
let dragHandle = getValueOf('popupDragHandle') || null;
if (dragHandle && dragHandle != 'all') {
dragHandle += a.navpopup.idNumber;
}
setTimeout(() => {
a.navpopup.makeDraggable(dragHandle);
}, 150);
}
if (getValueOf('popupRedlinkRemoval') && a.className == 'new') {
setPopupHTML('<br>' + popupRedlinkHTML(article), 'popupRedlink', a.navpopup.idNumber);
}
}
function debugData(navpopup) {
if (getValueOf('popupDebugging') && navpopup.idNumber) {
setPopupHTML(
'idNumber=' + navpopup.idNumber + ', pending=' + navpopup.pending,
'popupError',
navpopup.idNumber
);
}
}
function newNavpopup(a, article) {
const navpopup = new Navpopup();
navpopup.fuzz = 5;
navpopup.delay = getValueOf('popupDelay') * 1000;
// kordhi xisaabiyaha caalamiga ah hadda
navpopup.idNumber = ++pg.idNumber;
navpopup.parentAnchor = a;
navpopup.parentPopup = a.popData && a.popData.owner;
navpopup.article = article;
registerHooks(navpopup);
return navpopup;
}
// Miyaa la tusaa macnaha guud ee aan fududayn (nonsimple)?
// Haddii simplePopups loo dejiyo run (true), markaas ma tusno macnaha guud ee aan fududayn,
// laakiin haddii "show preview" hoose la riixo waxaan tusno macnaha guud ee aan fududayn.
function shouldShowNonSimple(a) {
return !getValueOf('simplePopups') || a.simpleNoMore;
}
// Miyaa la tusaa macnaha guud ee aan fududayn ee uu xukumo xulashada (tusaale ahaan popupUserInfo)?
// Haddii isticmaalahu si cad u codsaday macnaha guud ee aan fududayn iyadoo la dejinayo xulashada run (true),
// markaas waa aan tusno xitaa habka aan fududayn.
function shouldShow(a, option) {
if (shouldShowNonSimple(a)) {
return getValueOf(option);
} else {
return typeof window[option] != 'undefined' && window[option];
}
}
function nonsimplePopupContent(a, article) {
let diff = null,
history = null;
const params = parseParams(a.href);
const oldid = typeof params.oldid == 'undefined' ? null : params.oldid;
if (shouldShow(a, 'popupPreviewDiffs')) {
diff = params.diff;
}
if (shouldShow(a, 'popupPreviewHistory')) {
history = params.action == 'history';
}
a.navpopup.pending = 0;
const referenceElement = footnoteTarget(a);
if (referenceElement) {
footnotePreview(referenceElement, a.navpopup);
} else if (diff || diff === 0) {
loadDiff(article, oldid, diff, a.navpopup);
} else if (history) {
loadAPIPreview('history', article, a.navpopup);
} else if (shouldShowNonSimple(a) && pg.re.contribs.test(a.href)) {
loadAPIPreview('contribs', article, a.navpopup);
} else if (shouldShowNonSimple(a) && pg.re.backlinks.test(a.href)) {
loadAPIPreview('backlinks', article, a.navpopup);
} else if (
// FIXME waa inay awoodaa inay hesho dhammaan isku-darka horudhaca ee leh xulashooyinka
article.namespaceId() == pg.nsImageId &&
(shouldShow(a, 'imagePopupsForImages') || !anchorContainsImage(a))
) {
loadAPIPreview('imagepagepreview', article, a.navpopup);
loadImage(article, a.navpopup);
} else {
if (article.namespaceId() == pg.nsCategoryId && shouldShow(a, 'popupCategoryMembers')) {
loadAPIPreview('category', article, a.navpopup);
} else if (
(article.namespaceId() == pg.nsUserId || article.namespaceId() == pg.nsUsertalkId) &&
shouldShow(a, 'popupUserInfo')
) {
loadAPIPreview('userinfo', article, a.navpopup);
}
if (shouldShowNonSimple(a)) {
startArticlePreview(article, oldid, a.navpopup);
}
}
}
function pendingNavpopTask(navpop) {
if (navpop && navpop.pending === null) {
navpop.pending = 0;
}
++navpop.pending;
debugData(navpop);
}
function completedNavpopTask(navpop) {
if (navpop && navpop.pending) {
--navpop.pending;
}
debugData(navpop);
}
function startArticlePreview(article, oldid, navpop) {
navpop.redir = 0;
loadPreview(article, oldid, navpop);
}
function loadPreview(article, oldid, navpop) {
if (!navpop.redir) {
navpop.originalArticle = article;
}
article.oldid = oldid;
loadAPIPreview('revision', article, navpop);
}
function loadPreviewFromRedir(redirMatch, navpop) {
// redirMatch waa regex match
const target = new Title().fromWikiText(redirMatch[2]);
// ku qor (ama ku dar) anchor halka laga bilaabo bartilmaameedka asalka ah
// mediawiki wuu qoraa; tusaale ahaan [[User:Lupin/foo3#Done]]
if (navpop.article.anchor) {
target.anchor = navpop.article.anchor;
}
navpop.redir++;
navpop.redirTarget = target;
const warnRedir = redirLink(target, navpop.article);
setPopupHTML(warnRedir, 'popupWarnRedir', navpop.idNumber);
navpop.article = target;
fillEmptySpans({ redir: true, redirTarget: target, navpopup: navpop });
return loadPreview(target, null, navpop);
}
function insertPreview(download) {
if (!download.owner) {
return;
}
const redirMatch = pg.re.redirect.exec(download.data);
if (download.owner.redir === 0 && redirMatch) {
loadPreviewFromRedir(redirMatch, download.owner);
return;
}
if (download.owner.visible || !getValueOf('popupLazyPreviews')) {
insertPreviewNow(download);
} else {
const id = download.owner.redir ? 'PREVIEW_REDIR_HOOK' : 'PREVIEW_HOOK';
download.owner.addHook(
() => {
insertPreviewNow(download);
return true;
},
'unhide',
'after',
id
);
}
}
function insertPreviewNow(download) {
if (!download.owner) {
return;
}
const wikiText = download.data;
const navpop = download.owner;
const art = navpop.redirTarget || navpop.originalArticle;
makeFixDabs(wikiText, navpop);
if (getValueOf('popupSummaryData')) {
getPageInfo(wikiText, download);
setPopupTrailer(getPageInfo(wikiText, download), navpop.idNumber);
}
let imagePage = '';
if (art.namespaceId() == pg.nsImageId) {
imagePage = art.toString();
} else {
imagePage = getValidImageFromWikiText(wikiText);
}
if (imagePage) {
loadImage(Title.fromWikiText(imagePage), navpop);
}
if (getValueOf('popupPreviews')) {
insertArticlePreview(download, art, navpop);
}
}
function insertArticlePreview(download, art, navpop) {
if (download && typeof download.data == typeof '') {
if (art.namespaceId() == pg.nsTemplateId && getValueOf('popupPreviewRawTemplates')) {
// FIXME barbardhig/isku dar koodka baxsashada diff ee wikitext
const h =
'<hr /><span style="font-family: monospace;">' +
download.data.entify().split('\\n').join('<br />\\n') +
'</span>';
setPopupHTML(h, 'popupPreview', navpop.idNumber);
} else {
const p = prepPreviewmaker(download.data, art, navpop);
p.showPreview();
}
}
}
function prepPreviewmaker(data, article, navpop) {
// wax ka qabashada anchors-ka khiyaanada leh
const d = anchorize(data, article.anchorString());
const urlBase = joinPath([pg.wiki.articlebase, article.urlString()]);
const p = new Previewmaker(d, urlBase, navpop);
return p;
}
// Isku day in aad ku dayato habka mediawiki u soo saarto HTML anchors cinlovlada qaybaha
function anchorize(d, anch) {
if (!anch) {
return d;
}
const anchRe = RegExp(
'(?:=+\\s*' +
literalizeRegex(anch).replace(/[_ ]/g, '[_ ]') +
'\\s*=+|\\{\\{\\s*' +
getValueOf('popupAnchorRegexp') +
'\\s*(?:\\|[^|}]*)*?\\s*' +
literalizeRegex(anch) +
'\\s*(?:\\|[^}]*)?}})'
);
const match = d.match(anchRe);
if (match && match.length > 0 && match[0]) {
return d.substring(d.indexOf(match[0]));
}
// hadda isku day inaad wax ka qabato == foo [[bar|baz]] boom == -> #foo_baz_boom
const lines = d.split('\n');
for (let i = 0; i < lines.length; ++i) {
lines[i] = lines[i]
.replace(/[[]{2}([^|\]]*?[|])?(.*?)[\]]{2}/g, '$2')
.replace(/'''([^'])/g, '$1')
.replace(/''([^'])/g, '$1');
if (lines[i].match(anchRe)) {
return d.split('\n').slice(i).join('\n').replace(/^[^=]*/, '');
}
}
return d;
}
function killPopup() {
removeModifierKeyHandler(this);
if (getValueOf('popupShortcutKeys')) {
rmPopupShortcuts();
}
if (!pg) {
return;
}
if (pg.current.link && pg.current.link.navpopup) {
pg.current.link.navpopup.banish();
}
pg.current.link = null;
abortAllDownloads();
if (pg.timer.checkPopupPosition) {
clearInterval(pg.timer.checkPopupPosition);
pg.timer.checkPopupPosition = null;
}
return true; // ilaali falka caadiga ah
}
// ENDFILE: actions.js
// STARTFILE: domdrag.js
/**
* @file
* Shayga {@link Drag}, kaas oo u sahlaya walxaha in la jiido.
*
* <pre>
* *************************************************
* dom-drag.js
* 09.25.2001
* www.youngpup.net
* **************************************************
* 10.28.2001 - la hagaajiyay cayayaan yar oo dhacdooyinka
* mararka qaarkood ka shaqeysiiyay gacanta, ee maaha xididka (root).
* *************************************************
* La dhimay, qaar ka mid ah hooks-ka waxaa ku daray [[User:Lupin]]
*
* Copyright Aaron Boodman.
* Sheegashada waxyaabaha doqomimada ah maalin walba ilaa March 2001.
* </pre>
*/
/**
* Abuuraya shay cusub oo Drag ah. Tan waxaa loo isticmaalaa in lagu sameeyo walxaha DOM kala duwan kuwo la jiidi karo.
*
* @constructor
*/
function Drag() {
/**
* Shuruuda lagu go'aaminayo in la jiido iyo in kale. Shaqadani waa inay qaadato halbeeg (parameter) hal ah,
* oo ah Dhacdo (Event). Si aad tan u damiso, u deji <code>null</code>.
*
* @type {Function}
*/
this.startCondition = null;
/**
* Hook la fulinayo marka jiididdu dhammaato. Tani waxaa la siiyaa isku-duwayasha ugu dambeeya ee
* shayga la jiiday (laba nambar oo dhan, x iyo y). Si tan loo damiso, u deji <code>null</code>.
*
* @type {Function}
*/
this.endHook = null;
}
/**
* Waxaa la helayaa dhacdo hab browser-ka oo dhan ah.
*
* @param {Event} e
* @private
*/
Drag.prototype.fixE = function (e) {
if (typeof e == 'undefined') {
e = window.event;
}
if (typeof e.layerX == 'undefined') {
e.layerX = e.offsetX;
}
if (typeof e.layerY == 'undefined') {
e.layerY = e.offsetY;
}
return e;
};
/**
* Bilowgii tusaalaha Drag adoo u sheegaya shayga aad rabto inuu noqdo mid la jiidi karo, iyo waxa
* aad rabto in aad ku jiido.
*
* @param {HTMLElement} o "Gacanta" (handle) taas oo <code>oRoot</code> lagu jiido.
* @param {HTMLElement} oRoot Shayga dhaqaaqa marka <code>o</code> la jiido, ama <code>o</code> haddii la tirtiro.
*/
Drag.prototype.init = function (o, oRoot) {
const dragObj = this;
this.obj = o;
o.onmousedown = function (e) {
dragObj.start.apply(dragObj, [e]);
};
o.dragging = false;
o.popups_draggable = true;
o.hmode = true;
o.vmode = true;
o.root = oRoot || o;
if (isNaN(parseInt(o.root.style.left, 10))) {
o.root.style.left = '0px';
}
if (isNaN(parseInt(o.root.style.top, 10))) {
o.root.style.top = '0px';
}
o.root.onthisStart = function () {};
o.root.onthisEnd = function () {};
o.root.onthis = function () {};
};
/**
* Bilaabaya jiididda.
*
* @private
* @param {Event} e
*/
Drag.prototype.start = function (e) {
const o = this.obj; // = this;
e = this.fixE(e);
if (this.startCondition && !this.startCondition(e)) {
return;
}
const y = parseInt(o.vmode ? o.root.style.top : o.root.style.bottom, 10);
const x = parseInt(o.hmode ? o.root.style.left : o.root.style.right, 10);
o.root.onthisStart(x, y);
o.lastMouseX = e.clientX;
o.lastMouseY = e.clientY;
const dragObj = this;
o.onmousemoveDefault = document.onmousemove;
o.dragging = true;
document.onmousemove = function (e) {
dragObj.drag.apply(dragObj, [e]);
};
document.onmouseup = function (e) {
dragObj.end.apply(dragObj, [e]);
};
return false;
};
/**
* Wax qabta jiididda.
*
* @param {Event} e
* @private
*/
Drag.prototype.drag = function (e) {
e = this.fixE(e);
const o = this.obj;
const ey = e.clientY;
const ex = e.clientX;
const y = parseInt(o.vmode ? o.root.style.top : o.root.style.bottom, 10);
const x = parseInt(o.hmode ? o.root.style.left : o.root.style.right, 10);
let nx, ny;
nx = x + (ex - o.lastMouseX) * (o.hmode ? 1 : -1);
ny = y + (ey - o.lastMouseY) * (o.vmode ? 1 : -1);
this.obj.root.style[o.hmode ? 'left' : 'right'] = nx + 'px';
this.obj.root.style[o.vmode ? 'top' : 'bottom'] = ny + 'px';
this.obj.lastMouseX = ex;
this.obj.lastMouseY = ey;
this.obj.root.onthis(nx, ny);
return false;
};
/**
* Dhameeya jiididda.
*
* @private
*/
Drag.prototype.end = function () {
document.onmousemove = this.obj.onmousemoveDefault;
document.onmouseup = null;
this.obj.dragging = false;
if (this.endHook) {
this.endHook(
parseInt(this.obj.root.style[this.obj.hmode ? 'left' : 'right'], 10),
parseInt(this.obj.root.style[this.obj.vmode ? 'top' : 'bottom'], 10)
);
}
};
// ENDFILE: domdrag.js
// STARTFILE: structures.js
pg.structures.original = {};
pg.structures.original.popupLayout = function () {
return [
'popupError',
'popupImage',
'popupTopLinks',
'popupTitle',
'popupUserData',
'popupData',
'popupOtherLinks',
'popupRedir',
[
'popupWarnRedir',
'popupRedirTopLinks',
'popupRedirTitle',
'popupRedirData',
'popupRedirOtherLinks',
],
'popupMiscTools',
['popupRedlink'],
'popupPrePreviewSep',
'popupPreview',
'popupSecondPreview',
'popupPreviewMore',
'popupPostPreview',
'popupFixDab',
];
};
pg.structures.original.popupRedirSpans = function () {
return [
'popupRedir',
'popupWarnRedir',
'popupRedirTopLinks',
'popupRedirTitle',
'popupRedirData',
'popupRedirOtherLinks',
];
};
pg.structures.original.popupTitle = function (x) {
log('defaultstructure.popupTitle');
if (!getValueOf('popupNavLinks')) {
return navlinkStringToHTML('<b><<mainlink>></b>', x.article, x.params);
}
return '';
};
pg.structures.original.popupTopLinks = function (x) {
log('defaultstructure.popupTopLinks');
if (getValueOf('popupNavLinks')) {
return navLinksHTML(x.article, x.hint, x.params);
}
return '';
};
pg.structures.original.popupImage = function (x) {
log('original.popupImage, x.article=' + x.article + ', x.navpop.idNumber=' + x.navpop.idNumber);
return imageHTML(x.article, x.navpop.idNumber);
};
pg.structures.original.popupRedirTitle = pg.structures.original.popupTitle;
pg.structures.original.popupRedirTopLinks = pg.structures.original.popupTopLinks;
function copyStructure(oldStructure, newStructure) {
pg.structures[newStructure] = {};
for (const prop in pg.structures[oldStructure]) {
pg.structures[newStructure][prop] = pg.structures[oldStructure][prop];
}
}
copyStructure('original', 'nostalgia');
pg.structures.nostalgia.popupTopLinks = function (x) {
let str = '';
str += '<b><<mainlink|shortcut= >></b>';
// xiriirada isticmaalaha
// contribs - log - count - email - block
// xisaabi kaliya haddii ay khusayso; xannib kaliya haddii popupAdminLinks ay jirto
str += 'if(user){<br><<contribs|shortcut=c>>';
str += 'if(wikimedia){*<<count|shortcut=#>>}';
str += 'if(ipuser){}else{*<<email|shortcut=E>>}if(admin){*<<block|shortcut=b>>}}';
// xiriirada wax ka beddelka (editing)
// talkpage -> edit|new - history - un|watch - article|edit
// other page -> edit - history - un|watch - talk|edit|new
const editstr = '<<edit|shortcut=e>>';
const editOldidStr =
'if(oldid){<<editOld|shortcut=e>>|<<revert|shortcut=v|rv>>|<<edit|cur>>}else{' +
editstr +
'}';
const historystr = '<<history|shortcut=h>>';
const watchstr = '<<unwatch|unwatchShort>>|<<watch|shortcut=w|watchThingy>>';
str +=
'<br>if(talk){' +
editOldidStr +
'|<<new|shortcut=+>>' +
'*' +
historystr +
'*' +
watchstr +
'*' +
'<b><<article|shortcut=a>></b>|<<editArticle|edit>>' +
'}else{' + // ma aha bog wadahadal
editOldidStr +
'*' +
historystr +
'*' +
watchstr +
'*' +
'<b><<talk|shortcut=t>></b>|<<editTalk|edit>>|<<newTalk|shortcut=+|new>>}';
// xiriirada kala duwan (misc)
str += '<br><<whatLinksHere|shortcut=l>>*<<relatedChanges|shortcut=r>>';
str += 'if(admin){<br>}else{*}<<move|shortcut=m>>';
// xiriirada maamulka (admin links)
str +=
'if(admin){*<<unprotect|unprotectShort>>|<<protect|shortcut=p>>*' +
'<<undelete|undeleteShort>>|<<delete|shortcut=d>>}';
return navlinkStringToHTML(str, x.article, x.params);
};
pg.structures.nostalgia.popupRedirTopLinks = pg.structures.nostalgia.popupTopLinks;
/** -- fancy -- */
copyStructure('original', 'fancy');
pg.structures.fancy.popupTitle = function (x) {
return navlinkStringToHTML('<font size=+0><<mainlink>></font>', x.article, x.params);
};
pg.structures.fancy.popupTopLinks = function (x) {
const hist =
'<<history|shortcut=h|hist>>|<<lastEdit|shortcut=/|last>>|<<editors|shortcut=E|eds>>';
const watch = '<<unwatch|unwatchShort>>|<<watch|shortcut=w|watchThingy>>';
const move = '<<move|shortcut=m|move>>';
return navlinkStringToHTML(
'if(talk){' +
'<<edit|shortcut=e>>|<<new|shortcut=+|+>>*' +
hist +
'*' +
'<<article|shortcut=a>>|<<editArticle|edit>>' +
'*' +
watch +
'*' +
move +
'}else{<<edit|shortcut=e>>*' +
hist +
'*<<talk|shortcut=t|>>|<<editTalk|edit>>|<<newTalk|shortcut=+|new>>' +
'*' +
watch +
'*' +
move +
'}<br>',
x.article,
x.params
);
};
pg.structures.fancy.popupOtherLinks = function (x) {
const admin =
'<<unprotect|unprotectShort>>|<<protect|shortcut=p>>*<<undelete|undeleteShort>>|<<delete|shortcut=d|del>>';
let user = '<<contribs|shortcut=c>>if(wikimedia){|<<count|shortcut=#|#>>}';
user +=
'if(ipuser){|<<arin>>}else{*<<email|shortcut=E|' +
popupString('email') +
'>>}if(admin){*<<block|shortcut=b>>}';
const normal = '<<whatLinksHere|shortcut=l|links here>>*<<relatedChanges|shortcut=r|related>>';
return navlinkStringToHTML(
'<br>if(user){' + user + '*}if(admin){' + admin + 'if(user){<br>}else{*}}' + normal,
x.article,
x.params
);
};
pg.structures.fancy.popupRedirTitle = pg.structures.fancy.popupTitle;
pg.structures.fancy.popupRedirTopLinks = pg.structures.fancy.popupTopLinks;
pg.structures.fancy.popupRedirOtherLinks = pg.structures.fancy.popupOtherLinks;
/** -- fancy2 -- */
// hack loogu talagalay [[User:MacGyverMagic]]
copyStructure('fancy', 'fancy2');
pg.structures.fancy2.popupTopLinks = function (x) {
// ka saar <br>-ka dhamaadka oo mid geli bilowga
return '<br>' + pg.structures.fancy.popupTopLinks(x).replace(/<br>$/i, '');
};
pg.structures.fancy2.popupLayout = function () {
// u guuri toplinks cinwaanka ka dib
return [
'popupError',
'popupImage',
'popupTitle',
'popupUserData',
'popupData',
'popupTopLinks',
'popupOtherLinks',
'popupRedir',
[
'popupWarnRedir',
'popupRedirTopLinks',
'popupRedirTitle',
'popupRedirData',
'popupRedirOtherLinks',
],
'popupMiscTools',
['popupRedlink'],
'popupPrePreviewSep',
'popupPreview',
'popupSecondPreview',
'popupPreviewMore',
'popupPostPreview',
'popupFixDab',
];
};
/** -- menus -- */
copyStructure('original', 'menus');
pg.structures.menus.popupLayout = function () {
return [
'popupError',
'popupImage',
'popupTopLinks',
'popupTitle',
'popupOtherLinks',
'popupRedir',
[
'popupWarnRedir',
'popupRedirTopLinks',
'popupRedirTitle',
'popupRedirData',
'popupRedirOtherLinks',
],
'popupUserData',
'popupData',
'popupMiscTools',
['popupRedlink'],
'popupPrePreviewSep',
'popupPreview',
'popupSecondPreview',
'popupPreviewMore',
'popupPostPreview',
'popupFixDab',
];
};
pg.structures.menus.popupTopLinks = function (x, shorter) {
// FIXME laga yaabaa in waxyaalahan la kaydiyo (cached)
const s = [];
const dropclass = 'popup_drop';
const enddiv = '</div>';
let hist = '<<history|shortcut=h>>';
if (!shorter) {
hist = '<menurow>' + hist + '|<<historyfeed|rss>>|<<editors|shortcut=E>></menurow>';
}
const lastedit = '<<lastEdit|shortcut=/|show last edit>>';
const thank = 'if(diff){<<thank|send thanks>>}';
const jsHistory = '<<lastContrib|last set of edits>><<sinceMe|changes since mine>>';
const linkshere = '<<whatLinksHere|shortcut=l|what links here>>';
const related = '<<relatedChanges|shortcut=r|related changes>>';
const search =
'<menurow><<search|shortcut=s>>if(wikimedia){|<<globalsearch|shortcut=g|global>>}' +
'|<<google|shortcut=G|web>></menurow>';
const watch = '<menurow><<unwatch|unwatchShort>>|<<watch|shortcut=w|watchThingy>></menurow>';
const protect =
'<menurow><<unprotect|unprotectShort>>|' +
'<<protect|shortcut=p>>|<<protectlog|log>></menurow>';
const del =
'<menurow><<undelete|undeleteShort>>|<<delete|shortcut=d>>|<<deletelog|log>></menurow>';
const move = '<<move|shortcut=m|move page>>';
const nullPurge = '<menurow><<nullEdit|shortcut=n|null edit>>|<<purge|shortcut=P>></menurow>';
const viewOptions = '<menurow><<view|shortcut=v>>|<<render|shortcut=S>>|<<raw>></menurow>';
const editRow =
'if(oldid){' +
'<menurow><<edit|shortcut=e>>|<<editOld|shortcut=e|this revision>></menurow>' +
'<menurow><<revert|shortcut=v>>|<<undo>></menurow>' +
'}else{<<edit|shortcut=e>>}';
const markPatrolled = 'if(rcid){<<markpatrolled|mark patrolled>>}';
const newTopic = 'if(talk){<<new|shortcut=+|new topic>>}';
const protectDelete = 'if(admin){' + protect + del + '}';
if (getValueOf('popupActionsMenu')) {
s.push('<<mainlink>>*' + menuTitle(dropclass, 'actions'));
} else {
s.push('<div class="' + dropclass + '"><<mainlink>>');
}
s.push('<menu>');
s.push(editRow + markPatrolled + newTopic + hist + lastedit + thank);
if (!shorter) {
s.push(jsHistory);
}
s.push(move + linkshere + related);
if (!shorter) {
s.push(nullPurge + search);
}
if (!shorter) {
s.push(viewOptions);
}
s.push('<hr />' + watch + protectDelete);
s.push(
'<hr />' +
'if(talk){<<article|shortcut=a|view article>><<editArticle|edit article>>}' +
'else{<<talk|shortcut=t|talk page>><<editTalk|edit talk>>' +
'<<newTalk|shortcut=+|new topic>>}</menu>' +
enddiv
);
// menu-ga isticmaalaha ayaa ka bilaabmaya halkan
const email = '<<email|shortcut=E|email user>>';
const contribs =
'if(wikimedia){<menurow>}<<contribs|shortcut=c|contributions>>if(wikimedia){</menurow>}' +
'if(admin){<menurow><<deletedContribs>></menurow>}';
s.push('if(user){*' + menuTitle(dropclass, 'user'));
s.push('<menu>');
s.push('<menurow><<userPage|shortcut=u|user page>>|<<userSpace|space>></menurow>');
s.push(
'<<userTalk|shortcut=t|user talk>><<editUserTalk|edit user talk>>' +
'<<newUserTalk|shortcut=+|leave comment>>'
);
if (!shorter) {
s.push('if(ipuser){<<arin>>}else{' + email + '}');
} else {
s.push('if(ipuser){}else{' + email + '}');
}
s.push('<hr />' + contribs + '<<userlog|shortcut=L|user log>>');
s.push('if(wikimedia){<<count|shortcut=#|edit counter>>}');
s.push(
'if(admin){<menurow><<unblock|unblockShort>>|<<block|shortcut=b|block user>></menurow>}'
);
s.push('<<blocklog|shortcut=B|block log>>');
s.push('</menu>' + enddiv + '}');
// popups menu wuxuu ka bilaabmayaa halkan
if (getValueOf('popupSetupMenu') && !x.navpop.hasPopupMenu /* FIXME: hack */) {
x.navpop.hasPopupMenu = true;
s.push('*' + menuTitle(dropclass, 'popupsMenu') + '<menu>');
s.push('<<togglePreviews|toggle previews>>');
s.push('<<purgePopups|reset>>');
s.push('<<disablePopups|disable>>');
s.push('</menu>' + enddiv);
}
return navlinkStringToHTML(s.join(''), x.article, x.params);
};
function menuTitle(dropclass, s) {
const text = popupString(s); // i18n
const len = text.length;
return '<div class="' + dropclass + '" style="--navpop-m-len:' + len + 'ch"><a href="#" noPopup=1>' + text + '</a>';
}
pg.structures.menus.popupRedirTitle = pg.structures.menus.popupTitle;
pg.structures.menus.popupRedirTopLinks = pg.structures.menus.popupTopLinks;
copyStructure('menus', 'shortmenus');
pg.structures.shortmenus.popupTopLinks = function (x) {
return pg.structures.menus.popupTopLinks(x, true);
};
pg.structures.shortmenus.popupRedirTopLinks = pg.structures.shortmenus.popupTopLinks;
pg.structures.lite = {};
pg.structures.lite.popupLayout = function () {
return ['popupTitle', 'popupPreview'];
};
pg.structures.lite.popupTitle = function (x) {
log(x.article + ': structures.lite.popupTitle');
//return navlinkStringToHTML('<b><<mainlink>></b>',x.article,x.params);
return '<div><span class="popup_mainlink"><b>' + x.article.toString() + '</b></span></div>';
};
// ENDFILE: structures.js
// STARTFILE: autoedit.js
function substitute(data, cmdBody) {
// alert('sub\nfrom: '+cmdBody.from+'\nto: '+cmdBody.to+'\nflags: '+cmdBody.flags);
const fromRe = RegExp(cmdBody.from, cmdBody.flags);
return data.replace(fromRe, cmdBody.to);
}
function execCmds(data, cmdList) {
for (let i = 0; i < cmdList.length; ++i) {
data = cmdList[i].action(data, cmdList[i]);
}
return data;
}
function parseCmd(str) {
// soo celisa liiska amarada
if (!str.length) {
return [];
}
let p = false;
switch (str.charAt(0)) {
case 's':
p = parseSubstitute(str);
break;
default:
return false;
}
if (p) {
return [p].concat(parseCmd(p.remainder));
}
return false;
}
// FIXME: Waxaa la isticmaalaa hal jeer oo kaliya halkan, waxay ku wareersan tahay unescape-ka dhabta ah (iyo midka si ballaaran loo isticmaalo), waa in la beddelaa
// Dhanka kale, unescape waa semi-soft-deprecated, markaas waa inaan eegnaa sidii loo beddeli lahaa taas sidoo kale
function unEscape(str, sep) {
return str
.split('\\\\')
.join('\\')
.split('\\' + sep)
.join(sep)
.split('\\n')
.join('\n');
}
function parseSubstitute(str) {
// waxay qaadataa xadhig sida s/a/b/flags;othercmds oo ay falanqaysaa
let from, to, flags, tmp;
if (str.length < 4) {
return false;
}
const sep = str.charAt(1);
str = str.substring(2);
tmp = skipOver(str, sep);
if (tmp) {
from = tmp.segment;
str = tmp.remainder;
} else {
return false;
}
tmp = skipOver(str, sep);
if (tmp) {
to = tmp.segment;
str = tmp.remainder;
} else {
return false;
}
flags = '';
if (str.length) {
tmp = skipOver(str, ';') || skipToEnd(str, ';');
if (tmp) {
flags = tmp.segment;
str = tmp.remainder;
}
}
return {
action: substitute,
from: from,
to: to,
flags: flags,
remainder: str,
};
}
function skipOver(str, sep) {
const endSegment = findNext(str, sep);
if (endSegment < 0) {
return false;
}
const segment = unEscape(str.substring(0, endSegment), sep);
return { segment: segment, remainder: str.substring(endSegment + 1) };
}
/*eslint-disable*/
function skipToEnd(str, sep) {
return { segment: str, remainder: '' };
}
/*eslint-enable */
function findNext(str, ch) {
for (let i = 0; i < str.length; ++i) {
if (str.charAt(i) == '\\') {
i += 2;
}
if (str.charAt(i) == ch) {
return i;
}
}
return -1;
}
function setCheckbox(param, box) {
const val = mw.util.getParamValue(param);
if (val) {
switch (val) {
case '1':
case 'yes':
case 'true':
box.checked = true;
break;
case '0':
case 'no':
case 'false':
box.checked = false;
}
}
}
function autoEdit() {
setupPopups(() => {
if (mw.util.getParamValue('autoimpl') !== popupString('autoedit_version')) {
return false;
}
if (
mw.util.getParamValue('autowatchlist') &&
mw.util.getParamValue('actoken') === autoClickToken()
) {
pg.fn.modifyWatchlist(mw.util.getParamValue('title'), mw.util.getParamValue('action'));
}
if (!document.editform) {
return false;
}
if (autoEdit.alreadyRan) {
return false;
}
autoEdit.alreadyRan = true;
const cmdString = mw.util.getParamValue('autoedit');
if (cmdString) {
try {
const editbox = document.editform.wpTextbox1;
const cmdList = parseCmd(cmdString);
const input = editbox.value;
const output = execCmds(input, cmdList);
editbox.value = output;
} catch (dang) {
return;
}
// is waafajinta qoraalka isticmaalaha wikEd
if (typeof wikEdUseWikEd != 'undefined') {
if (wikEdUseWikEd === true) {
WikEdUpdateFrame();
}
}
}
setCheckbox('autominor', document.editform.wpMinoredit);
setCheckbox('autowatch', document.editform.wpWatchthis);
const rvid = mw.util.getParamValue('autorv');
if (rvid) {
const url =
pg.wiki.apiwikibase +
'?action=query&format=json&formatversion=2&prop=revisions&revids=' +
rvid;
startDownload(url, null, autoEdit2);
} else {
autoEdit2();
}
});
}
function autoEdit2(d) {
let summary = mw.util.getParamValue('autosummary');
let summaryprompt = mw.util.getParamValue('autosummaryprompt');
let summarynotice = '';
if (d && d.data && mw.util.getParamValue('autorv')) {
const s = getRvSummary(summary, d.data);
if (s === false) {
summaryprompt = true;
summarynotice = popupString(
'Waa la waayay helitaanka macluumaadka dib-u-eegista, fadlan wax ka beddel gacanta.\n\n'
);
summary = simplePrintf(summary, [
mw.util.getParamValue('autorv'),
'(la garanayn)',
'(la garanayn)',
]);
} else {
summary = s;
}
}
if (summaryprompt) {
const txt =
summarynotice + popupString('Geli kooban wax-ka-beddel oo aan madhnayn ama riix kansal si aad u joojiso');
const response = prompt(txt, summary);
if (response) {
summary = response;
} else {
return;
}
}
if (summary) {
document.editform.wpSummary.value = summary;
}
// Isku day in laga fogaado riixidda degdegga ah ee badhanka kaydinta
// (waxaa laga yaabaa in dib u dhaca ku yimaada DOM uu yahay mid eed leh?? ama calaamad khaldan)
setTimeout(autoEdit3, 100);
}
function autoClickToken() {
return mw.user.sessionId();
}
function autoEdit3() {
if (mw.util.getParamValue('actoken') != autoClickToken()) {
return;
}
const btn = mw.util.getParamValue('autoclick');
if (btn) {
if (document.editform && document.editform[btn]) {
const button = document.editform[btn];
const msg = tprintf(
'Badhanka %s ayaa si toos ah loo riixay. Fadlan sug inta bogga xiga uu soo dejisanayo.',
[button.value]
);
bannerMessage(msg);
document.title = '(' + document.title + ')';
button.click();
} else {
alert(
tprintf('Lama helin badhanka %s. Fadlan hubi dejinta ku jirta faylkaaga javascript.', [
btn,
])
);
}
}
}
function bannerMessage(s) {
const headings = document.getElementsByTagName('h1');
if (headings) {
const div = document.createElement('div');
div.innerHTML = '<font size=+1><b>' + pg.escapeQuotesHTML(s) + '</b></font>';
headings[0].parentNode.insertBefore(div, headings[0]);
}
}
function getRvSummary(template, json) {
try {
const o = getJsObj(json);
const edit = anyChild(o.query.pages).revisions[0];
const timestamp = edit.timestamp
.split(/[A-Z]/g)
.join(' ')
.replace(/^ *| *$/g, '');
return simplePrintf(template, [
edit.revid,
timestamp,
edit.userhidden ? '(qarsoon)' : edit.user,
]);
} catch (badness) {
return false;
}
}
// ENDFILE: autoedit.js
// STARTFILE: downloader.js
/**
* @file
* {@link Downloader}, duubista xmlhttprequest, iyo shaqooyinka caawiya.
*/
/**
* Abuuraya Downloader cusub
*
* @constructor
* @class Fasalka Downloader. Abuur tusaale cusub oo fasalkan ah si aad wax u soo dejiso.
* @param {string} url URL-ka la soo dejisanayo. Tan waa laga boodi karaa laguna dari karaa goor dambe.
*/
function Downloader(url) {
if (typeof XMLHttpRequest != 'undefined') {
this.http = new XMLHttpRequest();
}
/**
* URL-ka la soo dejisanayo
*
* @type {string}
*/
this.url = url;
/**
* Aqoonsi gaar ah oo caalami ah (UID)
*
* @type {number}
*/
this.id = null;
/**
* Taariikhda wax ka beddelka, ee laga soo saarayo madaxyada soo gelaya (incoming headers)
*
* @type {Date}
* @private
*/
this.lastModified = null;
/**
* Waxa la samaynayo marka soo dejisku si guul leh ku dhammaado
*
* @type {Function}
* @private
*/
this.callbackFunction = null;
/**
* Waxa la samaynayo haddii ay fashilanto
*
* @type {Function}
* @private
*/
this.onFailure = null;
/**
* Calanka la dejiyay marka la sameeyo <code>abort</code>
*
* @type {boolean}
*/
this.aborted = false;
/**
* Habka HTTP. Eeg https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html wixii suurtagal ah.
*
* @type {string}
*/
this.method = 'GET';
/**
* Calanka Async.
*
* @type {boolean}
*/
this.async = true;
}
new Downloader();
/** Wuxuu gudbiyaa codsiga http. */
Downloader.prototype.send = function (x) {
if (!this.http) {
return null;
}
return this.http.send(x);
};
/** Joojiya soo dejinta, isagoo dejinaya beerta <code>aborted</code> run (true). */
Downloader.prototype.abort = function () {
if (!this.http) {
return null;
}
this.aborted = true;
return this.http.abort();
};
/** Wuxuu soo celiyaa xogta la soo dejiyay. */
Downloader.prototype.getData = function () {
if (!this.http) {
return null;
}
return this.http.responseText;
};
/** Wuxuu diyaariyaa soo dejinta. */
Downloader.prototype.setTarget = function () {
if (!this.http) {
return null;
}
this.http.open(this.method, this.url, this.async);
this.http.setRequestHeader('Api-User-Agent', pg.api.userAgent);
};
/** Wuxuu helayaa xaaladda soo dejinta. */
Downloader.prototype.getReadyState = function () {
if (!this.http) {
return null;
}
return this.http.readyState;
};
pg.misc.downloadsInProgress = {};
/**
* Bilaabaya soo dejinta.
* Ogow in setTarget {@link Downloader#setTarget} ay tahay in la shaqaysiiyo marka hore
*/
Downloader.prototype.start = function () {
if (!this.http) {
return;
}
pg.misc.downloadsInProgress[this.id] = this;
this.http.send(null);
};
/**
* Wuxuu helayaa taariikhda 'Last-Modified' ee madaxyada soo dejinta.
* Waa in la shaqaysiiyaa marka soo dejisku dhammaado.
* Waxaa uu soo celiyaa <code>null</code> haddii ay fashilanto.
*
* @return {Date}
*/
Downloader.prototype.getLastModifiedDate = function () {
if (!this.http) {
return null;
}
let lastmod = null;
try {
lastmod = this.http.getResponseHeader('Last-Modified');
} catch (err) {}
if (lastmod) {
return new Date(lastmod);
}
return null;
};
/**
* Dejiya shaqada dib-u-wacitaanka (callback function).
*
* @param {Function} f shaqada dib-u-wacitaanka, loogu yeero sida <code>f(this)</code> marka ay guulaysato
*/
Downloader.prototype.setCallback = function (f) {
if (!this.http) {
return;
}
this.http.onreadystatechange = f;
};
Downloader.prototype.getStatus = function () {
if (!this.http) {
return null;
}
return this.http.status;
};
//////////////////////////////////////////////////
// shaqooyinka caawiya
/**
* Abuuraya {@link Downloader} cusub oo u diyaarinaya ficil.
*
* @param {string} url URL-ka la soo dejisanayo
* @param {number} id Aqoonsiga shayga {@link Downloader}
* @param {Function} callback Shaqada dib-u-wacitaanka ee loo yeero marka ay guulaysato
* @return {string|Downloader} shayga {@link Downloader} ee la abuuray, ama 'ohdear' haddii uu yahay browser aan la taageerin
*/
function newDownload(url, id, callback, onfailure) {
const d = new Downloader(url);
if (!d.http) {
return 'ohdear';
}
d.id = id;
d.setTarget();
if (!onfailure) {
onfailure = 2;
}
const f = function () {
if (d.getReadyState() == 4) {
delete pg.misc.downloadsInProgress[this.id];
try {
if (d.getStatus() == 200) {
d.data = d.getData();
d.lastModified = d.getLastModifiedDate();
callback(d);
} else if (typeof onfailure == typeof 1) {
if (onfailure > 0) {
// dib u day
newDownload(url, id, callback, onfailure - 1);
}
} else if (typeof onfailure === 'function') {
onfailure(d, url, id, callback);
}
} catch (somerr) {
/* iska indhatir */
}
}
};
d.setCallback(f);
return d;
}
/**
* Wuxuu ku daydaa soo dejinta xogta la kaydiyay (cached data).
* Xogta la bixiyay waxaa lagu ridaa {@link Downloader} sidii iyadoo la soo dejiyay oo kale.
*
* @param {string} url URL-ka.
* @param {number} id Aqoonsiga (ID).
* @param {Function} callback Dib-u-wacitaanka, oo si degdeg ah loogu yeero sida <code>callback(d)</code>,
* halkaasoo <code>d</code> uu yahay {@link Downloader} cusub.
* @param {string} data Xogta (la kaydiyay).
* @param {Date} lastModified Taariikhda ugu dambaysa ee la beddelay (la kaydiyay).
*/
function fakeDownload(url, id, callback, data, lastModified, owner) {
const d = newDownload(url, callback);
d.owner = owner;
d.id = id;
d.data = data;
d.lastModified = lastModified;
return callback(d);
}
/**
* Bilaabaya soo dejinta.
*
* @param {string} url URL-ka la soo dejisanayo
* @param {number} id Aqoonsiga shayga {@link Downloader}
* @param {Function} callback Shaqada dib-u-wacitaanka ee loo yeero marka ay guulaysato
* @return {string|Downloader} shayga {@link Downloader} ee la abuuray, ama 'ohdear' haddii uu yahay browser aan la taageerin
*/
function startDownload(url, id, callback) {
const d = newDownload(url, id, callback);
if (typeof d == typeof '') {
return d;
}
d.start();
return d;
}
/**
* Joojiya dhammaan soo dejisyada bilaabmay.
*/
function abortAllDownloads() {
for (const x in pg.misc.downloadsInProgress) {
try {
pg.misc.downloadsInProgress[x].aborted = true;
pg.misc.downloadsInProgress[x].abort();
delete pg.misc.downloadsInProgress[x];
} catch (e) {}
}
}
// ENDFILE: downloader.js
// STARTFILE: livepreview.js
// TODO: goobtu mararka qaar sax ma ahan (tusaale ahaan xiriirada qaraabada ah ee horudhacyada)
// NOTE: la saaray md5 iyo sawir iyo falanqaynta xisaabta (math). Way jabnayd, bytes badan.
/**
* InstaView - Beddeliyaha Mediawiki zu HTML ee JavaScript
* Nooca 0.6.1
* Xuquuqda daabacaadda (C) Pedro Fayolle 2005-2006
* https://en.wikipedia.org/wiki/User:Pilaf
* La qaybiyay iyada oo la raacayo shatiga BSD
*
* Isbeddellada:
*
* 0.6.1
* - La hagaajiyay dhibaatada ay keeneen xarfaha \r
* - La hagaajiyay falanqeeyaha qaabaynta khadka dhexdiisa ah (inline formatting parser)
*
* 0.6
* - Magaca u beddelay InstaView
* - Dib-u-habeyn weyn oo koodka ah iyo soo saaridda shaqooyin caadi ah
* - Wax ka qabashada beddelka xiriirada qaraabada ah (tusaale ahaan [[/foo]])
* - La hagaajiyay soo-bandhigidda khaldan ee walxaha liiska qeexitaanka ee ku xiga
* - La hagaajiyay cayayaanka ku jira maaraynta cinlovlada miiska
* - La beddelay qaabka taariikhda ee saxiixyada si ay u muujiso tan Mediawiki
* - La hagaajiyay maaraynta [[:Image:...]]
* - La cusboonaysiiyay shaqada MD5 (rajo inuu la shaqayn doono UTF-8)
* - La hagaajiyay cayayaanka ku jira maaraynta xiriirada ku dhex jira sawirada
*
* Samee:
* - Taageero wanaagsan oo loogu talagalay calaamadaha xisaabta (math tags)
* - Taageero buuxda oo loogu talagalay <nowiki>
* - Maaraynta wikitext-ka inline ee ku saleysan falanqeeyaha (oo ka soo horjeeda kan ku saleysan RegExp) (ka dhig hal-mar oo adag)
* - Taageero loogu talagalay qaababka (templates) (iyada oo la adeegsanayo AJAX)
* - Taageero loogu talagalay xiriirada midabada leh (AJAX)
*/
const Insta = {};
function setupLivePreview() {
// xulashooyinka
Insta.conf = {
baseUrl: '',
user: {},
wiki: {
lang: pg.wiki.lang,
interwiki: pg.wiki.interwiki,
default_thumb_width: 180,
},
paths: {
articles: pg.wiki.articlePath + '/',
// Waxaa loo isticmaalaa kaliya horudhacyada Insta ee leh sawirada. (ma aha popups)
math: '/math/',
images: '//upload.wikimedia.org/wikipedia/en/', // FIXME hel GITHUB/getImageUrlStart
images_fallback: '//upload.wikimedia.org/wikipedia/commons/',
},
locale: {
user: mw.config.get('wgFormattedNamespaces')[pg.nsUserId],
image: mw.config.get('wgFormattedNamespaces')[pg.nsImageId],
category: mw.config.get('wgFormattedNamespaces')[pg.nsCategoryId],
// waa inaan la isticmaalin horudhacyada popup, malaha
months: [
'Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
'Aug',
'Sep',
'Oct',
'Nov',
'Dec',
],
},
};
// xulashooyinka leh qiimayaasha caadiga ah ama tixraacyada dambe
Insta.conf.user.name = Insta.conf.user.name || 'Wikipedian';
Insta.conf.user.signature =
'[[' +
Insta.conf.locale.user +
':' +
Insta.conf.user.name +
'|' +
Insta.conf.user.name +
']]';
//Insta.conf.paths.images = '//upload.wikimedia.org/wikipedia/' + Insta.conf.wiki.lang + '/';
// qeex xiriiryo go'an (constants)
Insta.BLOCK_IMAGE = new RegExp(
'^\\[\\[(?:File|Image|' +
Insta.conf.locale.image +
'):.*?\\|.*?(?:frame|thumbnail|thumb|none|right|left|center)',
'i'
);
}
Insta.dump = function (from, to) {
if (typeof from == 'string') {
from = document.getElementById(from);
}
if (typeof to == 'string') {
to = document.getElementById(to);
}
to.innerHTML = this.convert(from.value);
};
Insta.convert = function (wiki) {
let ll = typeof wiki == 'string' ? wiki.replace(/\r/g, '').split(/\n/) : wiki, // khadadka wikicode
o = '', // wax soo saarka (output)
p = 0, // calanka para
r; // natiijada gudbinta regexp ilaa compareLineStringOrReg()
// gaabinta qaar (shorthands)
function remain() {
return ll.length;
}
function sh() {
return ll.shift();
} // shift
function ps(s) {
o += s;
} // push
// waxay la mid tahay C printf, waxay isticmaashaa ? sida meelaha bannaan, ?? si looga baxsado calaamadaha su'aasha
function f() {
let i = 1,
a = arguments,
f = a[0],
o = '',
c,
p;
for (; i < a.length; i++) {
if ((p = f.indexOf('?')) + 1) {
// oggolow baxsashada xarfaha
i -= c = f.charAt(p + 1) == '?' ? 1 : 0;
o += f.substring(0, p) + (c ? '?' : a[i]);
f = f.substr(p + 1 + c);
} else {
break;
}
}
return o + f;
}
function html_entities(s) {
return s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
}
// Akhrinta qoraalka Wiki ee HTML waa riyo.
// Shaqooyinka hoose si ulajeeddo leh ugama baxsadaan ampersand maadaama tani ay ka dhigi lahayd mid ka sii adag,
// mana u baahnno si buuxda habka aan ugu baahanahay. Tani waxay ka dhigan tahay in wixii ampersands ah ee aan ka baxsadeen ee ku jira wikitext ay sii ahaan doonaan kuwo aan ka baxsadeen waxayna keeni karaan HTML aan shaqaynayn.
// Browsers-ka waa inay dhammaantood awoodaan inay la tacaalaan si kastaba. Waxaan sidoo kale ka baxsaneynaa xarfaha muhiimka ah ee wikimarkup
// si looga hortago in la sii waafajiyo qoraalka la habeeyay.
function htmlescape_text(s) {
return s
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/:/g, ':')
.replace(/\[/g, '[')
.replace(/]/g, ']');
}
function htmlescape_attr(s) {
return htmlescape_text(s).replace(/'/g, ''').replace(/"/g, '"');
}
// soo celi booska xarafka ugu horreeya ee aan is waafaqayn int u dhaxeeya laba xadhig (strings)
function str_imatch(a, b) {
for (var i = 0, l = Math.min(a.length, b.length); i < l; i++) {
if (a.charAt(i) != b.charAt(i)) {
break;
}
}
return i;
}
// barbardhig khadka hadda la joogo xadhig ama regexp
// haddii la gudbiyo xadhig wuxuu barbardhigi doonaa kaliya xarfaha ugu horreeya ee string.length
// haddii la gudbiyo regexp natiijada waxaa lagu kaydiyaa r
function compareLineStringOrReg(c) {
return typeof c == 'string' ?
ll[0] && ll[0].substr(0, c.length) == c :
(r = ll[0] && ll[0].match(c));
}
function compareLineString(c) {
return ll[0] == c;
} // barbardhig khadka hadda la joogo xadhig
function charAtPoint(p) {
return ll[0].charAt(p);
} // soo celi xarafka dhibicda p
function endl(s) {
ps(s);
sh();
}
function parse_list() {
let prev = '';
while (remain() && compareLineStringOrReg(/^([*#:;]+)(.*)$/)) {
const l_match = r;
sh();
const ipos = str_imatch(prev, l_match[1]);
// xidh liisaska aan la sii wadin
for (let prevPos = prev.length - 1; prevPos >= ipos; prevPos--) {
const pi = prev.charAt(prevPos);
if (pi == '*') {
ps('</ul>');
} else if (pi == '#') {
ps('</ol>');
}
// xidh dl kaliya haddii shayga cusub uusan ahayn shay dl (:, ; ama madhan)
else if ($.inArray(l_match[1].charAt(prevPos), ['', '*', '#'])) {
ps('</dl>');
}
}
// fur liisas cusub
for (let matchPos = ipos; matchPos < l_match[1].length; matchPos++) {
const li = l_match[1].charAt(matchPos);
if (li == '*') {
ps('<ul>');
} else if (li == '#') {
ps('<ol>');
}
// fur dl cusub kaliya haddii shayga hore uusan ahayn shay dl (:, ; ama madhan)
else if ($.inArray(prev.charAt(matchPos), ['', '*', '#'])) {
ps('<dl>');
}
}
switch (l_match[1].charAt(l_match[1].length - 1)) {
case '*':
case '#':
ps('<li>' + parse_inline_nowiki(l_match[2]));
break;
case ';':
ps('<dt>');
var dt_match = l_match[2].match(/(.*?)(:.*?)$/);
// maaree qaabka ;dt :dd
if (dt_match) {
ps(parse_inline_nowiki(dt_match[1]));
ll.unshift(dt_match[2]);
} else {
ps(parse_inline_nowiki(l_match[2]));
}
break;
case ':':
ps('<dd>' + parse_inline_nowiki(l_match[2]));
}
prev = l_match[1];
}
// xidh liisaska soo haray
for (let i = prev.length - 1; i >= 0; i--) {
ps(f('</?>', prev.charAt(i) == '*' ? 'ul' : prev.charAt(i) == '#' ? 'ol' : 'dl'));
}
}
function parse_table() {
endl(f('<table>', compareLineStringOrReg(/^\{\|( .*)$/) ? r[1] : ''));
for (; remain(); ) {
if (compareLineStringOrReg('|')) {
switch (charAtPoint(1)) {
case '}':
endl('</table>');
return;
case '-':
endl(f('<tr>', compareLineStringOrReg(/\|-*(.*)/)[1]));
break;
default:
parse_table_data();
}
} else if (compareLineStringOrReg('!')) {
parse_table_data();
} else {
sh();
}
}
}
function parse_table_data() {
let td_line, match_i;
// 1: "|+", '|' ama '+'
// 2: ??
// 3: sifooyinka (attributes) ??
// TODO: dhammee faallaynta regexp-kan
const td_match = sh().match(/^(\|\+|\||!)((?:([^[|]*?)\|(?!\|))?(.*))$/);
if (td_match[1] == '|+') {
ps('<caption');
} else {
ps('<t' + (td_match[1] == '|' ? 'd' : 'h'));
}
if (typeof td_match[3] != 'undefined') {
//ps(' ' + td_match[3])
match_i = 4;
} else {
match_i = 2;
}
ps('>');
if (td_match[1] != '|+') {
// isticmaal || ama !! sida kala-sooca unugga iyadoo ku xiran macnaha guud
// NOTE: marka split() loo gudbiyo regexp hubi in la isticmaalo waayeel aan qabanayn (non-capturing brackets)
td_line = td_match[match_i].split(td_match[1] == '|' ? '||' : /(?:\|\||!!)/);
ps(parse_inline_nowiki(td_line.shift()));
while (td_line.length) {
ll.unshift(td_match[1] + td_line.pop());
}
} else {
ps(parse_inline_nowiki(td_match[match_i]));
}
let tc = 0,
td = [];
while (remain()) {
td.push(sh());
if (compareLineStringOrReg('|')) {
if (!tc) {
break;
}
// waxaan joognaa heerka ugu dibadda (ma jiraan miisas ku dhex jira), u bood falanqaynta td
else if (charAtPoint(1) == '}') {
tc--;
}
} else if (!tc && compareLineStringOrReg('!')) {
break;
} else if (compareLineStringOrReg('{|')) {
tc++;
}
}
if (td.length) {
ps(Insta.convert(td));
}
}
function parse_pre() {
ps('<pre>');
do {
endl(parse_inline_nowiki(ll[0].substring(1)) + '\n');
} while (remain() && compareLineStringOrReg(' '));
ps('</pre>');
}
function parse_block_image() {
ps(parse_image(sh()));
}
function parse_image(str) {
// hel waxa u dhexeeya "[[Image:" iyo "]]"
let tag = str.substring(str.indexOf(':') + 1, str.length - 2);
let width;
let attr = [],
filename,
caption = '';
let thumb = 0,
frame = 0,
center = 0;
let align = '';
if (tag.match(/\|/)) {
// maaree xiriirada ku dhex jira (nested links)
let nesting = 0;
let last_attr;
for (let i = tag.length - 1; i > 0; i--) {
if (tag.charAt(i) == '|' && !nesting) {
last_attr = tag.substr(i + 1);
tag = tag.substring(0, i);
break;
} else {
switch (tag.substr(i - 1, 2)) {
case ']]':
nesting++;
i--;
break;
case '[[':
nesting--;
i--;
}
}
}
attr = tag.split(/\s*\|\s*/);
attr.push(last_attr);
filename = attr.shift();
let w_match;
for (; attr.length; attr.shift()) {
w_match = attr[0].match(/^(\d*)(?:[px]*\d*)?px$/);
if (w_match) {
width = w_match[1];
} else {
switch (attr[0]) {
case 'thumb':
case 'thumbnail':
thumb = true;
frame = true;
break;
case 'frame':
frame = true;
break;
case 'none':
case 'right':
case 'left':
center = false;
align = attr[0];
break;
case 'center':
center = true;
align = 'none';
break;
default:
if (attr.length == 1) {
caption = attr[0];
}
}
}
}
} else {
filename = tag;
}
return '';
}
function parse_inline_nowiki(str) {
let start,
lastend = 0;
let substart = 0,
nestlev = 0,
open,
close,
subloop;
let html = '';
while ((start = str.indexOf('<nowiki>', substart)) != -1) {
html += parse_inline_wiki(str.substring(lastend, start));
start += 8;
substart = start;
subloop = true;
do {
open = str.indexOf('<nowiki>', substart);
close = str.indexOf('</nowiki>', substart);
if (close <= open || open == -1) {
if (close == -1) {
return html + html_entities(str.substr(start));
}
substart = close + 9;
if (nestlev) {
nestlev--;
} else {
lastend = substart;
html += html_entities(str.substring(start, lastend - 9));
subloop = false;
}
} else {
substart = open + 8;
nestlev++;
}
} while (subloop);
}
return html + parse_inline_wiki(str.substr(lastend));
}
function parse_inline_images(str) {
let start,
substart = 0,
nestlev = 0;
let loop, close, open, wiki, html;
while ((start = str.indexOf('[[', substart)) != -1) {
if (
str.substr(start + 2).match(RegExp('^(Image|File|' + Insta.conf.locale.image + '):', 'i'))
) {
loop = true;
substart = start;
do {
substart += 2;
close = str.indexOf(']]', substart);
open = str.indexOf('[[', substart);
if (close <= open || open == -1) {
if (close == -1) {
return str;
}
substart = close;
if (nestlev) {
nestlev--;
} else {
wiki = str.substring(start, close + 2);
html = parse_image(wiki);
str = str.replace(wiki, html);
substart = start + html.length;
loop = false;
}
} else {
substart = open;
nestlev++;
}
} while (loop);
} else {
break;
}
}
return str;
}
// wax soo saarka shaqadani ma ixtiraamayo qaab-dhismeedka FILO ee HTML
// laakiin maadaama browsers-ka badankoodu ay la tacaali karaan waan iska badbaadinayaa dhibaatada
function parse_inline_formatting(str) {
let italic,
bold,
i,
li,
o = '';
while ((i = str.indexOf("''", li)) + 1) {
o += str.substring(li, i);
li = i + 2;
if (str.charAt(i + 2) == "'") {
li++;
bold = !bold;
o += bold ? '<b>' : '</b>';
} else {
italic = !italic;
o += italic ? '<i>' : '</i>';
}
}
return o + str.substr(li);
}
function parse_inline_wiki(str) {
str = parse_inline_images(str);
// xisaab (math)
str = str.replace(/<(?:)math>(.*?)<\/math>/gi, '');
// Dhis xarig taariikh oo Mediawiki ku qaabaysan
let date = new Date();
let minutes = date.getUTCMinutes();
if (minutes < 10) {
minutes = '0' + minutes;
}
date = f(
'?:?, ? ? ? (UTC)',
date.getUTCHours(),
minutes,
date.getUTCDate(),
Insta.conf.locale.months[date.getUTCMonth()],
date.getUTCFullYear()
);
// qaabaynta qoraalka
str =
str
// saxiixyada
.replace(/~{5}(?!~)/g, date)
.replace(/~{4}(?!~)/g, Insta.conf.user.name + ' ' + date)
.replace(/~{3}(?!~)/g, Insta.conf.user.name)
// [[:Category:...]], [[:Image:...]], iwm...
.replace(
RegExp(
'\\[\\[:((?:' +
Insta.conf.locale.category +
'|Image|File|' +
Insta.conf.locale.image +
'|' +
Insta.conf.wiki.interwiki +
'):[^|]*?)\\]\\](\\w*)',
'gi'
),
($0, $1, $2) => f(
"<a href='?'>?</a>",
Insta.conf.paths.articles + htmlescape_attr($1),
htmlescape_text($1) + htmlescape_text($2)
)
)
// ka saar qaybta tooska ah iyo calaamadaha interwiki
.replace(
RegExp(
'\\[\\[(?:' +
Insta.conf.locale.category +
'|' +
Insta.conf.wiki.interwiki +
'):.*?\\]\\]',
'gi'
),
''
)
// [[:Category:...|Links]], [[:Image:...|Links]], iwm...
.replace(
RegExp(
'\\[\\[:((?:' +
Insta.conf.locale.category +
'|Image|File|' +
Insta.conf.locale.image +
'|' +
Insta.conf.wiki.interwiki +
'):.*?)\\|([^\\]]+?)\\]\\](\\w*)',
'gi'
),
($0, $1, $2, $3) => f(
"<a href='?'>?</a>",
Insta.conf.paths.articles + htmlescape_attr($1),
htmlescape_text($2) + htmlescape_text($3)
)
)
// [[/Relative links]]
.replace(/\[\[(\/[^|]*?)\]\]/g, ($0, $1) => f(
"<a href='?'>?</a>",
Insta.conf.baseUrl + htmlescape_attr($1),
htmlescape_text($1)
))
// [[/Replaced|Relative links]]
.replace(/\[\[(\/.*?)\|(.+?)\]\]/g, ($0, $1, $2) => f(
"<a href='?'>?</a>",
Insta.conf.baseUrl + htmlescape_attr($1),
htmlescape_text($2)
))
// [[Common links]]
.replace(/\[\[([^[|]*?)\]\](\w*)/g, ($0, $1, $2) => f(
"<a href='?'>?</a>",
Insta.conf.paths.articles + htmlescape_attr($1),
htmlescape_text($1) + htmlescape_text($2)
))
// [[Replaced|Links]]
.replace(/\[\[([^[]*?)\|([^\]]+?)\]\](\w*)/g, ($0, $1, $2, $3) => f(
"<a href='?'>?</a>",
Insta.conf.paths.articles + htmlescape_attr($1),
htmlescape_text($2) + htmlescape_text($3)
))
// [[Stripped:Namespace|Namespace]]
.replace(/\[\[([^\]]*?:)?(.*?)( *\(.*?\))?\|\]\]/g, ($0, $1, $2, $3) => f(
"<a href='?'>?</a>",
Insta.conf.paths.articles +
htmlescape_attr($1) +
htmlescape_attr($2) +
htmlescape_attr($3),
htmlescape_text($2)
))
// Xiriirada dibadda (External links)
.replace(
/\[(https?|news|ftp|mailto|gopher|irc):(\/*)([^\]]*?) (.*?)\]/g,
($0, $1, $2, $3, $4) => f(
"<a class='external' href='?:?'>?</a>",
htmlescape_attr($1),
htmlescape_attr($2) + htmlescape_attr($3),
htmlescape_text($4)
)
)
.replace(/\[http:\/\/(.*?)\]/g, ($0, $1) => f("<a class='external' href='http://?'>[#]</a>", htmlescape_attr($1)))
.replace(/\[(news|ftp|mailto|gopher|irc):(\/*)(.*?)\]/g, ($0, $1, $2, $3) => f(
"<a class='external' href='?:?'>?:?</a>",
htmlescape_attr($1),
htmlescape_attr($2) + htmlescape_attr($3),
htmlescape_text($1),
htmlescape_text($2) + htmlescape_text($3)
))
.replace(
/(^| )(https?|news|ftp|mailto|gopher|irc):(\/*)([^ $]*[^.,!?;: $])/g,
($0, $1, $2, $3, $4) => f(
"?<a class='external' href='?:?'>?:?</a>",
htmlescape_text($1),
htmlescape_attr($2),
htmlescape_attr($3) + htmlescape_attr($4),
htmlescape_text($2),
htmlescape_text($3) + htmlescape_text($4)
)
)
.replace('__NOTOC__', '')
.replace('__NOINDEX__', '')
.replace('__INDEX__', '')
.replace('__NOEDITSECTION__', '');
return parse_inline_formatting(str);
}
// bilow falanqaynta
for (; remain(); ) {
if (compareLineStringOrReg(/^(={1,6})(.*)\1(.*)$/)) {
p = 0;
endl(f('<h?>?</h?>?', r[1].length, parse_inline_nowiki(r[2]), r[1].length, r[3]));
} else if (compareLineStringOrReg(/^[*#:;]/)) {
p = 0;
parse_list();
} else if (compareLineStringOrReg(' ')) {
p = 0;
parse_pre();
} else if (compareLineStringOrReg('{|')) {
p = 0;
parse_table();
} else if (compareLineStringOrReg(/^----+$/)) {
p = 0;
endl('<hr />');
} else if (compareLineStringOrReg(Insta.BLOCK_IMAGE)) {
p = 0;
parse_block_image();
} else {
// maaree sadarada (paragraphs)
if (compareLineString('')) {
p = remain() > 1 && ll[1] === '';
if (p) {
endl('<p><br>');
}
} else {
if (!p) {
ps('<p>');
p = 1;
}
ps(parse_inline_nowiki(ll[0]) + ' ');
}
sh();
}
}
return o;
};
function wiki2html(txt, baseurl) {
Insta.conf.baseUrl = baseurl;
return Insta.convert(txt);
}
// ENDFILE: livepreview.js
// STARTFILE: pageinfo.js
function popupFilterPageSize(data) {
return formatBytes(data.length);
}
function popupFilterCountLinks(data) {
const num = countLinks(data);
return String(num) + ' ' + (num != 1 ? popupString('wikiLinks') : popupString('wikiLink'));
}
function popupFilterCountImages(data) {
const num = countImages(data);
return String(num) + ' ' + (num != 1 ? popupString('images') : popupString('image'));
}
function popupFilterCountCategories(data) {
const num = countCategories(data);
return (
String(num) + ' ' + (num != 1 ? popupString('categories') : popupString('category'))
);
}
function popupFilterLastModified(data, download) {
const lastmod = download.lastModified;
const now = new Date();
const age = now - lastmod;
if (lastmod && getValueOf('popupLastModified')) {
return tprintf('%s old', [formatAge(age)]).replace(/ /g, ' ');
}
return '';
}
function popupFilterWikibaseItem(data, download) {
return download.wikibaseItem ?
tprintf('<a href="%s">%s</a>', [
download.wikibaseRepo.replace(/\$1/g, download.wikibaseItem),
download.wikibaseItem,
]) :
'';
}
function formatAge(age) {
// gali lambar
let a = 0 + age,
aa = a;
const seclen = 1000;
const minlen = 60 * seclen;
const hourlen = 60 * minlen;
const daylen = 24 * hourlen;
const weeklen = 7 * daylen;
const numweeks = (a - (a % weeklen)) / weeklen;
a = a - numweeks * weeklen;
const sweeks = addunit(numweeks, 'week');
const numdays = (a - (a % daylen)) / daylen;
a = a - numdays * daylen;
const sdays = addunit(numdays, 'day');
const numhours = (a - (a % hourlen)) / hourlen;
a = a - numhours * hourlen;
const shours = addunit(numhours, 'hour');
const nummins = (a - (a % minlen)) / minlen;
a = a - nummins * minlen;
const smins = addunit(nummins, 'minute');
const numsecs = (a - (a % seclen)) / seclen;
a = a - numsecs * seclen;
const ssecs = addunit(numsecs, 'second');
if (aa > 4 * weeklen) {
return sweeks;
}
if (aa > weeklen) {
return sweeks + ' ' + sdays;
}
if (aa > daylen) {
return sdays + ' ' + shours;
}
if (aa > 6 * hourlen) {
return shours;
}
if (aa > hourlen) {
return shours + ' ' + smins;
}
if (aa > 10 * minlen) {
return smins;
}
if (aa > minlen) {
return smins + ' ' + ssecs;
}
return ssecs;
}
function addunit(num, str) {
return String(num) + ' ' + (num != 1 ? popupString(str + 's') : popupString(str));
}
function runPopupFilters(list, data, download) {
const ret = [];
for (let i = 0; i < list.length; ++i) {
if (list[i] && typeof list[i] == 'function') {
const s = list[i](data, download, download.owner.article);
if (s) {
ret.push(s);
}
}
}
return ret;
}
function getPageInfo(data, download) {
if (!data || data.length === 0) {
return popupString('Empty page');
}
const popupFilters = getValueOf('popupFilters') || [];
const extraPopupFilters = getValueOf('extraPopupFilters') || [];
const pageInfoArray = runPopupFilters(popupFilters.concat(extraPopupFilters), data, download);
let pageInfo = pageInfoArray.join(', ');
if (pageInfo !== '') {
pageInfo = upcaseFirst(pageInfo);
}
return pageInfo;
}
// tan waa la horumarin karaa!
function countLinks(wikiText) {
return wikiText.split('[[').length - 1;
}
// haddii N = # kulamada, n = # qawsaska (brackets), markaas
// String.parenSplit(regex) waxay dhex gelisaa N+1 walxaha kala jabay
// oo wata Nn walxo kale. Markaas wadarta dhererku waa
// L= N+1 + Nn = N(n+1)+1. Markaas N=(L-1)/(n+1).
function countImages(wikiText) {
return (wikiText.parenSplit(pg.re.image).length - 1) / (pg.re.imageBracketCount + 1);
}
function countCategories(wikiText) {
return (wikiText.parenSplit(pg.re.category).length - 1) / (pg.re.categoryBracketCount + 1);
}
function popupFilterStubDetect(data, download, article) {
const counts = stubCount(data, article);
if (counts.real) {
return popupString('stub');
}
if (counts.sect) {
return popupString('section stub');
}
return '';
}
function popupFilterDisambigDetect(data, download, article) {
if (!getValueOf('popupAllDabsStubs') && article.namespace()) {
return '';
}
return isDisambig(data, article) ? popupString('disambig') : '';
}
function formatBytes(num) {
return num > 949 ?
Math.round(num / 100) / 10 + popupString('kB') :
num + ' ' + popupString('bytes');
}
// ENDFILE: pageinfo.js
// STARTFILE: titles.js
/**
* @file Waxay qeexaysaa fasalka {@link Title}, iyo shaqooyinka la xiriira.
*
* <code>Title</code> waxay la tacaashaa cinlovlada maqaallada iyo noocyadooda kala duwan.
* {@link Stringwrapper} waa fasalka waalidka ee
* <code>Title</code>, kaas oo u jira si fudud u samaynta waxyaabaha xoogaa ka sii
* nidaamsan.
*/
/**
* Abuuraya Stringwrapper cusub.
*
* @constructor
*
* @class fasalka Stringwrapper. Fasalkan aasaasiga ahi run ahaantii ma aha mid
* faa'iido leh keligiis; waxay kaliya duubtaa hawlo badan oo caadi ah oo xadhkaha ah (string operations).
*/
function Stringwrapper() {
/**
* Duubista this.toString().indexOf()
*
* @param {string} x
* @type {number}
*/
this.indexOf = function (x) {
return this.toString().indexOf(x);
};
/**
* Wuxuu soo celiyaa this.value.
*
* @type {string}
*/
this.toString = function () {
return this.value;
};
/**
* Duubista {@link String#parenSplit} ee lagu dabaqay this.toString()
*
* @param {RegExp} x
* @type {Array}
*/
this.parenSplit = function (x) {
return this.toString().parenSplit(x);
};
/**
* Duubista this.toString().substring()
*
* @param {string} x
* @param {string} y (ikhtiyaari ah)
* @type {string}
*/
this.substring = function (x, y) {
if (typeof y == 'undefined') {
return this.toString().substring(x);
}
return this.toString().substring(x, y);
};
/**
* Duubista this.toString().split()
*
* @param {string} x
* @type {Array}
*/
this.split = function (x) {
return this.toString().split(x);
};
/**
* Duubista this.toString().replace()
*
* @param {string} x
* @param {string} y
* @type {string}
*/
this.replace = function (x, y) {
return this.toString().replace(x, y);
};
}
/**
* Abuuraya <code>Title</code> cusub.
*
* @constructor
*
* @class Fasalka Title. Wuxuu hayaa cinlovlada maqaallada wuxuuna u beddelaa
* noocyo kala duwan. Sidoo kale wuxuu la tacaalaa anchors-ka, oo aan uga jeedno qaybaha
* URL-ka maqaalka ka dambeeya astaanta #, oo matalaya meelaha ku dhex jira maqaal.
*
* @param {string} value Qiimaha bilowga ah ee loo dhiibayo maqaalka.
* Tani waa inay ahaataa cinwaanka saxda ah ee rasmiga ah (eeg {@link Title#value}. Ka bood tan dhisaha oo isticmaal shaqo kale si aad u dejiso cinwaanka haddii aan la helin.
*/
function Title(val) {
/**
* Cinwaanka maqaalka rasmiga ah. Tani waa inay ahaataa UTF-8 iyada oo aan lahayn
* xubno (entities), baxsasho (escaping) ama waxyaabo xunxun. Sidoo kale, hoosta xariiqyada (underscores) waa in lagu beddelaa meelaha bannaanka (spaces).
*
* @type {string}
* @private
*/
this.value = null;
/**
* Nooca rasmiga ah ee anchor-ka. Tani waa inay noqotaa sida saxda ah ee ay ugu muuqato
* URL-ka, taas oo ah qaybaha .C3.0A oo ku dhex jira.
*
* @type {string}
*/
this.anchor = '';
this.setUtf(val);
}
Title.prototype = new Stringwrapper();
/**
* Wuxuu soo celiyaa matalaadda rasmiga ah ee cinwaanka maqaalka, iyada oo ikhtiyaari ah aan lahayn anchor.
*
* @param {boolean} omitAnchor
* @fixme Go'aami tilmaamaha anchor-ka
* @return String Cinwaanka maqaalka iyo anchor-ka.
*/
Title.prototype.toString = function (omitAnchor) {
return this.value + (!omitAnchor && this.anchor ? '#' + this.anchorString() : '');
};
Title.prototype.anchorString = function () {
if (!this.anchor) {
return '';
}
const split = this.anchor.parenSplit(/((?:[.][0-9A-F]{2})+)/);
const len = split.length;
let value;
for (let j = 1; j < len; j += 2) {
// FIXME s/decodeURI/decodeURIComponent/g ?
value = split[j].split('.').join('%');
try {
value = decodeURIComponent(value);
} catch (e) {
// lama qori karo (cannot decode)
}
split[j] = value.split('_').join(' ');
}
return split.join('');
};
Title.prototype.urlAnchor = function () {
const split = this.anchor.parenSplit('/((?:[%][0-9A-F]{2})+)/');
const len = split.length;
for (let j = 1; j < len; j += 2) {
split[j] = split[j].split('%').join('.');
}
return split.join('');
};
Title.prototype.anchorFromUtf = function (str) {
this.anchor = encodeURIComponent(str.split(' ').join('_'))
.split('%3A')
.join(':')
.split("'")
.join('%27')
.split('%')
.join('.');
};
Title.fromURL = function (h) {
return new Title().fromURL(h);
};
Title.prototype.fromURL = function (h) {
if (typeof h != 'string') {
this.value = null;
return this;
}
// NOTE : ku ciyaarista decodeURI, encodeURI, escape, unescape,
// waxaan u muuqannaa kuwo awood u leh inay ku celceliyaan encodes-ka borked ee IE
// IE ma samayso waxyaabaha cusub ee utf-8.
// waana ka sii xun tahay intaas.
// IE waxay u muuqataa inay u la dhaqmeyso xarigga su'aasha (query string) si ka duwan qaybta kale ee url-ka
// su'aasha waxaa loola dhaqmaa sida bona-fide utf8, laakiin qaybta hore ee url-ka waa la wareeriyay
// waxaan hagaajineynaa & dhammaan browsers-ka, si kasta ha ahaatee.
const splitted = h.split('?');
splitted[0] = splitted[0].split('&').join('%26');
h = splitted.join('?');
const contribs = pg.re.contribs.exec(h);
if (contribs) {
if (contribs[1] == 'title=') {
contribs[3] = contribs[3].split('+').join(' ');
}
const u = new Title(contribs[3]);
this.setUtf(
this.decodeNasties(
mw.config.get('wgFormattedNamespaces')[pg.nsUserId] + ':' + u.stripNamespace()
)
);
return this;
}
const email = pg.re.email.exec(h);
if (email) {
this.setUtf(
this.decodeNasties(
mw.config.get('wgFormattedNamespaces')[pg.nsUserId] +
':' +
new Title(email[3]).stripNamespace()
)
);
return this;
}
const backlinks = pg.re.backlinks.exec(h);
if (backlinks) {
this.setUtf(this.decodeNasties(new Title(backlinks[3])));
return this;
}
// Title object been ah oo loogu talagalay Special:Diff link.
const specialdiff = pg.re.specialdiff.exec(h);
if (specialdiff) {
this.setUtf(
this.decodeNasties(
new Title(mw.config.get('wgFormattedNamespaces')[pg.nsSpecialId] + ':Diff')
)
);
return this;
}
// ma jiraan kiisas gaar ah oo la hubiyo --
// rajo in uusan ahayn mid la isku soo duduubay oo la xiriira isticmaalaha ama bog gaar ah oo loola dhaqmay si gaar ah
// waxaa ku jira tixraacyada
const m = pg.re.main.exec(h);
if (m === null) {
this.value = null;
} else {
const fromBotInterface = /[?](.+[&])?title=/.test(h);
if (fromBotInterface) {
m[2] = m[2].split('+').join('_');
}
const extracted = m[2] + (m[3] ? '#' + m[3] : '');
if (pg.flag.isSafari && /%25[0-9A-Fa-f]{2}/.test(extracted)) {
// Hagaaji arinta Safari
// Safari mararka qaar waxay encode-garaysaa % sida %25 ee xargaha UTF-8 ee la encoded-gareeyay sida %E5%A3 -> %25E5%25A3.
this.setUtf(decodeURIComponent(unescape(extracted)));
} else {
this.setUtf(this.decodeNasties(extracted));
}
}
return this;
};
Title.prototype.decodeNasties = function (txt) {
// myDecodeURI waxay isticmaashaa decodeExtras, taas oo meesha ka saarta _,
// sidaas darteedna kharribaysa horudhacyada xigashada (citations previews), oo loo qaabeeyey sida "cite_note-1"
try {
let ret = decodeURI(this.decodeEscapes(txt));
ret = ret.replace(/[_ ]*$/, '');
return ret;
} catch (e) {
return txt; // lama qori karo
}
};
// Decode %-encodings sax ah, haddii kale ka baxso iyaga
Title.prototype.decodeEscapes = function (txt) {
const split = txt.parenSplit(/((?:[%][0-9A-Fa-f]{2})+)/);
const len = split.length;
// Ma jiraan waxyaabo %-encoded ah oo la helay, markaa ku beddel %-ka suugaan ah
if (len === 1) {
return split[0].replace(/%(?![0-9a-fA-F][0-9a-fA-F])/g, '%25');
}
for (let i = 1; i < len; i = i + 2) {
split[i] = decodeURIComponent(split[i]);
}
return split.join('');
};
Title.fromAnchor = function (a) {
return new Title().fromAnchor(a);
};
Title.prototype.fromAnchor = function (a) {
if (!a) {
this.value = null;
return this;
}
return this.fromURL(a.href);
};
Title.fromWikiText = function (txt) {
return new Title().fromWikiText(txt);
};
Title.prototype.fromWikiText = function (txt) {
// FIXME - tijaabo ayaa loo baahan yahay
txt = myDecodeURI(txt);
this.setUtf(txt);
return this;
};
Title.prototype.hintValue = function () {
if (!this.value) {
return '';
}
return safeDecodeURI(this.value);
};
Title.prototype.toUserName = function (withNs) {
if (this.namespaceId() != pg.nsUserId && this.namespaceId() != pg.nsUsertalkId) {
this.value = null;
return;
}
this.value =
(withNs ? mw.config.get('wgFormattedNamespaces')[pg.nsUserId] + ':' : '') +
this.stripNamespace().split('/')[0];
};
Title.prototype.userName = function (withNs) {
const t = new Title(this.value);
t.toUserName(withNs);
if (t.value) {
return t;
}
return null;
};
Title.prototype.toTalkPage = function () {
// u beddel maqaalka bog wadahadal, ama haddii aanaan awoodin, soo celi null
// Si kale haddii loo dhigo: soo celi null haddii tani HORAY u AHAYD bog wadahadal
// oo soo celi bogga wadahadalka ee u dhigma haddii kale
//
// Sida laga soo xigtay https://www.mediawiki.org/wiki/Manual:Namespace#Subject_and_talk_namespaces
// * Dhammaan meelaha magacyada doodda waxay leeyihiin tusmooyin tiro-dheeli tiran (odd-integer)
// * Tusmada magaca doodda ee namespace gaar ah oo leh tusmo n waa n + 1
if (this.value === null) {
return null;
}
const namespaceId = this.namespaceId();
if (namespaceId >= 0 && namespaceId % 2 === 0) {
//non-special iyo subject namespace
const localizedNamespace = mw.config.get('wgFormattedNamespaces')[namespaceId + 1];
if (typeof localizedNamespace !== 'undefined') {
if (localizedNamespace === '') {
this.value = this.stripNamespace();
} else {
this.value = localizedNamespace.split(' ').join('_') + ':' + this.stripNamespace();
}
return this.value;
}
}
this.value = null;
return null;
};
// Soo celi magaca rasmiga ah ee maxalliga ah (canonical, localized namespace)
Title.prototype.namespace = function () {
return mw.config.get('wgFormattedNamespaces')[this.namespaceId()];
};
Title.prototype.namespaceId = function () {
const n = this.value.indexOf(':');
if (n < 0) {
return 0;
} //mainspace
const namespaceId =
mw.config.get('wgNamespaceIds')[
this.value.substring(0, n).split(' ').join('_').toLowerCase()
];
if (typeof namespaceId == 'undefined') {
return 0;
} //mainspace
return namespaceId;
};
Title.prototype.talkPage = function () {
const t = new Title(this.value);
t.toTalkPage();
if (t.value) {
return t;
}
return null;
};
Title.prototype.isTalkPage = function () {
if (this.talkPage() === null) {
return true;
}
return false;
};
Title.prototype.toArticleFromTalkPage = function () {
// inta badan waa nuqul/dhejin ka timid toTalkPage ee kor ku xusan.
if (this.value === null) {
return null;
}
const namespaceId = this.namespaceId();
if (namespaceId >= 0 && namespaceId % 2 == 1) {
//non-special iyo talk namespace
const localizedNamespace = mw.config.get('wgFormattedNamespaces')[namespaceId - 1];
if (typeof localizedNamespace !== 'undefined') {
if (localizedNamespace === '') {
this.value = this.stripNamespace();
} else {
this.value = localizedNamespace.split(' ').join('_') + ':' + this.stripNamespace();
}
return this.value;
}
}
this.value = null;
return null;
};
Title.prototype.articleFromTalkPage = function () {
const t = new Title(this.value);
t.toArticleFromTalkPage();
if (t.value) {
return t;
}
return null;
};
Title.prototype.articleFromTalkOrArticle = function () {
const t = new Title(this.value);
if (t.toArticleFromTalkPage()) {
return t;
}
return this;
};
Title.prototype.isIpUser = function () {
return pg.re.ipUser.test(this.userName());
};
Title.prototype.stripNamespace = function () {
// wuxuu soo celiyaa xadhig (string), ee ma aha Title
const n = this.value.indexOf(':');
if (n < 0) {
return this.value;
}
const namespaceId = this.namespaceId();
if (namespaceId === pg.nsMainspaceId) {
return this.value;
}
return this.value.substring(n + 1);
};
Title.prototype.setUtf = function (value) {
if (!value) {
this.value = '';
return;
}
const anch = value.indexOf('#');
if (anch < 0) {
this.value = value.split('_').join(' ');
this.anchor = '';
return;
}
this.value = value.substring(0, anch).split('_').join(' ');
this.anchor = value.substring(anch + 1);
this.ns = null; // sug ilaa namespace() laga wacayo
};
Title.prototype.setUrl = function (urlfrag) {
const anch = urlfrag.indexOf('#');
this.value = safeDecodeURI(urlfrag.substring(0, anch));
this.anchor = this.value.substring(anch + 1);
};
Title.prototype.append = function (x) {
this.setUtf(this.value + x);
};
Title.prototype.urlString = function (x) {
if (!x) {
x = {};
}
let v = this.toString(true);
if (!x.omitAnchor && this.anchor) {
v += '#' + this.urlAnchor();
}
if (!x.keepSpaces) {
v = v.split(' ').join('_');
}
return encodeURI(v).split('&').join('%26').split('?').join('%3F').split('+').join('%2B');
};
Title.prototype.removeAnchor = function () {
return new Title(this.toString(true));
};
Title.prototype.toUrl = function () {
return pg.wiki.titlebase + this.urlString();
};
function parseParams(url) {
const specialDiff = pg.re.specialdiff.exec(url);
if (specialDiff) {
const split = specialDiff[1].split('/');
if (split.length == 1) {
return { oldid: split[0], diff: 'prev' };
} else if (split.length == 2) {
return { oldid: split[0], diff: split[1] };
}
}
const ret = {};
if (url.indexOf('?') == -1) {
return ret;
}
url = url.split('#')[0];
const s = url.split('?').slice(1).join();
const t = s.split('&');
for (let i = 0; i < t.length; ++i) {
const z = t[i].split('=');
z.push(null);
ret[z[0]] = z[1];
}
// Dib-u-eegista Diff ee aan lahayn oldid waxaa loo turjumaa diff ku socda dib-u-eegistii ka horeysay ee MediaWiki
if (ret.diff && typeof ret.oldid === 'undefined') {
ret.oldid = 'prev';
}
// Dukumeentigu wuxuu u muuqdaa inuu dhahayo wax ka duwan, laakiin oldid waxay sidoo kale aqbali kartaa prev/next, iyo
// Echo ayaa soo saaraysa URL-yadaas fudud. Hagaajin fudud inta lagu guda jiro falanqaynta cabbirka (parameter decoding):
if (ret.oldid && (ret.oldid === 'prev' || ret.oldid === 'next' || ret.oldid === 'cur')) {
const helper = ret.diff;
ret.diff = ret.oldid;
ret.oldid = helper;
}
return ret;
}
// (a) myDecodeURI (marka hore decodeURI caadiga ah, ka dibna pg.re.urlNoPopup)
// (b) ku beddel meelaha bannaanka xarfo hoose (underscores)
// (c) encodeURI (midka tooska ah, ma jiraan pg.re.urlNoPopup)
function myDecodeURI(str) {
let ret;
// FIXME decodeURIComponent??
try {
ret = decodeURI(str.toString());
} catch (summat) {
return str;
}
for (let i = 0; i < pg.misc.decodeExtras.length; ++i) {
const from = pg.misc.decodeExtras[i].from;
const to = pg.misc.decodeExtras[i].to;
ret = ret.split(from).join(to);
}
return ret;
}
function safeDecodeURI(str) {
const ret = myDecodeURI(str);
return ret || str;
}
///////////
// TIJAABOVELO (TESTS) //
///////////
function isDisambig(data, article) {
if (!getValueOf('popupAllDabsStubs') && article.namespace()) {
return false;
}
return !article.isTalkPage() && pg.re.disambig.test(data);
}
function stubCount(data, article) {
if (!getValueOf('popupAllDabsStubs') && article.namespace()) {
return false;
}
let sectStub = 0;
let realStub = 0;
if (pg.re.stub.test(data)) {
const s = data.parenSplit(pg.re.stub);
for (let i = 1; i < s.length; i = i + 2) {
if (s[i]) {
++sectStub;
} else {
++realStub;
}
}
}
return { real: realStub, sect: sectStub };
}
function isValidImageName(str) {
// ballaari sida loo baahdo...
return str.indexOf('{') == -1;
}
function isInStrippableNamespace(article) {
// Miyo namespace-ku oggolyahay subpages
// Xusuusin, way fiicnaan lahayd haddii aan helno marin u helida wgNamespacesWithSubpages
return article.namespaceId() !== 0;
}
function isInMainNamespace(article) {
return article.namespaceId() === 0;
}
function anchorContainsImage(a) {
// ku soo celi carruurta anchor a
// arag haddii mid ka mid ah uu yahay sawir
if (a === null) {
return false;
}
const kids = a.childNodes;
for (let i = 0; i < kids.length; ++i) {
if (kids[i].nodeName == 'IMG') {
return true;
}
}
return false;
}
function isPopupLink(a) {
// NB sababo waxqabad awgeed (performance reasons), xiriirada TOC guud ahaan waxay soo celiyaan run (true)
// waa in la tirtiraa goor dambe
if (!markNopopupSpanLinks.done) {
markNopopupSpanLinks();
}
if (a.inNopopupSpan) {
return false;
}
// FIXME mi tani waa mid dhakhso badan oo inline ah?
if (a.onmousedown || a.getAttribute('nopopup')) {
return false;
}
const h = a.href;
if (h === document.location.href + '#') {
return false;
}
if (!pg.re.basenames.test(h)) {
return false;
}
if (!pg.re.urlNoPopup.test(h)) {
return true;
}
return (
(pg.re.email.test(h) ||
pg.re.contribs.test(h) ||
pg.re.backlinks.test(h) ||
pg.re.specialdiff.test(h)) &&
h.indexOf('&limit=') == -1
);
}
function markNopopupSpanLinks() {
if (!getValueOf('popupOnlyArticleLinks')) {
fixVectorMenuPopups();
}
const s = $('.nopopups').toArray();
for (let i = 0; i < s.length; ++i) {
const as = s[i].getElementsByTagName('a');
for (let j = 0; j < as.length; ++j) {
as[j].inNopopupSpan = true;
}
}
markNopopupSpanLinks.done = true;
}
function fixVectorMenuPopups() {
$('nav.vector-menu h3:first a:first').prop('inNopopupSpan', true);
}
// ENDFILE: titles.js
// STARTFILE: getpage.js
//////////////////////////////////////////////////
// Soo dejinta Wiki gaarka ah
//
// Qorshaha wicitaanka getPage
//
// getPageWithCaching
// |
// been (false) | run (true)
// getPage<-[findPictureInCache]->-onComplete(soo dejin been abuur ah - fake download)
// \.
// (async)->addPageToCache(download)->-onComplete(download)
// hubi kaydka si aad u aragto in boggu jiro
function getPageWithCaching(url, onComplete, owner) {
log('getPageWithCaching, url=' + url);
const i = findInPageCache(url);
let d;
if (i > -1) {
d = fakeDownload(
url,
owner.idNumber,
onComplete,
pg.cache.pages[i].data,
pg.cache.pages[i].lastModified,
owner
);
} else {
d = getPage(url, onComplete, owner);
if (d && owner && owner.addDownload) {
owner.addDownload(d);
d.owner = owner;
}
}
}
function getPage(url, onComplete, owner) {
log('getPage');
const callback = function (d) {
if (!d.aborted) {
addPageToCache(d);
onComplete(d);
}
};
return startDownload(url, owner.idNumber, callback);
}
function findInPageCache(url) {
for (let i = 0; i < pg.cache.pages.length; ++i) {
if (url == pg.cache.pages[i].url) {
return i;
}
}
return -1;
}
function addPageToCache(download) {
log('addPageToCache ' + download.url);
const page = {
url: download.url,
data: download.data,
lastModified: download.lastModified,
};
return pg.cache.pages.push(page);
}
// ENDFILE: getpage.js
// STARTFILE: parensplit.js
//////////////////////////////////////////////////
// parenSplit
// String.prototype.parenSplit waa inay samaysaa waxa uu ECMAscript dhahayo String.prototype.split wuu sameeyaa,
// isagoo dhex gelinaya ciyaarta qawsaska (regex capturing groups) int u dhaxeeya walxaha kala jabay.
// tusaale ahaan 'abc'.split(/(b)/)) waa inay soo celisaa ['a','b','c'], ee ma aha ['a','c']
if (String('abc'.split(/(b)/)) != 'a,b,c') {
// String.split oo jabsaday, tusaale ahaan konq, IE < 10
String.prototype.parenSplit = function (re) {
re = nonGlobalRegex(re);
let s = this;
let m = re.exec(s);
let ret = [];
while (m && s) {
// iyada oo aan la helin loop-ka xiga, waxaan leenahay
// 'ab'.parenSplit(/a|(b)/) != 'ab'.split(/a|(b)/)
for (let i = 0; i < m.length; ++i) {
if (typeof m[i] == 'undefined') {
m[i] = '';
}
}
ret.push(s.substring(0, m.index));
ret = ret.concat(m.slice(1));
s = s.substring(m.index + m[0].length);
m = re.exec(s);
}
ret.push(s);
return ret;
};
} else {
String.prototype.parenSplit = function (re) {
return this.split(re);
};
String.prototype.parenSplit.isNative = true;
}
function nonGlobalRegex(re) {
const s = re.toString();
let flags = '';
for (var j = s.length; s.charAt(j) != '/'; --j) {
if (s.charAt(j) != 'g') {
flags += s.charAt(j);
}
}
const t = s.substring(1, j);
return RegExp(t, flags);
}
// ENDFILE: parensplit.js
// STARTFILE: tools.js
// Waali IE oo ku saabsan encoding
// ========================
//
// aan qaadanno guud ahaan in boggu ku jiro utf8, sida wikipedia
//
// haddii a uu yahay shay DOM oo ah anchor iyo a.href waa inay ka koobnaato
//
// http://host.name.here/wiki/foo?bar=baz
//
// markaas IE waxay siisaa foo sida "latin1-encoded" utf8; waxaan haynaa foo = decode_utf8(decodeURI(foo_ie))
// laakiin IE waxay siisaa bar=baz si sax ah sida utf8 caadi ah
//
// ---------------------------------
//
// xmlhttp ee IE ma fahmo url-yada utf8. Waa in la isticmaalo encodeURI halkan.
//
// ---------------------------------
//
// wax kale
// Isha: http://aktuell.de.selfhtml.org/artikel/javascript/utf8b64/utf8.htm
function getJsObj(json) {
try {
const json_ret = JSON.parse(json);
if (json_ret.warnings) {
for (let w = 0; w < json_ret.warnings.length; w++) {
if (json_ret.warnings[w]['*']) {
log(json_ret.warnings[w]['*']);
} else {
log(json_ret.warnings[w].warnings);
}
}
} else if (json_ret.error) {
errlog(json_ret.error.code + ': ' + json_ret.error.info);
}
return json_ret;
} catch (someError) {
errlog('Wax ayaa khaldamay getJsObj, json=' + json);
return 1;
}
}
function anyChild(obj) {
for (const p in obj) {
return obj[p];
}
return null;
}
function upcaseFirst(str) {
if (typeof str != typeof '' || str === '') {
return '';
}
return str.charAt(0).toUpperCase() + str.substring(1);
}
function findInArray(arr, foo) {
if (!arr || !arr.length) {
return -1;
}
const len = arr.length;
for (let i = 0; i < len; ++i) {
if (arr[i] == foo) {
return i;
}
}
return -1;
}
/* eslint-disable no-unused-vars */
function nextOne(array, value) {
// NB haddii liisku leeyahay laba qoraal oo xiriir ah oo isku mid ah
// markaas tani waxay ku wareegi doontaa wicitaano is xiga
const i = findInArray(array, value);
if (i < 0) {
return null;
}
return array[i + 1];
}
/* eslint-enable no-unused-vars */
function literalizeRegex(str) {
return mw.util.escapeRegExp(str);
}
String.prototype.entify = function () {
//var shy='­';
return this.split('&')
.join('&')
.split('<')
.join('<')
.split('>')
.join('>' /*+shy*/)
.split('"')
.join('"');
};
// Shaqada shaandhaynta safafka (Array filter function)
function removeNulls(val) {
return val !== null;
}
function joinPath(list) {
return list.filter(removeNulls).join('/');
}
function simplePrintf(str, subs) {
if (!str || !subs) {
return str;
}
const ret = [];
const s = str.parenSplit(/(%s|\$[0-9]+)/);
let i = 0;
do {
ret.push(s.shift());
if (!s.length) {
break;
}
const cmd = s.shift();
if (cmd == '%s') {
if (i < subs.length) {
ret.push(subs[i]);
} else {
ret.push(cmd);
}
++i;
} else {
const j = parseInt(cmd.replace('$', ''), 10) - 1;
if (j > -1 && j < subs.length) {
ret.push(subs[j]);
} else {
ret.push(cmd);
}
}
} while (s.length > 0);
return ret.join('');
}
/* eslint-disable no-unused-vars */
function isString(x) {
return typeof x === 'string' || x instanceof String;
}
function isNumber(x) {
return typeof x === '
2vtce2l5rih3agpkngebjw78b62y3lw
MediaWiki:Gadget-Navigation popups
8
53711
310905
2026-10-25T12:38:29Z
Isma4l
41797
/* */
310905
wikitext
text/x-wiki
[[:en:Wikipedia:Tools/Navigation popups|Navigation popups]]: horudhacyada maqaallada iyo shaqooyinka wax ka beddelka ayaa soo baxaya marka la dul maro xiriiriyeyaasha
rqqxa3ad1f1vqsryc1vki8pq74a5cyc
MediaWiki:Gadget-navpop.css
8
53712
310906
2026-10-25T12:39:06Z
Isma4l
41797
Abuuray
310906
css
text/css
.popupMoreLink {
display: block;
text-align: right;
cursor: pointer;
}
ins.popupDiff {
background: #afe;
}
del.popupDiff {
background: #ffe6e6;
}
/* Dark mode fixes */
html.skin-theme-clientpref-night ins.popupDiff {
background: #026c5f;
}
html.skin-theme-clientpref-night del.popupDiff {
background: #89474b;
}
@media (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os ins.popupDiff {
background: #026c5f;
}
html.skin-theme-clientpref-os del.popupDiff {
background: #89474b;
}
}
#selectionPreview {
border: 2px solid var(--border-color-subtle, #c8ccd1);
background-color: var(--background-color-progressive-subtle, #eaf3ff);
padding: 6px;
}
.navpopup {
border: 1px solid var(--border-color-base, #a2a9b1);
background-color: var(--background-color-base, #fff);
color: var(--color-base, #202122);
padding: 10px;
padding-bottom: 5px;
font-size: 11px;
box-shadow: 0 3px 8px rgba( 50, 50, 50, 0.35 );
word-wrap: break-word;
}
.navpopup hr {
color: #aaa !important;
background-color: #aaa !important;
}
/* Configure Drag bar color */
.popupDrag {
background-color: #ffbe20;
height: 5px;
margin-top: -5px;
margin-bottom: 5px;
}
.popupDragHandle {
cursor: move;
position: relative;
}
/* menu magic - many thanks to [[User:Zocky]]! */
/* popups */
.popup_menu {
display: none;
position: absolute;
left: 0;
margin: 0;
margin-top: 1.4em;
line-height: 1.25em;
top: 0;
z-index: 2;
width: 10em;
background: var(--background-color-base, #fff);
border: 1px solid grey;
padding: 0 !important;
margin-left: -6px;
border-width: 1px 1px 1px 6px;
}
.popup_menu li { /* both: popup_menu_row and popup_menu_item */
list-style: none;
margin:0;
padding:0;
}
.popup_menu a {
display: block;
padding: 3px;
}
.popup_menu_row a {
display: inline-block;
}
.popup_menu_row {
color: #aaa;
}
.popup_drop {
display: inline;
position: relative;
}
.popup_drop a,
.popup_drop a:visited {
padding: 3px;
margin: 0;
font-weight: bold;
}
.popup_drop:hover .popup_menu,
.popup_drop .popup_menu:hover {
display: inline;
padding: 2px;
}
.popup_drop:hover {
background: #ccf;
color: #44f;
}
/* other colours, styles and so on */
.popup_menu a:hover {
background: grey;
color: #fff;
text-decoration: none;
}
.popup_mainlink {
font-size: 140%;
font-weight: bold;
}
.popup_mainlink a {
color: var(--color-emphasized, #000);
}
a.popup_change_title_link {
color: #152;
}
/* Dark mode fixes */
html.skin-theme-clientpref-night a.popup_change_title_link {
color: #25b84a;
}
@media (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os a.popup_change_title_link {
color: #25b84a;
}
}
.popup_diff_dates {
font-style: italic;
background: none;
}
.popup_menu_item a {
display: block;
}
.popup_history_row_even {
background: var(--background-color-neutral, #eaecf0);
}
.popup_history_date {
font-weight: bold;
font-size: 120%;
}
/*
Important for history preview when summaries are all empty;
e.g. https://en.wikipedia.org/w/index.php?title=User:GWicke/sw.js
The path is:
.popupPreview > table > tbody > tr:is(.popup_history_row_odd, .popup_history_row_even)
*/
.popupPreview > table,
.popupPreview > table > tbody {
display: block;
}
.popup_history_row_odd,
.popup_history_row_even {
display: flex;
}
.popup_history_row_even td:nth-child(3),
.popup_history_row_odd td:nth-child(3) {
flex: 3;
word-break: break-word;
}
.popup_history_row_even td:nth-child(4),
.popup_history_row_odd td:nth-child(4) {
flex: 7;
word-break: break-word;
}
.popup_history_row_even > td:not(:last-child),
.popup_history_row_odd > td:not(:last-child) {
margin-right: 2px;
}
/* disable interwiki styling */
.popupPreview a.extiw,
.popupPreview a.extiw:active {
color: #36b;
background: none;
padding: 0;
}
.popupPreview .external {
color: #36b;
}
/* this can be used in the content area to switch off
special external link styling */
.popupPreview .plainlinks a {
background: none !important;
padding: 0 !important;
}
/*
Mouse safe zones for popup menu.
*/
/* eye guide suggestion */
.popup_menu:hover {
box-shadow: 0 0 5px 5px rgba(179, 179, 255, 0.3);
}
/* Dark mode fixes */
html.skin-theme-clientpref-night .popup_menu:hover {
box-shadow: 0 0 5px 5px rgba(0, 0, 90, 0.3);
}
@media (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .popup_menu:hover {
box-shadow: 0 0 5px 5px rgba(0, 0, 90, 0.3);
}
}
/* trapezoid guide for the cursor */
.popup_menu::before {
content: '';
display: block;
position: absolute;
height: 1.5em;
top: -1.4em;
left: -1.2em;
width: calc(2 * var(--navpop-m-len, 6ch));
transform: perspective(1px) rotateX(1deg);
}
/* make the trapezoid go behing menu items */
.popup_menu::before {
z-index: 1;
}
.popup_menu li {
position: relative;
z-index: 2;
}
/* additional hover margin on the sides */
.popup_menu li::before {
content: '';
display: block;
position: absolute;
top: 0;
height: calc(100% + .5em);
left: -1.7em;
width: 1.7em;
}
.popup_menu li::after {
content: '';
display: block;
position: absolute;
top: 0;
height: calc(100% + .5em);
left: calc(10em - 1px); /* depends on the width of the menu */
width: 1em;
}
tj6m2rtk3wrwc2mvhq84u0lokg7ljj7
MediaWiki:Gadget-exlinks.js
8
53713
310907
2026-10-25T12:40:32Z
Isma4l
41797
Abuuray
310907
javascript
text/javascript
// **********************************************************************
// ** === DIIBAAD: FAYLKA QALABKA CAALAMIGA AH === **
// ** Isbeddellada lagu sameeyo boggan waxay saameeyaan isticmaaleyaal badan. **
// ** Fadlan kala hadal bogga wada-hadalka ka hor inta aadan tafatirin **
// ** **
// **********************************************************************
/**
* @source mediawiki.org/wiki/Snippets/Open_external_links_in_new_window
* @version 5
*/
mw.hook('wikipage.content').add(function($content) {
// Xulashada labaad waa xiriiriyeyaasha dibadda ee ku jira soo-saarka Parsoid HTML+RDFa (bug 65243).
$content.find('a.external, a[rel="mw:ExtLink"]').each(function () {
// Lama isticmaali karo wgServer sababtoo ah waxay noqon kartaa borotokool qaraabo ah
// Isticmaal hantida this.href halkii aad ka isticmaali lahayd this.getAttribute('href') sababtoo ah hantida
// waxaa loo beddelaaa URL buuxa (oo ay ku jirto borotokoolka)
if (this.href.indexOf(location.protocol + '//' + location.hostname) !== 0) {
this.target = '_blank';
if ( this.rel.indexOf( 'noopener' ) < 0 ) {
this.rel += ' noopener'; // bannaanada hore waa muhiim, sifooyinka rel waxay leeyihiin calaamado bannaan kala soocan
}
if ( this.rel.indexOf( 'noreferrer' ) < 0 ) {
this.rel += ' noreferrer'; // bannaanada hore waa muhiim, sifooyinka rel waxay leeyihiin calaamado bannaan kala soocan
}
}
});
});
jxjtx9bzlu6638uue62liyp3dcfo9s6
MediaWiki:Gadget-exlinks
8
53714
310908
2026-10-25T12:41:11Z
Isma4l
41797
/* */
310908
wikitext
text/x-wiki
Ku fur xiriiriyeyaasha dibadda tab ama daaqad cusub
rojys80m7s61586v7ag1lptyuk55muh
MediaWiki:Gadget-search-new-tab.js
8
53715
310909
2026-10-25T12:41:54Z
Isma4l
41797
Abuuray
310909
javascript
text/javascript
/* JSHint-valid */
/* globals $:false */
$(function() {
// Raadinta Gaarka ah (Special:Search) ee dhammaan maqaarka (skins).
$('#powersearch, #search').on('keydown', function(e) {
$(this).prop('target', e.ctrlKey || e.metaKey ? '_blank' : '');
});
// CodexTypeaheadSearch raadinta madaxa [kaliya Vector (2022)].
$('#p-search').on('keydown', '.cdx-typeahead-search #searchform', function(e) {
if ((e.ctrlKey || e.metaKey) && (e.keyCode == 13 || e.keyCode == 10)) {
var URI = $(this).find('.cdx-menu-item--selected a.cdx-menu-item__content').prop('href');
if (URI != undefined) {
window.open(URI, '_blank');
return false;
}
}
});
// Raadinta Madaxa/Dhicista ee maqaarka kale [ma jiro hagitaan soo-jeedin oo otomaatig ah MinervaNeue].
// Sanduuqa raadinta [soojeedinta otomaatiga ah ee Vector legacy (2010), MonoBook, Timeless].
$('div:not(.cdx-typeahead-search) #searchform #searchInput, .searchbox .mw-searchInput').on('keydown', function(e) {
if ((e.ctrlKey || e.metaKey) && (e.keyCode == 13 || e.keyCode == 10)) {
if ($(this).data('suggestionsContext') != undefined) {
var selectedIndex = $(this).data('suggestionsContext').config.suggestions.indexOf($(this).val());
if (selectedIndex != -1) {
var URI = $('.suggestions-results a:nth-child(' + (selectedIndex + 1) + ')').prop('href');
if (URI != undefined) {
window.open(URI, '_blank');
$(this).trigger('blur');
}
}
}
}
});
});
qaxu3k31g9coa7esl54eofe8r5mis2l
MediaWiki:Gadget-search-new-tab
8
53716
310910
2026-10-25T12:42:42Z
Isma4l
41797
/* */
310910
wikitext
text/x-wiki
Ku fur natiijooyinka raadinta tab ama daaqad cusub marka aad hayso furaha Ctrl ([[MediaWiki talk:Gadget-search-new-tab.js|ka wada hadal]])
443340llbzawkznfrai9bu63h4awpbg
MediaWiki:Gadget-PrintOptions.js
8
53717
310911
2026-10-25T12:43:49Z
Isma4l
41797
Abuuray
310911
javascript
text/javascript
/**
* Xulashada Daabacaadda waa qalab uu qoray Derk-Jan Hartman / User:TheDJ
* Wixii macluumaad dheeraad ah eeg [[User:TheDJ/Print_options]]
*
* Shatiga waxaa leh MIT iyo/ama CC-by-SA 4.0
*
* Copyright (c) 2010-2017 Derk-Jan Hartman / User:TheDJ
*
* Ruqsad waxaa halkan loogu siinayaa, lacag la'aan, qof kasta oo hela nuqul
* softweerkan iyo dukumeentiyada la socda ("Softweerka"), inuu si xor ah ugu dhex macaamilo
* softweerka, oo ay ku jiraan xaddid la'aan xuquuqda
* isticmaalka, wax ka beddelka, daabacaadda, qaybinta, Shensan-shatiga, iyo/ama iibinta
* nuqullada softweerka, iyo in loo ogolaado dadka loo dhiibo softweerka
* inay sidaas sameeyaan, iyadoo la raacayo shuruudaha soo socda:
*
* Ogeysiiska xuquuqda daabacaadda ee kore iyo ogeysiiskan ruqsadaha waa in lagu daro dhammaan
* nuqullada ama qaybaha muhiimka ah ee Softweerka.
*
* SOFTWEERKA WAA LA BIXIYAA "SIDIISA OO KALE", OO AAN LA HAYN DABAAF FURAAN AH OO NOOC WALBA AH, OO AH
* KUWO MUUQAAL AH AMA LA AAMINSAN YAARSAN, OO AY KU JIRAAN LA TAABTAA XADDI LA'AAN EE DHAMMAAN DALABKA
* U GAAR AH GANACSIGA, KU HAGAAGIDDA UJEEDDO GAAR AH IYO AAN KU XADGUUBIN XUQUUQDA. XITAA DHACDO WAXAY
* QORAAYAASHA AMA MULKIILAYAASHA XUQUUQDA QAADAN DOONAAN MAS'UULIYAD WIXII DHAQAALE AH EE SOO GAara AMA
* KHAAS AH OO KASTA OO KA DHALASHADA HESHISKA, FAL XIDDIGEED AMA SI KALE, EE KASOO BAXA,
* KASOO JEEDA AMA LA XIRIIRA SOFTWEERKA AMA ISTICMAALKA IYO DHAMMAAN MACAAMILADA KALE EE SOFTWEERKA KU SAABSAN.
*/
( function () {
'use strict';
var windowManager;
var printDialog;
var printOptions = {
install: function () {
var $printLink = $( '#t-print a' );
if ( $printLink.length === 0 ) {
return;
}
$printLink
.text( 'Daabac bogga' )
.off( 'click' )
.get( 0 ).addEventListener( 'click', function ( e ) {
mw.loader.using( [ 'oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows' ] ).done( printOptions.createWindow );
e.stopPropagation();
e.preventDefault();
}, true ); // Isticmaal wajiga qabashada si aad uga adkaato maareeyaha gujinta kale
// Horudhac dambe
mw.loader.load( [ 'oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows' ] );
},
createWindow: function () {
function PrintDialog( config ) {
PrintDialog.super.call( this, config );
}
OO.inheritClass( PrintDialog, OO.ui.ProcessDialog );
PrintDialog.static.name = 'printdialog';
PrintDialog.static.title = 'Daabac boggan';
PrintDialog.static.actions = [
{ action: 'print', label: 'Daabac', flags: 'primary' },
{ label: 'Jooji', flags: 'safe' }
];
PrintDialog.prototype.initialize = function () {
var checkbox, fieldset = [];
PrintDialog.super.prototype.initialize.apply( this, arguments );
this.panel = new OO.ui.PanelLayout( { padded: true, expanded: false } );
this.content = new OO.ui.FieldsetLayout();
for ( var i = 0; i < printOptions.questions.length; i++ ) {
if ( printOptions.questions[ i ].type === 'checkbox' ) {
checkbox = new OO.ui.CheckboxInputWidget( {
selected: printOptions.questions[ i ].checked
} );
printOptions.questions[ i ].widget = checkbox;
fieldset.push( new OO.ui.FieldLayout( checkbox, { label: printOptions.questions[ i ].label, align: 'inline' } ) );
}
}
this.content.addItems( fieldset );
this.panel.$element.append( this.content.$element );
this.$body.append( this.panel.$element );
};
PrintDialog.prototype.getActionProcess = function ( action ) {
var dialog = this;
if ( action === 'print' ) {
return new OO.ui.Process( function () {
// Hel qiimayaasha sanduuqyada calaamadaynta
var question;
for ( var i = 0; i < printOptions.questions.length; i++ ) {
question = printOptions.questions[ i ];
if ( question.type === 'checkbox' && question.widget ) {
printOptions[ question.returnvalue ] = question.widget.isSelected();
}
}
dialog.close( { action: action } ).done( function () {
printOptions.changePrintCSS();
printOptions.otherEnhancements();
window.print();
window.location = window.location;
} );
} );
}
return PrintDialog.super.prototype.getActionProcess.call( this, action );
};
if ( !windowManager ) {
windowManager = new OO.ui.WindowManager();
$( 'body' ).append( windowManager.$element );
}
if ( !printDialog ) {
printDialog = new PrintDialog( {
size: 'medium'
} );
windowManager.addWindows( [ printDialog ] );
}
windowManager.openWindow( printDialog );
},
changePrintCSS: function () {
/* Halkaan waxaan ku:
- joojinaa xaashiyaha qaab-dhismeedka ee gaarka u ah daabacaadda
- ka dhagnaa xaashiyaha qaab-dhismeedka shaashadda inay sidoo kale u shaqeeyaan daabacaadda
- ka saaraynaa xeerarka qaab-dhismeedka ee daabacaadda gaarka u ah
- ka dhagnaa xeerarka qaab-dhismeedka shaashadda inay sidoo kale u shaqeeyaan daabacaadda
*/
var printStyle = '';
if ( this.enhanced === false ) {
var i, j, k,
rule,
hasPrint,
hasScreen,
rules,
stylesheet,
stylesheets = document.styleSheets;
for ( i = 0; i < stylesheets.length; i++ ) {
stylesheet = stylesheets[ i ];
if ( !stylesheet.media ) {
continue;
}
if ( stylesheet.media.mediaText && stylesheet.media.mediaText.indexOf( 'print' ) !== -1 ) {
if ( stylesheet.media.mediaText.indexOf( 'screen' ) === -1 ) {
stylesheet.disabled = true;
}
} else if ( stylesheet.media.mediaText && stylesheet.media.mediaText.indexOf( 'screen' ) !== -1 ) {
if ( stylesheet.media.mediaText.indexOf( 'print' ) === -1 ) {
try {
stylesheet.media.appendMedium( 'print' );
} catch ( e ) {
stylesheet.media.mediaText += ',print';
}
}
}
/* Hadda tijaabi xeerarka xaashida qaab-dhismeedka shaqsiga ah */
try {
rules = stylesheet.cssRules || stylesheet.rules;
} catch ( e ) {
/* Arrimaha isdhaafka domain-ka. */
mw.log.warn( 'Suurtagal ma aha in la saxo xaashida qaab-dhismeedka sababtoo ah xannibaadaha isdhaafka domain-ka.' );
continue;
}
stylesheet.compatdelete = stylesheet.deleteRule || stylesheet.removeRule;
for ( j = 0; rules && j < rules.length; j++ ) {
rule = rules[ j ];
hasPrint = false;
hasScreen = false;
if ( rule.type === CSSRule.MEDIA_RULE && rule.media ) {
for ( k = 0; k < rule.media.length; k++ ) {
if ( rule.media[ k ] === 'print' ) {
hasPrint = true;
} else if ( rule.media[ k ] === 'screen' ) {
hasScreen = true;
}
}
} else {
continue;
}
if ( hasPrint && !hasScreen ) {
stylesheet.compatdelete( j );
j--;
} else if ( hasScreen && !hasPrint ) {
try {
rule.media.appendMedium( 'print' );
} catch ( e ) {
rule.media.mediaText += ',print';
}
}
}
}
}
/* Ku dar CSS si loo qariyo sawirada */
if ( this.noimages ) {
printStyle += 'img, .thumb {display:none;}\n';
}
/* Ku dar CSS si loo qariyo calaamadaha tixraacyada iyo liisaska tixraacyada */
if ( this.norefs ) {
printStyle += '.mw-heading:has(#References), ol.references, .reference {display:none;}\n';
}
if ( this.notoc ) {
printStyle += '#toc, .toc {display:none;}\n';
}
if ( this.nobackground ) {
printStyle += '* {background:none !important;}\n';
}
if ( this.blacktext ) {
printStyle += '* {color:black !important;}\n';
}
if ( printStyle ) {
$( 'head' ).append( '<style type="text/css" media="print">' + printStyle + '</style>' );
}
},
/* Dib u qor URL-ka "laga soo qaatay" si loo akhriyo */
otherEnhancements: function () {
var link = $( 'div.printfooter a' );
link.text( decodeURI( link.text() ) );
},
questions: [
{
label: 'Qari curiyeyaasha is-dhexgalka',
type: 'checkbox',
checked: true,
returnvalue: 'enhanced'
},
{
label: 'Qari sawirada',
type: 'checkbox',
checked: false,
returnvalue: 'noimages'
},
{
label: 'Qari tixraacyada',
type: 'checkbox',
checked: false,
returnvalue: 'norefs'
},
{
label: 'Qari Tusmada Mawduucyada',
type: 'checkbox',
checked: false,
returnvalue: 'notoc'
},
{
label: 'Ka saar asalka (Daalacashadaadu way burin kartaa ama ma burin karo kan)',
type: 'checkbox',
checked: false,
returnvalue: 'nobackground'
},
{
label: 'Ka dhig dhammaan qoraalka mid madow',
type: 'checkbox',
checked: true,
returnvalue: 'blacktext'
}
]
};
if ( mw.config.get( 'wgNamespaceNumber' ) >= 0 ) {
$( function () {
// Tani waxay noqon kartaa ka hor inta aan la rakibin maareeyaha gujinta ee MediaWiki. Beddelkeeda,
// dib ugu dar nafteena dhammaadka liiska document.ready iyadoo la isticmaalayo waqti sugitaan ah
setTimeout( function () {
$( printOptions.install );
} );
} );
}
}() );
ia9cmxd8xcwjbd2tlwtqunyfb0lww95
MediaWiki:Gadget-PrintOptions
8
53718
310912
2026-10-25T12:45:27Z
Isma4l
41797
/* */
310912
wikitext
text/x-wiki
[[:en:User:TheDJ/Print options|Xulashada daabacaadda]]: maamul sida bogagga loo daabaco (tusaale ahaan, ka saar sawirada ama asalka)
ldxr2vupivv6xy8ai7pamabvj28by06
MediaWiki:Gadget-revisionjumper.js
8
53719
310913
2026-10-25T12:46:26Z
Isma4l
41797
Abuuray
310913
javascript
text/javascript
/* _____________________________________________________________________________
* | |
* | === DIIBAAD: FAYLKA QALABKA CAALAMIGA AH === |
* | Isbeddellada lagu sameeyo boggan waxay saameeyaan isticmaaleyaal badan. |
* | Fadlan kala hadal isbeddellada bogga wada-hadalka ama [[WT:Gadget]] ka hor inta aadan tafatirin. |
* |_____________________________________________________________________________|
*
* Laga soo dejiyay nooca 1.2.3 laga bilaabo 2010-09-08 oo laga keenay [[:de:MediaWiki:Gadget-revisionjumper.js]]
* Isticmaalka qoraalkan wuxuu kuu ogolaanayaa inaad si sahal ah ugu dhex socoto kala-duwanaanshaha (diffs), taariikhda maqaallada iyo maqaallada laftooda.
* Liis hoos-u-dhac oo hodan ku ah astaamaha ayaa bixiya shaqooyin kala duwan si loogu boodo dib-u-eegis gaar ah
* kaas oo ku yaal ka hor ama ka dib dib-u-eegiska la xulay.
* Marka laga reebo cabbiraadaha caadiga ah, codsiyada la habeyn karo ayaa la samayn karaa.
* Intaas waxaa sii dheer, habaynta caadiga ah waa la shaqsiyeysan karaa.
* Eeg [[User:DerHexer/revisionjumper]]
*/
// [[:de:MediaWiki:Gadget-revisionjumper.js]]
mw.loader.load( '//de.wikipedia.org/w/index.php?title=MediaWiki:Gadget-revisionjumper.js&action=raw&ctype=text/javascript' );
8om83unfkl4xuegmuoucmeimu28u0wr
MediaWiki:Gadget-revisionjumper
8
53720
310914
2026-10-25T12:47:11Z
Isma4l
41797
/* */ Abuuray
310914
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-sister}}">(S)</abbr></sup> [[:en:User:DerHexer/revisionjumper|revisionjumper]]: si degdeg ah ugu dhex soco dib u eegisyada bogga
3i15jt93fgjpp3v7b6g205ip367dt77
MediaWiki:Gadget-morebits.js
8
53721
310915
2026-10-25T12:57:54Z
Isma4l
41797
Abuuray
310915
javascript
text/javascript
// <nowiki>
/**
* Maktabad ka buuxda faa'iidooyin badan oo loogu talagalay qoraallada isticmaalaha ee wiki-yada MediaWiki, oo ay ku jirto Wikipedia.
*
* Waxyaabaha ugu muhiimsan waxaa ka mid ah:
* - {@link Morebits.wiki.Api} - samee wicitaanno ku aaddan MediaWiki API
* - {@link Morebits.wiki.Page} - wax ka beddel bogagga wiki-ga (wax ka beddel, celin, tirtir, iwm.)
* - {@link Morebits.Date} - habaynta shayga taariikhda oo la xoojiyay, oo u eg nooc fudud oo moment.js ah
* - {@link Morebits.QuickForm} - abuur foomam HTML ah oo degdeg ah inta lagu jiro socodka
* - {@link Morebits.SimpleWindow} - abuur daaqadaha wada-sheekaysiga iyo sanduuqyada pop-ups-ka
* - {@link Morebits.Status} - qalab fudud oo lagu muujiyo fariimaha xaaladda, oo ay isticmaalaan fasallada Morebits.wiki
* - {@link Morebits.wikitext} - qalab loogu talagalay la-tacaamulka wikitext-ka
* - {@link Morebits.string} - qalab loogu talagalay maamulidda xargaha qoraalka (strings)
* - {@link Morebits.array} - qalab loogu talagalay maamulidda safafka (arrays)
* - {@link Morebits.ip} - qalab ka caawiya socodsiinta cinwaannada IP-ga
*
* Ku-tiirsanaanta:
* - Wax walba waxay ku tiirsan yihiin jQuery. Laakiin inta badan wiki-yadu waa inay tan bixiyaan sida caadiga ah.
* - {@link Morebits.QuickForm}, {@link Morebits.SimpleWindow}, iyo {@link Morebits.Status} waxay ku tiirsan yihiin faylka "morebits.css" si loo qurxiyo.
* - Si aad u abuurto qalab ku saleysan morebits.js, adeegso qaabkan ku jira MediaWiki:Gadgets-definition:
* - `*GadgetName[ResourceLoader|dependencies=mediawiki.user,mediawiki.util,mediawiki.Title]|morebits.js|morebits.css|GadgetName.js`
* - Sidoo kale, waxaad u habeyn kartaa morebits.js oo ah qalab qarsoon gudaha MediaWiki:Gadgets-definition:
* - `*morebits[ResourceLoader|dependencies=mediawiki.user,mediawiki.util,mediawiki.Title|hidden]|morebits.js|morebits.css`
* kadibna ku shub ext.gadget.morebits oo ah mid ka mid ah ku-tiirsanaanta qalabka cusub.
*
* Dhammaan waxyaabaha halkan ku jira waxay ka shaqeeyaan dhammaan daalacashada ee MediaWiki ay u fidiso taageerada JavaScript.
*
* Maktabaddan waxaa ilaaliya kooxda ilaalisa Twinkle.
* Wixii su'aalo ah, talooyin, caawimaad, iwm., aad [Wikipedia talk:Twinkle on English Wikipedia](http://en.wikipedia.org/wiki/WT:TW).
* Isha ugu dambeysa ee horumarinta waa laga heli karaa {@link https://github.com/wikimedia-gadgets/twinkle/blob/master/src/morebits.js|GitHub}.
*
* @namespace Morebits
*/
(function() {
/** @lends Morebits */
const Morebits = {};
window.Morebits = Morebits; // u oggolow helitaanka caalamiga ah
/**
* Qaabaynta gaarka ah ee Wiki ee Morebits
*/
Morebits.l10n = {
/**
* Magacyada kale ee maxalliga ah ee ereyada sixirka ah ee "redirect".
* Ka hubi adiga oo adeegsanaya api.php?action=query&format=json&meta=siteinfo&formatversion=2&siprop=magicwords
*/
redirectTagAliases: ['#REDIRECT'],
/**
* Waxay qaadataa xadhig qoraal ah oo dood ahaan ah waxayna hubisaa inay tahay waqti-sumcad iyo in kale
* Haddii aysan ahayn, waxay soo celineysaa null. Haddii ay tahay, waxay soo celineysaa saf tirooyin ah
* qaabka [year, month, date, hour, minute, second]
* kaas oo loo gudbin karo Date.UTC()
*
* @param {string} str
* @return {number[] | null}
*/
signatureTimestampFormat: function(str) {
// HH:mm, DD Month YYYY (UTC)
const rgx = /(\d{2}):(\d{2}), (\d{1,2}) (\w+) (\d{4}) \(UTC\)/;
const match = rgx.exec(str);
if (!match) {
return null;
}
const month = Morebits.Date.localeData.months.indexOf(match[4]);
if (month === -1) {
return null;
}
// ..... year ... month .. date ... hour .... minute
return [match[5], month, match[3], match[1], match[2]];
}
};
/**
* Shaqo caawineed oo fudud si loo arko kooxaha uu isticmaalahu ka tirsanaan karo.
*
* @param {string} group - tusaale `sysop`, `extendedconfirmed`, iwm.
* @return {boolean}
*/
Morebits.userIsInGroup = function(group) {
return mw.config.get('wgUserGroups').includes(group);
};
/**
* Waxay si adag u qeexdaa in isticmaalahu yahay sysop, taas oo si badan loo isticmaalo.
*
* @type {boolean}
*/
Morebits.userIsSysop = Morebits.userIsInGroup('sysop');
/**
* Waxay go'aaminaysaa in bogga hadda la joogo uu yahay mid dib loo jeediyay ama mid jilicsan. Fails
* inay ogaato dib-u-jeedinta jilicsan ee bogagga wax-ka-beddelka, taariikhda, iwm. Waxay sidoo kale isku dayi doontaa inay
* ogaato Module:RfD, iyada oo leh dhibco guuldarro oo la mid ah.
*
* @return {boolean}
*/
Morebits.isPageRedirect = function() {
return !!(mw.config.get('wgIsRedirect') || document.getElementById('softredirect') || $('.box-RfD').length);
};
/**
* Waxay kaydisaa nooc caadi ah (oo hoosta laga xarriiqay oo loo beddelay meel bannaan) ee
* doorsoomaha `wgPageName`.
*
* @type {string}
*/
Morebits.pageNameNorm = mw.config.get('wgPageName').replace(/_/g, ' ');
/**
* Abuur xadhig loogu isticmaalo regex oo la jaanqaadashada magaca bogga. Xisaabisaa
* xarafka ugu horreeya ee weyn/yar, hoosta oo ah meelo bannaan, iyo xarfaha gaarka ah
* ee la baxsaday. Sidoo kale eeg {@link Morebits.namespaceRegex}.
*
* @param {string} pageName - Magaca bogga oo aan lahayn magaca bannaan.
* @return {string} - Magaca bogga `Foo bar`, wuxuu soo celinayaa xadhigga `[Ff]oo[_ ]bar`.
*/
Morebits.pageNameRegex = function(pageName) {
if (pageName === '') {
return '';
}
const firstChar = pageName[0],
remainder = Morebits.string.escapeRegExp(pageName.slice(1));
if (mw.Title.phpCharToUpper(firstChar) !== firstChar.toLowerCase()) {
return '[' + mw.Title.phpCharToUpper(firstChar) + firstChar.toLowerCase() + ']' + remainder;
}
return Morebits.string.escapeRegExp(firstChar) + remainder;
};
/**
* Waxay u beddeshaa xadhig ama saf ka mid ah noodhadhka DOM-ka qayb HTML ah.
* Xiriirka wiki (`[[...]]`) waxaa loo beddelaa saldhig HTML ah.
* Waxaa lagu isticmaalaa Morebits.QuickForm iyo Morebits.Status
*
* @internal
* @param {string|Node|(string|Node)[]} input
* @return {DocumentFragment}
*/
Morebits.createHtml = function(input) {
const fragment = document.createDocumentFragment();
if (!input) {
return fragment;
}
if (!Array.isArray(input)) {
input = [input];
}
for (let i = 0; i < input.length; ++i) {
if (input[i] instanceof Node) {
fragment.appendChild(input[i]);
} else {
$.parseHTML(Morebits.createHtml.renderWikilinks(input[i])).forEach((node) => {
fragment.appendChild(node);
});
}
}
return fragment;
};
/**
* Waxay xiriirada wiki u beddeshaa tags-ka saldhigga HTML.
*
* @param {string} text
* @return {string}
*/
Morebits.createHtml.renderWikilinks = function(text) {
const ub = new Morebits.Unbinder(text);
// Ha u beddelin xiriirada wiki ee ku dhex jira tags-ka koodhka maadaama loo isticmaalo bandhigidda koodhka wiki
ub.unbind('<code>', '</code>');
ub.content = ub.content.replace(
/\[\[:?(?:([^|\]]+?)\|)?([^\]|]+?)\]\]/g,
(_, target, text) => {
if (!target) {
target = text;
}
return '<a target="_blank" href="' + mw.util.getUrl(target) +
'" title="' + target.replace(/"/g, '"') + '">' + text + '</a>';
});
return ub.rebind();
};
/**
* Abuur xadhig loogu isticmaalo regex oo la jaanqaadaya dhammaan magacyada bannaan, iyada oo aan loo eegin
* xarfaha waaweyn/yar iyo hoosta/meelaha bannaan. Ma jirto calaamad bilow ah oo ikhtiyaari ah `:`, laakiin haddii ay jiraan wax
* ka badan hal shay, waxay ku duubtaa liiska koox aan soo qabanayn.
* Tan macnaheedu waa inaad samayn kartaa `Morebits.namespaceRegex([4]) +
* ':' + Morebits.pageNameRegex('Twinkle')` si aad u waafajiso bog buuxa. Waxay isticmaashaa
* {@link Morebits.pageNameRegex}.
*
* @param {number[]} namespaces - Safka lambarrada magacyada bannaan. Lambarrada aan la isticmaalin/aan shaqaynayn
* waa la iska indhatiraa.
* @example
* // waxay soo celinaysaa '(?:[Ff][Ii][Ll][Ee]|[Ii][Mm][Aa][Gg][Ee])'
* Morebits.namespaceRegex([6])
* @return {string} - Xadhig ku habboon Regex oo ah dhammaan magacyada bannaan.
*/
Morebits.namespaceRegex = function(namespaces) {
if (!Array.isArray(namespaces)) {
namespaces = [namespaces];
}
const aliases = [];
let regex;
$.each(mw.config.get('wgNamespaceIds'), (name, number) => {
if (namespaces.includes(number)) {
// Magacyada bannaan waa kuwo aan u janjeerin dhanka xarfaha,
// iyo xadhigga regex waa mid faa'iido badan / la jaanqaad badan leh marka loo eego shayga RegExp,
// markaa waxaan aqbalnaa xaraf kasta oo leh qaab xaraf weyn ama yar.
aliases.push(name.split('').map((char) => Morebits.pageNameRegex(char)).join(''));
}
});
switch (aliases.length) {
case 0:
regex = '';
break;
case 1:
regex = aliases[0];
break;
default:
regex = '(?:' + aliases.join('|') + ')';
break;
}
return regex;
};
/* **************** Morebits.QuickForm **************** */
/**
* Abuuritaanka foomam fudud oo caadi ah adigoon samayn barnaamij aad u adag.
*
* @namespace Morebits.QuickForm
* @memberof Morebits
* @class
* @param {event} event - Shaqada la fulinayo marka foomka la gudbiyo.
* @param {string} [eventType=submit] - Nooca dhacdada.
*/
Morebits.QuickForm = function QuickForm(event, eventType) {
this.root = new Morebits.QuickForm.Element({ type: 'form', event: event, eventType: eventType });
};
/**
* Waxay soo saaraysaa natiijada HTML ee quickform-ka.
*
* @memberof Morebits.QuickForm
* @return {HTMLElement}
*/
Morebits.QuickForm.prototype.render = function QuickFormRender() {
const ret = this.root.render();
ret.names = {};
return ret;
};
/**
* Ku dar shay foomka.
*
* @memberof Morebits.QuickForm
* @param {(object|Morebits.QuickForm.Element)} data - Shayga quickform, ama shayga lagu dhiso
* shayga quickform.
* @return {Morebits.QuickForm.Element} - Sida shayga loo soo gudbiyay oo kale.
*/
Morebits.QuickForm.prototype.append = function QuickFormAppend(data) {
return this.root.append(data);
};
/**
* Abuur shay cusub oo foomka ah.
*
* Tusmada noocyada Morebits.QuickForm.Element:
* - Sifooyinka guud: id, className, style, tooltip, extra, $data, adminonly
* - `select`: Sanduuqa xulashada (combo box / drop-down).
* - Sifooyinka: name, label, multiple, size, list, event, disabled
* - `option`: Shayga sanduuqa xulashada.
* - Sifooyinka: value, label, selected, disabled
* - `optgroup`: Koox ka tirsan "option".
* - Sifooyinka: label, list
* - `field`: Qayb foom (fieldset).
* - Sifooyinka: name, label, disabled
* - `checkbox`: Sanduuqa calaamadaynta. Waa in la isticmaalo cabbirka "list".
* - Sifooyinka: name, list, event
* - Sifooyinka (gudaha list): name, label, value, checked, disabled, event, subgroup
* - `radio`: Badhanka raadiyaha. Waa in la isticmaalo cabbirka "list".
* - Sifooyinka: name, list, event
* - Sifooyinka (gudaha list): name, label, value, checked, disabled, event, subgroup
* - `input`: Sanduuqa qoraalka la geliyo.
* - Sifooyinka: name, label, value, size, placeholder, maxlength, disabled, required, readonly, event
* - `number`: Sanduuqa lambarka la geliyo.
* - Sifooyinka: Wax kasta oo uu `input` leeyahay, iyo weliba: min, max, step, list
* - `dyninput`: Sanduuqyo qoraal ah oo wata badhamada "Remove" iyo badhan "Add".
* - Sifooyinka: name, label, min, max, inputs, sublabel, value, size, maxlength, event
* - `hidden`: Goob foom oo aan la arki karin.
* - Sifooyinka: name, value
* - `header`: Madax heerka 5 ah.
* - Sifooyinka: label
* - `div`: Shay ama calaamad guud oo boos-hayare ah.
* - Sifooyinka: name, label
* - `submit`: Badhanka gudbinta. Morebits.SimpleWindow waxay u wareejisaa kuwan gunta hoose ee wada-sheekaysiga.
* - Sifooyinka: name, label, disabled
* - `button`: Badhan caadi ah.
* - Sifooyinka: name, label, disabled, event
* - `textarea`: Sanduuq qoraal oo weyn, oo safaf badan leh.
* - Sifooyinka: name, label, value, cols, rows, disabled, required, readonly
* - `fragment`: Shayga DocumentFragment.
* - Ma laha sifooyin, mana laha sifooyin guud marka laga reebo adminonly.
* Waxaa jira xoogaa kala duwanaansho ah oo ku saabsan sida noocyadu u maamulaan sifooyinka `label`:
* - `div`, `select`, `field`, `checkbox`/`radio`, `input`, `textarea`, `header`, iyo `dyninput` waxay aqbali karaan safar shay ah,
* waxaana calaamadda(daha) noqon kara `Element`.
* - `option`, `optgroup`, `_dyninput_cell`, `submit`, iyo `button` waxay aqbalaan hal xadhig oo keliya.
*
* @memberof Morebits.QuickForm
* @class
* @param {Object} data - Shayga matalaya shayga quickform. Waa inuu
* cayimaadaa mid ka mid ah noocyada laga heli karo tusmada kor ku xusan, iyo sidoo kale
* sifooyinka la xiriira ee la heli karo.
* @example new Morebits.QuickForm.Element({
* name: 'target',
* type: 'input',
* label: 'Your target:',
* tooltip: 'Enter your target. Required.',
* required: true
* });
*/
Morebits.QuickForm.Element = function QuickFormElement(data) {
this.data = data;
this.childs = [];
};
/**
* @memberof Morebits.QuickForm.Element
* @type {number}
*/
Morebits.QuickForm.Element.id = 0;
/**
* Ku dar shay shayga hadda jira.
*
* @memberof Morebits.QuickForm.Element
* @param {Morebits.QuickForm.Element} data - Shayga quickForm ama shayga loo baahan yahay
* si loo abuuro shayga quickForm.
* @return {Morebits.QuickForm.Element} Shayga isla markaana la soo gudbiyay.
*/
Morebits.QuickForm.Element.prototype.append = function QuickFormElementAppend(data) {
let child;
if (data instanceof Morebits.QuickForm.Element) {
child = data;
} else {
child = new Morebits.QuickForm.Element(data);
}
this.childs.push(child);
return child;
};
/**
* Waxay soo saaraysaa natiijada HTML ee shayga quickForm. Tan waa in la wacaa
* iyada oo aan la isticmaalin halbeegyo: `form.render()`.
*
* @memberof Morebits.QuickForm.Element
* @return {HTMLElement}
*/
Morebits.QuickForm.Element.prototype.render = function QuickFormElementRender(internal_subgroup_id) {
const currentNode = this.compute(this.data, internal_subgroup_id);
for (let i = 0; i < this.childs.length; ++i) {
// ha u gudbin internal_subgroup_id wicitaannada soo noqnoqda
currentNode[1].appendChild(this.childs[i].render());
}
return currentNode[0];
};
/** @memberof Morebits.QuickForm.Element */
Morebits.QuickForm.Element.prototype.compute = function QuickFormElementCompute(data, in_id) {
let node;
let childContainer = null;
let label;
const id = (in_id ? in_id + '_' : '') + 'node_' + Morebits.QuickForm.Element.id++;
if (data.adminonly && !Morebits.userIsSysop) {
// hell hack alpha
data.type = 'hidden';
}
let i, current, subnode;
switch (data.type) {
case 'form':
node = document.createElement('form');
node.className = 'quickform';
node.setAttribute('action', 'javascript:void(0);');
if (data.event) {
node.addEventListener(data.eventType || 'submit', data.event, false);
}
break;
case 'fragment':
node = document.createDocumentFragment();
// fragment-yadu ma yeelan karaan sifooyin, markaa si toos ah u soo celi
return [node, node];
// Mararka qaarkood Twinkle waxay isticmaashaa "select" la raadin karo. Waxaa xoojiya maktabadda saddexaad ee "select2". Daar adigoo abuuraya Morebits "select" element, ka dibna wac `$('select[name=sub_group]').select2({});` ama la mid ah dhamaadka koodhkaaga ugu weyn.
case 'select':
node = document.createElement('div');
node.setAttribute('id', 'div_' + id);
if (data.label) {
label = node.appendChild(document.createElement('label'));
label.setAttribute('for', id);
label.appendChild(Morebits.createHtml(data.label));
label.style.marginRight = '3px';
}
var select = node.appendChild(document.createElement('select'));
if (data.event) {
select.addEventListener('change', data.event, false);
}
if (data.multiple) {
select.setAttribute('multiple', 'multiple');
}
if (data.size) {
select.setAttribute('size', data.size);
}
if (data.disabled) {
select.setAttribute('disabled', 'disabled');
}
select.setAttribute('name', data.name);
if (data.list) {
for (i = 0; i < data.list.length; ++i) {
current = data.list[i];
if (current.list) {
current.type = 'optgroup';
} else {
current.type = 'option';
}
subnode = this.compute(current);
select.appendChild(subnode[0]);
}
}
childContainer = select;
break;
case 'option':
node = document.createElement('option');
node.values = data.value;
node.setAttribute('value', data.value);
if (data.selected) {
node.setAttribute('selected', 'selected');
}
if (data.disabled) {
node.setAttribute('disabled', 'disabled');
}
node.setAttribute('label', data.label);
node.appendChild(document.createTextNode(data.label));
break;
case 'optgroup':
node = document.createElement('optgroup');
node.setAttribute('label', data.label);
if (data.list) {
for (i = 0; i < data.list.length; ++i) {
current = data.list[i];
current.type = 'option'; // waa inay ahaadaan option halkan
subnode = this.compute(current);
node.appendChild(subnode[0]);
}
}
break;
case 'field':
node = document.createElement('fieldset');
label = node.appendChild(document.createElement('legend'));
label.appendChild(Morebits.createHtml(data.label));
if (data.name) {
node.setAttribute('name', data.name);
}
if (data.disabled) {
node.setAttribute('disabled', 'disabled');
}
break;
case 'checkbox':
case 'radio':
node = document.createElement('div');
if (data.list) {
for (i = 0; i < data.list.length; ++i) {
const cur_id = id + '_' + i;
current = data.list[i];
var cur_div;
if (current.type === 'header') {
// inline hack
cur_div = node.appendChild(document.createElement('h6'));
cur_div.appendChild(document.createTextNode(current.label));
if (current.tooltip) {
Morebits.QuickForm.Element.generateTooltip(cur_div, current);
}
continue;
}
cur_div = node.appendChild(document.createElement('div'));
subnode = cur_div.appendChild(document.createElement('input'));
subnode.values = current.value;
subnode.setAttribute('value', current.value);
subnode.setAttribute('type', data.type);
subnode.setAttribute('id', cur_id);
subnode.setAttribute('name', current.name || data.name);
// Haddii magaca lagu bixiyo checkbox-ka gaarka ah, ku dar data-single
// sifo muujinaysa inuusan ahayn qayb ka mid ah liiska checkbox-yada leh
// magaca isla'eg. Waxaa lagu isticmaalaa getInputData()
if (current.name) {
subnode.setAttribute('data-single', 'data-single');
}
if (current.checked) {
subnode.setAttribute('checked', 'checked');
}
if (current.disabled) {
subnode.setAttribute('disabled', 'disabled');
}
label = cur_div.appendChild(document.createElement('label'));
label.appendChild(Morebits.createHtml(current.label));
label.setAttribute('for', cur_id);
if (current.tooltip) {
Morebits.QuickForm.Element.generateTooltip(label, current);
}
// qaababku waxay aadaan calaamadda, macno ma samaynayso in la habeeyo checkbox/radio
if (current.style) {
label.setAttribute('style', current.style);
}
var event;
if (current.subgroup) {
let tmpgroup = current.subgroup;
if (!Array.isArray(tmpgroup)) {
tmpgroup = [tmpgroup];
}
var subgroupRaw = new Morebits.QuickForm.Element({
type: 'div',
id: id + '_' + i + '_subgroup'
});
$.each(tmpgroup, (idx, el) => {
const newEl = $.extend({}, el);
if (!newEl.type) {
newEl.type = data.type;
}
newEl.name = (current.name || data.name) + '.' + newEl.name;
subgroupRaw.append(newEl);
});
const subgroup = subgroupRaw.render(cur_id);
subgroup.className = 'quickformSubgroup';
subnode.subgroup = subgroup;
subnode.shown = false;
event = function(e) {
if (e.target.checked) {
e.target.parentNode.appendChild(e.target.subgroup);
if (e.target.type === 'radio') {
const name = e.target.name;
if (e.target.form.names[name] !== undefined) {
e.target.form.names[name].parentNode.removeChild(e.target.form.names[name].subgroup);
}
e.target.form.names[name] = e.target;
}
} else {
e.target.parentNode.removeChild(e.target.subgroup);
}
};
subnode.addEventListener('change', event, true);
if (current.checked) {
subnode.parentNode.appendChild(subgroup);
}
} else if (data.type === 'radio') {
event = function(e) {
if (e.target.checked) {
const name = e.target.name;
if (e.target.form.names[name] !== undefined) {
e.target.form.names[name].parentNode.removeChild(e.target.form.names[name].subgroup);
}
delete e.target.form.names[name];
}
};
subnode.addEventListener('change', event, true);
}
// ku dar dhacdada isticmaalayaasha ugu dambayn, si ay ula falgali karto subgroup-ka
if (data.event) {
subnode.addEventListener('change', data.event, false);
} else if (current.event) {
subnode.addEventListener('change', current.event, true);
}
}
}
if (data.shiftClickSupport && data.type === 'checkbox') {
Morebits.checkboxShiftClickSupport(Morebits.QuickForm.getElements(node, data.name));
}
break;
// input waa nooc qoraal ah, markaa lambarku wuxuu halkan ka dhaxlaa waxyaabaha la mid ah
case 'number':
case 'input':
node = document.createElement('div');
node.setAttribute('id', 'div_' + id);
if (data.label) {
label = node.appendChild(document.createElement('label'));
label.appendChild(Morebits.createHtml(data.label));
label.setAttribute('for', data.id || id);
label.style.marginRight = '3px';
}
subnode = node.appendChild(document.createElement('input'));
subnode.setAttribute('name', data.name);
if (data.type === 'input') {
subnode.setAttribute('type', 'text');
} else {
subnode.setAttribute('type', 'number');
['min', 'max', 'step', 'list'].forEach((att) => {
if (data[att]) {
subnode.setAttribute(att, data[att]);
}
});
}
['value', 'size', 'placeholder', 'maxlength'].forEach((att) => {
if (data[att]) {
subnode.setAttribute(att, data[att]);
}
});
['disabled', 'required', 'readonly'].forEach((att) => {
if (data[att]) {
subnode.setAttribute(att, att);
}
});
if (data.event) {
subnode.addEventListener('input', data.event, false);
}
childContainer = subnode;
break;
case 'dyninput':
var min = data.min || 1;
var max = data.max || Infinity;
node = document.createElement('div');
label = node.appendChild(document.createElement('h5'));
label.appendChild(Morebits.createHtml(data.label));
var listNode = node.appendChild(document.createElement('div'));
var more = this.compute({
type: 'button',
label: 'more',
disabled: min >= max,
event: function(e) {
const new_node = new Morebits.QuickForm.Element(e.target.sublist);
e.target.area.appendChild(new_node.render());
if (++e.target.counter >= e.target.max) {
e.target.setAttribute('disabled', 'disabled');
}
e.stopPropagation();
}
});
node.appendChild(more[0]);
var moreButton = more[1];
var sublist = {
type: '_dyninput_row',
remove: false,
maxlength: data.maxlength,
event: data.event,
inputs: data.inputs || [{
// waafajinta
label: data.sublabel || data.label,
name: data.name,
value: data.value,
size: data.size
}]
};
for (i = 0; i < min; ++i) {
const elem = new Morebits.QuickForm.Element(sublist);
listNode.appendChild(elem.render());
}
sublist.remove = true;
sublist.morebutton = moreButton;
sublist.listnode = listNode;
moreButton.sublist = sublist;
moreButton.area = listNode;
moreButton.max = max - min;
moreButton.counter = 0;
break;
case '_dyninput_row': // Gaar ah
node = document.createElement('div');
data.inputs.forEach((subdata) => {
const cell = new Morebits.QuickForm.Element($.extend(subdata, { type: '_dyninput_cell' }));
node.appendChild(cell.render());
});
if (data.remove) {
const remove = this.compute({
type: 'button',
label: 'remove',
event: function(e) {
const list = e.target.listnode;
const node = e.target.inputnode;
const more = e.target.morebutton;
list.removeChild(node);
--more.counter;
more.removeAttribute('disabled');
e.stopPropagation();
}
});
node.appendChild(remove[0]);
const removeButton = remove[1];
removeButton.inputnode = node;
removeButton.listnode = data.listnode;
removeButton.morebutton = data.morebutton;
}
break;
case '_dyninput_cell': // Gaar ah, oo la mid ah input caadi ah
node = document.createElement('span');
if (data.label) {
label = node.appendChild(document.createElement('label'));
label.appendChild(document.createTextNode(data.label));
label.setAttribute('for', id + '_input');
label.style.marginRight = '3px';
}
subnode = node.appendChild(document.createElement('input'));
subnode.setAttribute('id', id + '_input');
if (data.value) {
subnode.setAttribute('value', data.value);
}
subnode.setAttribute('name', data.name);
subnode.setAttribute('type', 'text');
subnode.setAttribute('data-dyninput', 'data-dyninput');
if (data.size) {
subnode.setAttribute('size', data.size);
}
if (data.maxlength) {
subnode.setAttribute('maxlength', data.maxlength);
}
if (data.required) {
subnode.setAttribute('required', 'required');
}
if (data.disabled) {
subnode.setAttribute('required', 'disabled');
}
if (data.event) {
subnode.addEventListener('input', data.event, false);
}
node.style.marginRight = '3px';
break;
case 'hidden':
node = document.createElement('input');
node.setAttribute('type', 'hidden');
node.values = data.value;
node.setAttribute('value', data.value);
node.setAttribute('name', data.name);
break;
case 'header':
node = document.createElement('h5');
node.appendChild(Morebits.createHtml(data.label));
break;
case 'div':
node = document.createElement('div');
if (data.name) {
node.setAttribute('name', data.name);
}
if (data.label) {
const result = document.createElement('span');
result.className = 'quickformDescription';
result.appendChild(Morebits.createHtml(data.label));
node.appendChild(result);
}
break;
case 'submit':
node = document.createElement('span');
childContainer = node.appendChild(document.createElement('input'));
childContainer.setAttribute('type', 'submit');
if (data.label) {
childContainer.setAttribute('value', data.label);
}
childContainer.setAttribute('name', data.name || 'submit');
if (data.disabled) {
childContainer.setAttribute('disabled', 'disabled');
}
break;
case 'button':
node = document.createElement('span');
childContainer = node.appendChild(document.createElement('input'));
childContainer.setAttribute('type', 'button');
if (data.label) {
childContainer.setAttribute('value', data.label);
}
childContainer.setAttribute('name', data.name);
if (data.disabled) {
childContainer.setAttribute('disabled', 'disabled');
}
if (data.event) {
childContainer.addEventListener('click', data.event, false);
}
break;
case 'textarea':
node = document.createElement('div');
node.setAttribute('id', 'div_' + id);
if (data.label) {
label = node.appendChild(document.createElement('h5'));
const labelElement = document.createElement('label');
labelElement.appendChild(Morebits.createHtml(data.label));
labelElement.setAttribute('for', data.id || id);
label.appendChild(labelElement);
}
subnode = node.appendChild(document.createElement('textarea'));
subnode.setAttribute('name', data.name);
if (data.cols) {
subnode.setAttribute('cols', data.cols);
}
if (data.rows) {
subnode.setAttribute('rows', data.rows);
}
if (data.disabled) {
subnode.setAttribute('disabled', 'disabled');
}
if (data.required) {
subnode.setAttribute('required', 'required');
}
if (data.readonly) {
subnode.setAttribute('readonly', 'readonly');
}
if (data.value) {
subnode.value = data.value;
}
childContainer = subnode;
break;
default:
throw new Error('Morebits.QuickForm: unknown element type ' + data.type.toString());
}
if (!childContainer) {
childContainer = node;
}
if (data.tooltip) {
Morebits.QuickForm.Element.generateTooltip(label || node, data);
}
if (data.extra) {
childContainer.extra = data.extra;
}
if (data.$data) {
$(childContainer).data(data.$data);
}
if (data.style) {
childContainer.setAttribute('style', data.style);
}
if (data.className) {
childContainer.className = childContainer.className ?
childContainer.className + ' ' + data.className :
data.className;
}
childContainer.setAttribute('id', data.id || id);
return [node, childContainer];
};
Morebits.QuickForm.$tooltip = null;
/**
* Abuur talo-bixin (tooltip).
*
* @memberof Morebits.QuickForm.Element
* @param {HTMLElement} node - Shayga HTML ee agtiisa laga abuurayo tooltip-ka.
* @param {Object} data - Xogta qaabaynta ee la xiriirta tooltip-ka.
*/
Morebits.QuickForm.Element.generateTooltip = function QuickFormElementGenerateTooltip(node, data) {
if (!Morebits.QuickForm.$tooltip) {
Morebits.QuickForm.$tooltip = $('<div>')
.attr('id', 'morebits-ui-tooltip')
.attr('role', 'tooltip')
.addClass('morebits-ui-tooltip')
.appendTo('body');
}
const $tooltip = Morebits.QuickForm.$tooltip;
const $button = $('<span>')
.addClass('morebits-tooltipButton')
.text('?')
.appendTo(node);
$button.on('mouseenter', () => {
$tooltip.html(data.tooltip).addClass('visible');
const buttonRect = $button[0].getBoundingClientRect();
const tooltipRect = $tooltip[0].getBoundingClientRect();
const topOffset = buttonRect.bottom + tooltipRect.height < window.innerHeight ?
buttonRect.bottom : // Waxay ku habboon tahay xagga sare ee calaamadda su'aasha - geli halkaas
Math.max(0, buttonRect.top - tooltipRect.height); // Haddii kale, geli xagga hoose ee calaamadda su'aasha
const leftOffset = buttonRect.right + tooltipRect.width < window.innerWidth ?
buttonRect.right : // Waxay ku habboon tahay dhinaca midig ee calaamadda su'aasha - geli halkaas
Math.max(0, buttonRect.left - tooltipRect.width); // Haddii kale, geli dhinaca bidix ee calaamadda su'aasha
$tooltip.css('top', window.scrollY + topOffset);
$tooltip.css('left', window.scrollX + leftOffset);
}).on('mouseleave', () => {
$tooltip.removeClass('visible');
});
};
// Hababka caawinta qaarkood ee lagu maamulo quickForms-ka ka dib abuuriskooda:
// (Midkoodna ma shaqeeyo noocyada "dyninput" hadda)
/**
* Waxay soo celineysaa shay ka kooban dhammaan xogta foomka ee buuxda ee uu geliyay isticmaalaha, iyadoo
* furayaasha shaygu ay yihiin magacyada shayada foomka. Goobaha la joojiyay waa la iska indhatiri doonaa, laakiin ma aha goobaha qarsoon.
*
* @memberof Morebits.QuickForm
* @param {HTMLFormElement} form
* @return {Object} Iyadoo magacyada goobuhu yihiin furayaal, xogta la geliyayna ay tahay qiyam.
*/
Morebits.QuickForm.getInputData = function(form) {
const result = {};
for (let i = 0; i < form.elements.length; i++) {
const field = form.elements[i];
if (field.disabled || !field.name || !field.type ||
field.type === 'submit' || field.type === 'button') {
continue;
}
// Shayada ku jira subgroups-ka, quickform waxay ka horreysaa magacyada shayada
// magaca kooxda waalidka oo ay ku xigto dhibco, taas ka takhalus.
const fieldNameNorm = field.name.slice(field.name.indexOf('.') + 1);
switch (field.type) {
case 'radio':
if (field.checked) {
result[fieldNameNorm] = field.value;
}
break;
case 'checkbox':
if (field.dataset.single) {
result[fieldNameNorm] = field.checked; // boolean
} else {
result[fieldNameNorm] = result[fieldNameNorm] || [];
if (field.checked) {
result[fieldNameNorm].push(field.value);
}
}
break;
case 'select-multiple':
result[fieldNameNorm] = $(field).val(); // field.value lama shaqeeyo
break;
case 'text': // hoos bay u dhacdaa
case 'textarea':
if (field.dataset.dyninput) {
result[fieldNameNorm] = result[fieldNameNorm] || [];
result[fieldNameNorm].push(field.value.trim());
} else {
result[fieldNameNorm] = field.value.trim();
}
break;
default: // waxay noqon kartaa select-one, date, number, email, iwm
if (field.value) {
result[fieldNameNorm] = field.value;
}
break;
}
}
return result;
};
/**
* Waxay soo celineysaa dhammaan walxaha foomka ee leh magaca goobta ama aqoonsiga (id) la bixiyay.
*
* @memberof Morebits.QuickForm
* @param {HTMLFormElement} form
* @param {string} fieldName - Magaca ama id-ga goobaha.
* @return {HTMLElement[]} - Safka walxaha foomka ee la mid ah.
*/
Morebits.QuickForm.getElements = function QuickFormGetElements(form, fieldName) {
const $form = $(form);
fieldName = $.escapeSelector(fieldName); // nadiifi gelitaanka
let $elements = $form.find('[name="' + fieldName + '"]');
if ($elements.length > 0) {
return $elements.toArray();
}
$elements = $form.find('#' + fieldName);
return $elements.toArray();
};
/**
* Waxay ka raadisaa safka walxaha checkbox ama badhanka raadiyaha ee leh astaamaha `value` gaar ah,
* waxayna soo celineysaa shaygaas kowaad. Waxay soo celineysaa null haddii aan la helin.
*
* @memberof Morebits.QuickForm
* @param {HTMLInputElement[]} elementArray - Safka walxaha checkbox ama radio.
* @param {string} value - Qiimaha la raadinayo.
* @return {HTMLInputElement}
*/
Morebits.QuickForm.getCheckboxOrRadio = function QuickFormGetCheckboxOrRadio(elementArray, value) {
const found = $.grep(elementArray, (el) => el.value === value);
if (found.length > 0) {
return found[0];
}
return null;
};
/**
* Waxay soo celineysaa <div> ka kooban shayga foomka, ama shayga foomka laftiisa
* Waxaa laga yaabaa inuusan u shaqayn sidii la filayay checkbox-yada ama radio-yada.
*
* @memberof Morebits.QuickForm
* @param {HTMLElement} element
* @return {HTMLElement}
*/
Morebits.QuickForm.getElementContainer = function QuickFormGetElementContainer(element) {
// div-yada, madaxyada iyo fieldsets-ka, weelku waa shayga laftiisa
if (element instanceof HTMLFieldSetElement || element instanceof HTMLDivElement ||
element instanceof HTMLHeadingElement) {
return element;
}
// kuwa kalena, kaliya soo celi noodhka waalidka (parentNode)
return element.parentNode;
};
/**
* Waxay soo celineysaa shayga HTML ee ka kooban calaamadda (label) ee shayga foomka la bixiyay
* (inta badan isticmaalka gudaha).
*
* @memberof Morebits.QuickForm
* @param {(HTMLElement|Morebits.QuickForm.Element)} element
* @return {HTMLElement}
*/
Morebits.QuickForm.getElementLabelObject = function QuickFormGetElementLabelObject(element) {
// badhamada, div-yada iyo madaxyada, calaamaddu waxay ku taal shayga laftiisa
if (element.type === 'button' || element.type === 'submit' ||
element instanceof HTMLDivElement || element instanceof HTMLHeadingElement) {
return element;
// fieldsets-ka, calaamaddu waa shayga carruurta ah ee <legend>
} else if (element instanceof HTMLFieldSetElement) {
return element.getElementsByTagName('legend')[0];
// textarea-yada, calaamaddu waa shayga walaasha ah ee <h5>
} else if (element instanceof HTMLTextAreaElement) {
return element.parentNode.getElementsByTagName('h5')[0];
}
// kuwa kalena, calaamaddu waa shayga walaasha ah ee <label>
return element.parentNode.getElementsByTagName('label')[0];
};
/**
* Waxay soo celineysaa qoraalka calaamadda ee shayga.
*
* @memberof Morebits.QuickForm
* @param {(HTMLElement|Morebits.QuickForm.Element)} element
* @return {string}
*/
Morebits.QuickForm.getElementLabel = function QuickFormGetElementLabel(element) {
const labelElement = Morebits.QuickForm.getElementLabelObject(element);
if (!labelElement) {
return null;
}
return labelElement.firstChild.textContent;
};
/**
* Waxay u dejisaa calaamadda shayga qoraalka la bixiyay.
*
* @memberof Morebits.QuickForm
* @param {(HTMLElement|Morebits.QuickForm.Element)} element
* @param {string} labelText
* @return {boolean} Run haddii ay guulaysatay, been haddii calaamadda aysan jirin.
*/
Morebits.QuickForm.setElementLabel = function QuickFormSetElementLabel(element, labelText) {
const labelElement = Morebits.QuickForm.getElementLabelObject(element);
if (!labelElement) {
return false;
}
labelElement.firstChild.textContent = labelText;
return true;
};
/**
* Waxay kaydisaa calaamadda hadda ee shayga, waxayna si ku-meel-gaar ah u dejisaa calaamadda qoraalka la bixiyay.
*
* @memberof Morebits.QuickForm
* @param {(HTMLElement|Morebits.QuickForm.Element)} element
* @param {string} temporaryLabelText
* @return {boolean} `true` haddii ay guulaysatay, `false` haddii calaamadda aysan jirin.
*/
Morebits.QuickForm.overrideElementLabel = function QuickFormOverrideElementLabel(element, temporaryLabelText) {
if (!element.hasAttribute('data-oldlabel')) {
element.setAttribute('data-oldlabel', Morebits.QuickForm.getElementLabel(element));
}
return Morebits.QuickForm.setElementLabel(element, temporaryLabelText);
};
/**
* Waxay soo celisaa calaamadda ay kaydisay overrideElementLabel.
*
* @memberof Morebits.QuickForm
* @param {(HTMLElement|Morebits.QuickForm.Element)} element
* @return {boolean} Run haddii ay guulaysatay, been haddii calaamadda aysan jirin.
*/
Morebits.QuickForm.resetElementLabel = function QuickFormResetElementLabel(element) {
if (element.hasAttribute('data-oldlabel')) {
return Morebits.QuickForm.setElementLabel(element, element.getAttribute('data-oldlabel'));
}
return null;
};
/**
* Waxay tusaysaa ama qarinaysaa shay foom ah oo ay la socoto calaamadeeda iyo tooltip-keeda.
*
* @memberof Morebits.QuickForm
* @param {(HTMLElement|jQuery|string)} element - Shayga HTML/jQuery, ama xadhigga xulashada jQuery.
* @param {boolean} [visibility] - Ka bood tan si aad u beddesho muuqashada.
*/
Morebits.QuickForm.setElementVisibility = function QuickFormSetElementVisibility(element, visibility) {
$(element).toggle(visibility);
};
/**
* Waxay tusaysaa ama qarinaysaa astaanta calaamadda su'aasha (taas oo muujisa tooltip-ka) ee ag taalla shayga foomka.
*
* @memberof Morebits.QuickForm
* @param {(HTMLElement|jQuery)} element
* @param {boolean} [visibility] - Ka bood tan si aad u beddesho muuqashada.
*/
Morebits.QuickForm.setElementTooltipVisibility = function QuickFormSetElementTooltipVisibility(element, visibility) {
$(Morebits.QuickForm.getElementContainer(element)).find('.morebits-tooltipButton').toggle(visibility);
};
/**
* @external HTMLFormElement
*/
/**
* Hel shayada la calaamadiyay ee foomka.
*
* @method external:HTMLFormElement.getChecked
* @param {string} name - Hel sifooyinka la calaamadiyay ee shayada (tusaale ahaan checkbox
* ama badhanka raadiyaha) oo wata magaca la bixiyay, ama xulo xulashooyinka leh selected
* loo dhigay true (ha isku dayin inaad isku darto select-yada iyo radio/checkboxes).
* @param {string} [type] - Ikhtiyaar ahaan cayimi ama radio ama checkbox (laga bilaabo
* dhacdada ah in labada checkbox iyo radiobuttons ay leeyihiin hal magac).
* @return {string[]} - Waxaa ku jira qiyamka shayada leh magaca la bixiyay
* ee sifooyinka calaamadaysan loo dejiyay true.
*/
HTMLFormElement.prototype.getChecked = function(name, type) {
const elements = this.elements[name];
if (!elements) {
return [];
}
const return_array = [];
let i;
if (elements instanceof HTMLSelectElement) {
const options = elements.options;
for (i = 0; i < options.length; ++i) {
if (options[i].selected) {
if (options[i].values) {
return_array.push(options[i].values);
} else {
return_array.push(options[i].value);
}
}
}
} else if (elements instanceof HTMLInputElement) {
if (type && elements.type !== type) {
return [];
} else if (elements.checked) {
return [elements.value];
}
} else {
for (i = 0; i < elements.length; ++i) {
if (elements[i].checked) {
if (type && elements[i].type !== type) {
continue;
}
if (elements[i].values) {
return_array.push(elements[i].values);
} else {
return_array.push(elements[i].value);
}
}
}
}
return return_array;
};
/**
* Waxay qabataa sidii {@link HTMLFormElement.getChecked|getChecked}, laakiin waxay la shaqaysaa shayada aan la calaamadayn.
*
* @method external:HTMLFormElement.getUnchecked
* @param {string} name - Hel sifooyinka la calaamadiyay ee shayada (tusaale ahaan checkbox
* ama badhanka raadiyaha) oo wata magaca la bixiyay, ama xulo xulashooyinka leh selected
* loo dhigay true (ha isku dayin inaad isku darto select-yada iyo radio/checkboxes).
* @param {string} [type] - Ikhtiyaar ahaan cayimi ama radio ama checkbox (laga bilaabo
* dhacdada ah in labada checkbox iyo radiobuttons ay leeyihiin hal magac).
* @return {string[]} - Waxaa ku jira qiyamka shayada leh magaca la bixiyay
* ee sifooyinka calaamadaysan loo dejiyay true.
*/
HTMLFormElement.prototype.getUnchecked = function(name, type) {
const elements = this.elements[name];
if (!elements) {
return [];
}
const return_array = [];
let i;
if (elements instanceof HTMLSelectElement) {
const options = elements.options;
for (i = 0; i < options.length; ++i) {
if (!options[i].selected) {
if (options[i].values) {
return_array.push(options[i].values);
} else {
return_array.push(options[i].value);
}
}
}
} else if (elements instanceof HTMLInputElement) {
if (type && elements.type !== type) {
return [];
} else if (!elements.checked) {
return [elements.value];
}
} else {
for (i = 0; i < elements.length; ++i) {
if (!elements[i].checked) {
if (type && elements[i].type !== type) {
continue;
}
if (elements[i].values) {
return_array.push(elements[i].values);
} else {
return_array.push(elements[i].value);
}
}
}
}
return return_array;
};
/**
* Qalab loogu talagalay in lagu caawiyo socodsiinta cinwaannada IP-ga.
*
* @namespace Morebits.ip
* @memberof Morebits
*/
Morebits.ip = {
/**
* Waxay u beddeshaa cinwaanka IPv6 qaabka caadiga ah ee ay kaydiso oo ay isticmaasho MediaWiki.
* Turjumaadda JavaScript ee {@link https://gerrit.wikimedia.org/r/plugins/gitiles/mediawiki/core/+/8eb6ac3e84ea3312d391ca96c12c49e3ad0753bb/includes/utils/IP.php#131|`IP::sanitizeIP()`}
* shaqada ka timid maktabadda IPUtils. Cinwaannada waa kuwo faahfaahsan, xarfaha waaweyn ah,
* la habeeyey, laguna ballaariyay 8 kelmadood.
*
* @param {string} address - Cinwaanka IPv6, oo wata ama aan wadan CIDR.
* @return {string}
*/
sanitizeIPv6: function(address) {
address = address.trim();
if (address === '') {
return null;
}
if (!mw.util.isIPv6Address(address, true)) {
return address; // ma jiraan wax kale oo laga qabto cinwaannada IPv4 ama kuwa khaldan
}
// Meesha ka saar bannaan kasta, u beddel xarfaha waaweyn
address = address.toUpperCase();
// Ballaari gaabinta eber-ka
const abbrevPos = address.indexOf('::');
if (abbrevPos > -1) {
// Waan ognahay in tani ay tahay IPv6 sax ah. Raadi tusaalaha ugu dambeeya ee
// cinwaanka ka hor lambar kasta oo CIDR ah (tusaale "a:b:c::/24").
const CIDRStart = address.indexOf('/');
const addressEnd = CIDRStart !== -1 ? CIDRStart - 1 : address.length - 1;
// Haddii '::' uu ku jiro billowga...
let repeat, extra, pad;
if (abbrevPos === 0) {
repeat = '0:';
extra = address === '::' ? '0' : ''; // cinwaanka '::'
pad = 9; // 7+2 (oo ay sabab u tahay '::')
// Haddii '::' uu ku jiro dhammaadka...
} else if (abbrevPos === (addressEnd - 1)) {
repeat = ':0';
extra = '';
pad = 9; // 7+2 (oo ay sabab u tahay '::')
// Haddii '::' uu ku jiro dhexda...
} else {
repeat = ':0';
extra = ':';
pad = 8; // 6+2 (oo ay sabab u tahay '::')
}
let replacement = repeat;
pad -= address.split(':').length - 1;
for (let i = 1; i < pad; i++) {
replacement += repeat;
}
replacement += extra;
address = address.replace('::', replacement);
}
// Ka saar eberrada hordhaca ah ee baloog kasta sida loo baahdo
return address.replace(/(^|:)0+([0-9A-Fa-f]{1,4})/g, '$1$2');
},
/**
* Go'aami in cinwaanka IP-ga la bixiyay uu yahay kala duwanaansho (range). Kaliya waxay isku xirtaa
5 mw.util.isIPAddress oo wadata iyo aan wadan xulashada `allowBlock`.
*
* @param {string} ip
* @return {boolean} - Run haddii la bixiyay kala duwanaansho cinwaan IP oo sax ah, been haddii kale.
*/
isRange: function(ip) {
return mw.util.isIPAddress(ip, true) && !mw.util.isIPAddress(ip);
},
/**
* Hubi in kala duwanaanshiyaha IP-ga uu ku jiro xadka CIDR. Waxaa u badan inuu faa'iido leeyahay
* iyadoo lala kaashashanayo `wgRelevantUserName`. Xadka CIDR waxaa loo adkeeyay sida /16
* ee IPv4 iyo /32 ee IPv6.
*
* @return {boolean} - Run oo ah kala duwanaansho sax ah oo ku dhex jira xadka CIDR,
* haddii kale been (kala duwanaansho ka baxsan xadka, IP-yo keli ah, kuwa aan IP ahayn).
*/
validCIDR: function(ip) {
if (Morebits.ip.isRange(ip)) {
const subnet = parseInt(ip.match(/\/(\d{1,3})$/)[1], 10);
if (subnet) { // Waa inay noqotaa mid aan loo baahnayn
if (mw.util.isIPv6Address(ip, true)) {
if (subnet >= 32) {
return true;
}
} else {
if (subnet >= 16) {
return true;
}
}
}
}
return false;
},
/**
* Hel /64 subnet ee cinwaanka IPv6.
*
* @param {string} ipv6 - Cinwaanka IPv6, oo wata ama aan wadan subnet.
* @return {boolean|string} - Been haddii uusan ahayn IPv6 ama ka weyn yahay 64,
* haddii kale cinwaanka /64 (ee la sifeeyey).
*/
get64: function(ipv6) {
if (!ipv6 || !mw.util.isIPv6Address(ipv6, true)) {
return false;
}
const subnetMatch = ipv6.match(/\/(\d{1,3})$/);
if (subnetMatch && parseInt(subnetMatch[1], 10) < 64) {
return false;
}
ipv6 = Morebits.ip.sanitizeIPv6(ipv6);
const ip_re = /^((?:[0-9A-F]{1,4}:){4})(?:[0-9A-F]{1,4}:){3}[0-9A-F]{1,4}(?:\/\d{1,3})?$/;
// eslint-disable-next-line no-useless-concat
return ipv6.replace(ip_re, '$1' + '0:0:0:0/64');
}
};
/**
* Shaqooyinka caawinta ee lagu maamulo xargaha qoraalka.
*
* @namespace Morebits.string
* @memberof Morebits
*/
Morebits.string = {
/**
* @param {string} str
* @return {string}
*/
toUpperCaseFirstChar: function(str) {
str = str.toString();
return str.slice(0, 1).toUpperCase() + str.slice(1);
},
/**
* @param {string} str
* @return {string}
*/
toLowerCaseFirstChar: function(str) {
str = str.toString();
return str.slice(0, 1).toLowerCase() + str.slice(1);
},
/**
* Waxay bixisaa saf ka mid ah xargaha hoose ee `str` - ka bilaabmaya `start` oo ku dhammaanaya
* `end` - oo aan ku jirin `skiplist`. Loogu talagalay in lagu isticmaalo
* wikitext-ka leh hannaannada ama xiriirada.
*
* @param {string} str
* @param {string} start
* @param {string} end
* @param {(string[]|string)} [skiplist]
* @return {string[]}
* @throws {Error} Haddii xargaha `start` iyo `end` aysan ahayn dherer isku mid ah.
* @throws {Error} Haddii `skiplist` uusan ahayn saf ama xadhig qoraal ah
*/
splitWeightedByKeys: function(str, start, end, skiplist) {
if (start.length !== end.length) {
throw new Error('calaamadda billowga iyo calaamadda dhammaadka waa inay noqdaan dherer isku mid ah');
}
let level = 0;
let initial = null;
const result = [];
if (!Array.isArray(skiplist)) {
if (skiplist === undefined) {
skiplist = [];
} else if (typeof skiplist === 'string') {
skiplist = [skiplist];
} else {
throw new Error('halbeegga skiplist ee aan la isticmaali karin');
}
}
for (let i = 0; i < str.length; ++i) {
for (let j = 0; j < skiplist.length; ++j) {
if (str.substr(i, skiplist[j].length) === skiplist[j]) {
i += skiplist[j].length - 1;
continue;
}
}
if (str.substr(i, start.length) === start) {
if (initial === null) {
initial = i;
}
++level;
i += start.length - 1;
} else if (str.substr(i, end.length) === end) {
--level;
i += end.length - 1;
}
if (!level && initial !== null) {
result.push(str.substring(initial, i + 1));
initial = null;
}
}
return result;
},
/**
* Waxay qaabaysaa "sababta" xorta ah (oo laga keenay textarea) tirtiridda / hannaannada kale
* ee beddelka noqon doona, (tusaale PROD, XFD, RPP).
* Waxay maamushaa `|` oo ka baxsan nowiki tag.
* Ikhtiyaar ahaan, waxay sidoo kale ku dartaa saxiix haddii uusan horay u jirin.
*
* @param {string} str
* @param {boolean} [addSig]
* @return {string}
*/
formatReasonText: function(str, addSig) {
let reason = (str || '').toString().trim();
const unbinder = new Morebits.Unbinder(reason);
// eslint-disable-next-line no-useless-concat
unbinder.unbind('<no' + 'wiki>', '</no' + 'wiki>');
unbinder.content = unbinder.content.replace(/\|/g, '|');
reason = unbinder.rebind();
if (addSig) {
const sig = '[[User:Isma4l|Isma4l]] ([[User talk:Isma4l|wadahadal]]) 12:57, 25 Oktoobar 2026 (UTC)', sigIndex = reason.lastIndexOf(sig);
if (sigIndex === -1 || sigIndex !== reason.length - sig.length) {
reason += ' ' + sig;
}
}
return reason.trim();
},
/**
* Waxay qaabaysaa "sababta" (oo laga keenay textarea) si loogu daro diiwaanka
* booska isticmaalaha. Waxay ku beddeshaa xariiq-jisyada {{Pb}}, waxayna ku dartaa `#` dheeraad ah ka hor
* shayada liiska si loo helo qaabayn sax ah.
*
* @param {string} str
* @return {string}
*/
formatReasonForLog: function(str) {
return str
// maamul kala-goysyada xariiqda, kuwaas oo haddii kale jebin lahaa lambaraynta
.replace(/\n+/g, '{{pb}}')
// geli # dheeraad ah horta shayada liiska ee calaamadaysan ama lambaraysan
.replace(/^(#+)/mg, '#$1')
.replace(/^(\*+)/mg, '#$1');
},
/**
* Sida `String.prototype.replace()`, laakiin waxay ka baxsanaysaa calaamadaha dollar-ka ee
* xadhigga beddelka ah. Faa'iido leh marka xadhigga beddelku uu yahay
5 mid ikhtiyaari ah, sida magaca isticmaalaha ama gelinta xorta ah ee isticmaalaha, oo uu yeelan karo
* calaamado dollar ah.
*
* @param {string} string - Qoraalka lagu beddelayo.
* @param {(string|RegExp)} pattern
* @param {string} replacement
* @return {string}
*/
safeReplace: function morebitsStringSafeReplace(string, pattern, replacement) {
return string.replace(pattern, replacement.replace(/\$/g, '$$$$'));
},
/**
* Go'aami in dhicitaanka uu bixiyay isticmaalahu loo arki doono mid
* aan xad lahayn (infinite-length) oo ay waddo MW.
*
* @see {@link https://phabricator.wikimedia.org/T68646}
*
* @param {string} expiry
* @return {boolean}
*/
isInfinity: function morebitsStringIsInfinity(expiry) {
return ['indefinite', 'infinity', 'infinite', 'never'].includes(expiry);
},
/**
* Waxay ka baxsanaysaa xadhig si loogu isticmaalo RegExp, iyada oo ku beddesha meelaha bannaan iyo
* hoosta `[_ ]` maadaama ay badanaa isku mid yihiin.
*
* @param {string} text - Xadhigga laga baxsanayo.
* @return {string} - Qoraalka la ka cararay.
*/
escapeRegExp: function(text) {
return mw.util.escapeRegExp(text).replace(/ |_/g, '[_ ]');
}
};
/**
* Shaqooyinka caawinta ee lagu maamulo safafka.
*
* @namespace Morebits.array
* @memberof Morebits
*/
Morebits.array = {
/**
* Ka saar shayada nuqulka ah safka.
*
* @param {Array} arr
* @return {Array} Nuqul ka mid ah safka oo nuqulladii laga saaray.
* @throws {Error} Marka la bixiyo shay aan saf ahayn.
*/
uniq: function(arr) {
if (!Array.isArray(arr)) {
throw new Error('Shay aan saf ahayn ayaa la soo gudbiyay Morebits.array.uniq');
}
return arr.filter((item, idx) => arr.indexOf(item) === idx);
},
/**
* Ka saar shayada aan nuqulka ahayn safka.
*
* @param {Array} arr
* @return {Array} Nuqul ka mid ah safka iyadoo kiiska koowaad ee qiime kasta
* la saaray; kiisaska ku xiga ee qiimayaashaas (nuqullada) way jiraan.
* @throws {Error} Marka la bixiyo shay aan saf ahayn.
*/
dups: function(arr) {
if (!Array.isArray(arr)) {
throw new Error('Shay aan saf ahayn ayaa la soo gudbiyay Morebits.array.dups');
}
return arr.filter((item, idx) => arr.indexOf(item) !== idx);
},
/**
* U qaybi saf safaf yaryar.
*
* @param {Array} arr
* @param {number} size - Cabbirka qayb kasta (marka laga reebo kan u dambeeya, oo noqon kara mid ka duwan).
* @return {Array[]} Saf ka kooban safafka yaryar ee la qaybiyay.
* @throws {Error} Marka la bixiyo shay aan saf ahayn.
*/
chunk: function(arr, size) {
if (!Array.isArray(arr)) {
throw new Error('Shay aan saf ahayn ayaa la soo gudbiyay Morebits.array.chunk');
}
if (typeof size !== 'number' || size <= 0) { // aad bay u adag tahay in wax la qabto :)
return [arr]; // waxaan soo celineynaa saf ka kooban safkan.
}
const numChunks = Math.ceil(arr.length / size);
const result = new Array(numChunks);
for (let i = 0; i < numChunks; i++) {
result[i] = arr.slice(i * size, (i + 1) * size);
}
return result;
}
};
/**
* Qalab loogu talagalay in lagu xoojiyo menu-yada select2. Eeg twinklewarn, twinklexfd,
* twinkleblock si aad u aragto tusaalayaal isticmaal.
*
* @see {@link https://select2.org/}
*
* @namespace Morebits.select2
* @memberof Morebits
* @requires jQuery.select2
*/
Morebits.select2 = {
matchers: {
/**
* Matcher gaar ah oo haddii magaca optgroup uu waafaqo, dhammaan xulashooyinka kooxdaas
* la tuso, sida ku jirta jquery.chosen.
*/
optgroupFull: function(params, data) {
const originalMatcher = $.fn.select2.defaults.defaults.matcher;
const result = originalMatcher(params, data);
if (result && params.term &&
data.text.toUpperCase().includes(params.term.toUpperCase())) {
result.children = data.children;
}
return result;
},
/** Matcher gaar ah oo ka mid ah bilowga ereyada keliya. */
wordBeginning: function(params, data) {
const originalMatcher = $.fn.select2.defaults.defaults.matcher;
const result = originalMatcher(params, data);
if (!params.term || (result &&
new RegExp('\\b' + mw.util.escapeRegExp(params.term), 'i').test(result.text))) {
return result;
}
return null;
}
},
/** Hoosta ka xariiq qaybta la waafajiyay ee xulashooyinka. */
highlightSearchMatches: function(data) {
const searchTerm = Morebits.select2SearchQuery;
if (!searchTerm || data.loading) {
return data.text;
}
const idx = data.text.toUpperCase().indexOf(searchTerm.toUpperCase());
if (idx < 0) {
return data.text;
}
return $('<span>').append(
data.text.slice(0, idx),
$('<span>').css('text-decoration', 'underline').text(data.text.slice(idx, idx + searchTerm.length)),
data.text.slice(idx + searchTerm.length)
);
},
/** Qabo su'aasha inta ay socoto, si loogu isticmaalo highlightSearchMatches. */
queryInterceptor: function(params) {
Morebits.select2SearchQuery = params && params.term;
},
/**
* Fur dropdown-ka oo billow raadinta marka `.select2-selection` uu leeyahay
* diiradda (focus) oo furaha la riixo.
*
* @see {@link https://github.com/select2/select2/issues/3279#issuecomment-442524147}
*/
autoStart: function(ev) {
if (ev.which < 48) {
return;
}
let $target = $(ev.target).closest('.select2-container');
if (!$target.length) {
return;
}
$target = $target.prev();
$target.select2('open');
const search = $target.data('select2').dropdown.$search ||
$target.data('select2').selection.$search;
// Isticmaal DOM .focus() si aad uga hortagto dib u dhaca jQuery 3.6.0 (https://github.com/select2/select2/issues/5993)
search[0].focus();
}
};
/**
* Si ku-meel-gaar ah u qari qayb ka mid ah xadhigga adiga oo socodsiinaya inta ka hartay.
* Waxaa isticmaala {@link Morebits.wikitext.Page#commentOutImage|Morebits.wikitext.Page.commentOutImage}.
*
* @memberof Morebits
* @class
* @param {string} string - Qoraalka hore ee la socodsiinayo.
* @example var u = new Morebits.Unbinder('Hello world <!-- world --> world');
* u.unbind('<!--', '-->'); // qoraalka ku dhex jira faallooyinka wuu ahaanayaa sidii hore
* u.content = u.content.replace(/world/g, 'earth');
* u.rebind(); // waxay bixisaa 'Hello earth <!-- world --> earth'
*/
Morebits.Unbinder = function Unbinder(string) {
if (typeof string !== 'string') {
throw new Error('ma aha xadhig qoraal ah');
}
/** Qoraalka la socodsiinayo. */
this.content = string;
this.counter = 0;
this.history = {};
this.prefix = '%UNIQ::' + Math.random() + '::';
this.postfix = '::UNIQ%';
};
Morebits.Unbinder.prototype = {
/**
* Qari gobolka ay ku wareegsan yihiin `prefix` iyo `postfix` laga bilaabo
5 socodsiinta xargaha. `prefix` iyo `postfix` waxaa lagu isticmaali doonaa
* RegExp, markaa shayada u baahan in laga baxsado waa inay isticmaalaan `\\`.
*
* @param {string} prefix
* @param {string} postfix
* @throws {Error} Haddii ama `prefix` ama `postfix` la waayo.
*/
unbind: function UnbinderUnbind(prefix, postfix) {
if (!prefix || !postfix) {
throw new Error('Labada prefix iyo postfix waa inay lahaadaan qiime');
}
const re = new RegExp(prefix + '([\\s\\S]*?)' + postfix, 'g');
this.content = this.content.replace(re, Morebits.Unbinder.getCallback(this));
},
/**
* Soo celi qaybta qarsoon ee xadhigga `content`.
*
* @return {string} Natiijada la socodsiiyay.
*/
rebind: function UnbinderRebind() {
let content = this.content;
content.self = this;
for (const current in this.history) {
if (Object.prototype.hasOwnProperty.call(this.history, current)) {
content = content.replace(current, this.history[current]);
}
}
return content;
},
prefix: null, // %UNIQ::0.5955981644938324::
postfix: null, // ::UNIQ%
content: null, // string
counter: null, // 0++
history: null // {}
};
/** @memberof Morebits.Unbinder */
Morebits.Unbinder.getCallback = function UnbinderGetCallback(self) {
return function UnbinderCallback(match) {
const current = self.prefix + self.counter + self.postfix;
self.history[current] = match;
++self.counter;
return current;
};
};
/* **************** Morebits.Date **************** */
/**
* Abuur shay taariikh ah oo leh awoodaha socodsiinta ee la xoojiyay, sida
* {@link https://momentjs.com/|moment.js}. Qaabka waqti-sumcadda MediaWiki waa mid la aqbali karo,
* marka lagu daro wax kasta oo JS Date() uu aqbalo.
*
* @memberof Morebits
* @class
*/
Morebits.Date = class extends Date {
constructor(...args) {
// Hubi qaababka MediaWiki
// Waa inuu noqdaa kan koowaad maadaama firefox uu si khaldan u aqbalayo qaabka waqti-sumcadda,
// oo aan lahayn aag waqti (Sidoo kale eeg: #921, #936, #1174, #1187), iyo
// xadhigga 14-ka nambar ah waxaa loo tarjumi doonaa si ka duwan.
if (args.length === 1) {
const param = args[0];
if (/^\d{14}$/.test(param)) {
// YYYYMMDDHHmmss
const digitMatch = /(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/.exec(param);
if (digitMatch) {
// ..... year ... month .. date ... hour .... minute ..... second
super(Date.UTC(digitMatch[1], digitMatch[2] - 1, digitMatch[3], digitMatch[4], digitMatch[5], digitMatch[6]));
} else {
super(...args);
}
} else if (typeof param === 'string') {
// Waqti-sumcadda saxiixa Wikitext
const dateParts = Morebits.l10n.signatureTimestampFormat(param);
if (dateParts) {
super(Date.UTC(...dateParts));
} else {
super(...args);
}
} else {
super(...args);
}
} else {
super(...args);
}
if (!this.isValid()) {
mw.log.warn('Billaabidda Morebits.Date ee khaldan:', args);
}
}
/** @return {boolean} */
isValid() {
return !isNaN(this.getTime());
}
/**
* @param {(Date|Morebits.Date)} date
* @return {boolean}
*/
isBefore(date) {
return this.getTime() < date.getTime();
}
/**
* @param {(Date|Morebits.Date)} date
* @return {boolean}
*/
isAfter(date) {
return this.getTime() > date.getTime();
}
/** @return {string} */
getUTCMonthName() {
return Morebits.Date.localeData.months[this.getUTCMonth()];
}
/** @return {string} */
getUTCMonthNameAbbrev() {
return Morebits.Date.localeData.monthsShort[this.getUTCMonth()];
}
/** @return {string} */
getMonthName() {
return Morebits.Date.localeData.months[this.getMonth()];
}
/** @return {string} */
getMonthNameAbbrev() {
return Morebits.Date.localeData.monthsShort[this.getMonth()];
}
/** @return {string} */
getUTCDayName() {
return Morebits.Date.localeData.days[this.getUTCDay()];
}
/** @return {string} */
getUTCDayNameAbbrev() {
return Morebits.Date.localeData.daysShort[this.getUTCDay()];
}
/** @return {string} */
getDayName() {
return Morebits.Date.localeData.days[this.getDay()];
}
/** @return {string} */
getDayNameAbbrev() {
return Morebits.Date.localeData.daysShort[this.getDay()];
}
/**
* Ku dar tiro daqiiqado ah, saacado, maalmo, toddobaadyo, bilo, ama sano taariikhda.
5 Tan waxaa lagu sameeyaa meesha gudaheeda. Shayga taariikhda ee la beddelay ayaa sidoo kale la soo celiyaa, taas oo oggolaanaysa silsiladaha (chaining).
*
* @param {number} number - Waa inuu noqdaa tiro dhammaystiran.
* @param {string} unit
* @throws {Error} Haddii cutub aan la aqbali karin ama aan la taageerin la bixiyo.
* @return {Morebits.Date}
*/
add(number, unit) {
let num = parseInt(number, 10); // caadiye
if (isNaN(num)) {
throw new Error('Tiro khaldan "' + number + '" ayaa la bixiyay.');
}
unit = unit.toLowerCase(); // caadiye
const unitMap = Morebits.Date.unitMap;
let unitNorm = unitMap[unit] || unitMap[unit + 's']; // si labada qaab ee keli iyo wadareed labaduba u shaqeeyaan
if (unitNorm) {
// Ma jiraan shaqooyin toddobaad oo dhisフィー (built-in) ah, markaa halkii laga dhisi lahaa getWeek/setWeek ee ISO, kaliya dhufo
// Malaha looma isticmaali karo isbeddellada Julian->Gregorian, iwm.
if (unitNorm === 'Week') {
unitNorm = 'Date';
num *= 7;
}
this['set' + unitNorm](this['get' + unitNorm]() + num);
return this;
}
throw new Error('Cutub khaldan "' + unit + '": Kaliya ' + Object.keys(unitMap).join(', ') + ' ayaa la oggol yahay.');
}
/**
* Ka jar tiro daqiiqado ah, saacado, maalmo, toddobaadyo, bilo, ama sano taariikhda.
* Tan waxaa lagu sameeyaa meesha gudaheeda. Shayga taariikhda ee la beddelay ayaa sidoo kale la soo celiyaa, taas oo oggolaanaysa silsiladaha.
*
5 @param {number} number - Waa inuu noqdaa tiro dhammaystiran.
* @param {string} unit
* @throws {Error} Haddii cutub aan la aqbali karin ama aan la taageerin la bixiyo.
* @return {Morebits.Date}
*/
subtract(number, unit) {
return this.add(-number, unit);
}
/**
* Qaabee taariikhda oo ka dhig xadhig qoraal ah iyadoo la raacayo xadhigga qaabka la bixiyay.
* Syntax-ka beddelka waa qayb ka mid ah kan ku jira moment.js:
*
* | Syntax | Output |
* |--------|--------|
* | H | Saacadaha (24-saacadood) |
* | HH | Saacadaha (24-saacadood, lagu buuxiyay 2 nambar) |
* | h | Saacadaha (12-saacadood) |
* | hh | Saacadaha (12-saacadood, lagu buuxiyay 2 nambar) |
* | A | AM ama PM |
* | m | Daqiiqadaha |
* | mm | Daqiiqadaha (lagu buuxiyay 2 nambar) |
* | s | Ilbiriqsiyada |
* | ss | Ilbiriqsiyada (lagu buuxiyay 2 nambar) |
* | SSS | Cadadka millise seconds-ka, 3 nambar |
* | d | Lambarka maalinta toddobaadka (Sun=0) |
* | ddd | Magaca maalinta oo gaaban |
* | dddd | Magaca maalinta oo buuxa |
* | D | Taariikhda |
* | DD | Taariikhda (lagu buuxiyay 2 nambar) |
* | M | Lambarka bilaha (1-indexed) |
* | MM | Lambarka bilaha (1-indexed, lagu buuxiyay 2 nambar) |
* | MMM | Magaca bisha oo gaaban |
* | MMMM | Magaca bisha oo buuxa |
* | Y | Sannadka |
* | YY | Labada nambar ee ugu dambeeya sannadka (20 sanadka 2020, 42 sanadka 1942) |
* | YYYY | Sannadka (sida `Y`) |
*
* @param {string} formatstr - Qaabee taariikhda oo ka dhig xadhig, adigoo isticmaalaya
* syntax-ka beddelka. Isticmaal `[` iyo `]` si aad uga baxsatid shayada. Haddii aan la bixin,
* waxay soo celineysaa xadhigga ISO-8601 ee qaabaysan.
* @param {(string|number)} [zone=system] - `system` (aagga waqtiga ee daalacashada),
* `utc`, ama cayimi aag waqti oo ah lambarka daqiiqadaha ee qaraabada u ah UTC.
* @return {string}
*/
format(formatstr, zone) {
if (!this.isValid()) {
return 'Taariikh khaldan'; // Soo saar runta, waa ka roon tahay "NaNNaNNan NaN:NaN" ama wixii la mid ah
}
let udate = this;
// abuur shay taariikh cusub oo ka koobnaan doona taariikhda lagu muujinayo waqtiga nidaamka
if (zone === 'utc') {
udate = new Morebits.Date(this.getTime()).add(this.getTimezoneOffset(), 'minutes');
} else if (typeof zone === 'number') {
// u beddel utc, ka dibna ku dar utc offset-ka la bixiyay
udate = new Morebits.Date(this.getTime()).add(this.getTimezoneOffset() + zone, 'minutes');
}
// u beddel ISOString sida caadiga ah
if (!formatstr) {
return udate.toISOString();
}
const pad = function(num, len) {
len = len || 2; // Ilaa dhererka 00 + 1
return ('00' + num).toString().slice(0 - len);
};
const h24 = udate.getHours(), m = udate.getMinutes(), s = udate.getSeconds(), ms = udate.getMilliseconds();
const D = udate.getDate(), M = udate.getMonth() + 1, Y = udate.getFullYear();
const h12 = h24 % 12 || 12, amOrPm = h24 >= 12 ? 'PM' : 'AM';
const replacementMap = {
HH: pad(h24), H: h24, hh: pad(h12), h: h12, A: amOrPm,
mm: pad(m), m: m,
ss: pad(s), s: s,
SSS: pad(ms, 3),
dddd: udate.getDayName(), ddd: udate.getDayNameAbbrev(), d: udate.getDay(),
DD: pad(D), D: D,
MMMM: udate.getMonthName(), MMM: udate.getMonthNameAbbrev(), MM: pad(M), M: M,
YYYY: Y, YY: pad(Y % 100), Y: Y
};
const unbinder = new Morebits.Unbinder(formatstr); // ka baxso waxyaabaha u dhexeeya [...]
unbinder.unbind('\\[', '\\]');
unbinder.content = unbinder.content.replace(
/* Qoraallada Regex:
* d(d{2,3})? waxay waafajisaa si sax ah 1, 3 ama 4 dhacdo oo ah 'd' ('dd' waxaa loola dhaqmaa sida laba jeer oo la waafajiyay 'd')
* Y{1,2}(Y{2})? waxay waafajisaa si sax ah 1, 2 ama 4 dhacdo oo ah 'Y'
*/
/H{1,2}|h{1,2}|m{1,2}|s{1,2}|SSS|d(d{2,3})?|D{1,2}|M{1,4}|Y{1,2}(Y{2})?|A/g,
(match) => replacementMap[match]
);
return unbinder.rebind().replace(/\[(.*?)\]/g, '$1');
}
/**
* Waxay bixisaa xadhig waqti qaraabo ah oo akhriska u sahlan sida "Shalay saacaddu markay ahayd 6:43 PM" ama "Khamiintii la soo dhaafay saacaddu markay ahayd 11:45 AM".
* Sida `calendar` oo ku jirta moment.js, laakiin leh taageerada aagga waqtiga.
*
* @param {(string|number)} [zone=system] - 'system' (aagga waqtiga ee daalacashada),
* 'utc' (ee UTC), ama cayimi aag waqti oo ah lambarka daqiiqadaha ee ka dambeeya UTC.
* @return {string}
*/
calendar(zone) {
// Ebar ka dhig saacadaha, daqiiqadaha, ilbiriqsiyada iyo millise seconds-ka - adigoo haynaya taariikhda keliya;
// hel farqiga. Xusuusnow in setHours() ay soo celineyso waxa la mid ah getTime().
const dateDiff = (new Date().setHours(0, 0, 0, 0) -
new Date(this).setHours(0, 0, 0, 0)) / 8.64e7;
switch (true) {
case dateDiff === 0:
return this.format(Morebits.Date.localeData.relativeTimes.thisDay, zone);
case dateDiff === 1:
return this.format(Morebits.Date.localeData.relativeTimes.prevDay, zone);
case dateDiff > 0 && dateDiff < 7:
return this.format(Morebits.Date.localeData.relativeTimes.pastWeek, zone);
case dateDiff === -1:
return this.format(Morebits.Date.localeData.relativeTimes.nextDay, zone);
case dateDiff < 0 && dateDiff > -7:
return this.format(Morebits.Date.localeData.relativeTimes.thisWeek, zone);
default:
return this.format(Morebits.Date.localeData.relativeTimes.other, zone);
}
}
/**
* Hel regular expression oo waafajiya cinwaannada qaybaha wikitext, sida
* `==December 2019==` ama `=== Jan 2018 ===`.
*
* @return {RegExp}
*/
monthHeaderRegex() {
return new RegExp('^(==+)\\s*(?:' + this.getUTCMonthName() + '|' + this.getUTCMonthNameAbbrev() +
')\\s+' + this.getUTCFullYear() + '\\s*\\1', 'mg');
}
/**
* Waxay abuurtaa madax qayb wikitext ah oo wata bisha iyo sannadka.
*
* @param {number} [level=2] - Heerka madaxa. Gudbi 0 si aad u hesho qoraalka keliya
* oo aan lahayn calaamadaha wikitext (==).
* @return {string}
*/
monthHeader(level) {
// U qaado 2 sida caadiga ah, laakiin u oggolow 0 ama lambarrada xadhigga ah
level = parseInt(level, 10);
level = isNaN(level) ? 2 : level;
const header = '='.repeat(level);
const text = this.getUTCMonthName() + ' ' + this.getUTCFullYear();
if (header.length) { // madax wikitext ah
return header + ' ' + text + ' ' + header;
}
return text; // Qoraalka keliya
}
};
/**
* Xargaha maxalliga ah ee socodsiinta taariikhda.
*
* @memberof Morebits.Date
* @type {object.<string, string>}
* @property {string[]} months
* @property {string[]} monthsShort
* @property {string[]} days
* @property {string[]} daysShort
* @property {object.<string, string>} relativeTimes
* @private
*/
Morebits.Date.localeData = {
// magacyada fariimaha halkan waxay u dhigmaan magacyada fariimaha MediaWiki
months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September',
'October', 'November', 'December'],
monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
daysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
relativeTimes: {
thisDay: '[Today at] h:mm A',
prevDay: '[Yesterday at] h:mm A',
nextDay: '[Tomorrow at] h:mm A',
thisWeek: 'dddd [at] h:mm A',
pastWeek: '[Last] dddd [at] h:mm A',
other: 'YYYY-MM-DD'
}
};
/**
* Khariidayso cutubyada oo wata magacyada shaqooyinka getter/setter, ee hababka `add` iyo `subtract`.
*
* @memberof Morebits.Date
* @type {object.<string, string>}
* @property {string} seconds
* @property {string} minutes
* @property {string} hours
* @property {string} days
* @property {string} weeks
* @property {string} months
* @property {string} years
*/
Morebits.Date.unitMap = {
seconds: 'Seconds',
minutes: 'Minutes',
hours: 'Hours',
days: 'Date',
weeks: 'Week', // Ma aha shaqo laakiin waxaa lagu maamulaa `add` iyadoo la adeegsanayo ku dhufasho khiyaano leh
months: 'Month',
years: 'FullYear'
};
/* **************** Morebits.wiki **************** */
/**
* Shayada kala duwan ee wax ka beddelka wiki iyo helitaanka API, oo ay ku jiraan
* {@link Morebits.wiki.Api} iyo {@link Morebits.wiki.Page}.
*
* @namespace Morebits.wiki
* @memberof Morebits
*/
Morebits.wiki = {};
/* **************** Morebits.wiki.actionCompleted **************** */
/**
* @memberof Morebits.wiki
* @type {number}
*/
Morebits.wiki.numberOfActionsLeft = 0;
/**
* @memberof Morebits.wiki
* @type {number}
*/
Morebits.wiki.nbrOfCheckpointsLeft = 0;
/**
* Muuji fariin iyo/ama u wareeji bogga marka hawlaha la dhammeeyo.
*
* Wicitaan kasta oo loo sameeyo Morebits.wiki.Api.post() wuxuu keenayaa in la diro wicitaan celin ah oo aan isku midka ahayn (asynchronous callback).
* Wicitaan celin kastaa wuxuu isna samayn karaa wicitaan dheeraad ah oo loo sameeyo Morebits.wiki.Api.post() si uu u sii wado
* silsiladda socodsiinta. Dhammaadka wicitaanka celinta ugu dambeeya ee silsiladda socodsiinta, suurtagal ma aha
* in si fudud loogu noqdo wacitaankii asalka ahaa sababtoo ah ma jiro xidhmo wicitaan (call stack) oo dib ugu celinaysa
* macnaha guud ee asalka ahaa. Halkaas waxaa lagu wacaa Morebits.wiki.actionCompleted.event()
* si loo tuso natiijada isticmaalaha iyo in la sameeyo dib-u-jeedin bog oo ikhtiyaari ah.
*
* Go'aaminta goorta la wacayo Morebits.wiki.actionCompleted.event() waxaa lagu maamulaa
* iyadoo la adeegsanayo doorsoomayaasha caalamiga ah Morebits.wiki.numberOfActionsLeft iyo
* Morebits.wiki.nbrOfCheckpointsLeft. Morebits.wiki.numberOfActionsLeft waa la kordhiyaa
* bilowga wicitaan kasta oo Morebits.wiki.Api ah waana la dhimaa ka dib dhammaystirka shaqada wicitaanka celinta.
* Haddii shaqada wicitaanka celinta aysan abuurin shay cusub oo Morebits.wiki.Api ah ka hor inta aysan bixin,
5 waa tallaabada ugu dambeysa ee silsiladda socodsiinta waxaana markaas la wici doonaa Morebits.wiki.actionCompleted.event().
*
* Ikhtiyaar ahaan, wacayaashu waxay isticmaali karaan Morebits.wiki.addCheckpoint() si ay u muujiyaan in
* socodsiintu aysan dhammaan dhammaadka shaqada wicitaanka celinta ugu dambeysa. Tan waxaa loo isticmaalaa hawlaha kooxda (batch operations).
* Dhammaadka kooxda waxaa lagu calaamadiyaa iyadoo la wacayo Morebits.wiki.removeCheckpoint().
*
* @memberof Morebits.wiki
*/
Morebits.wiki.actionCompleted = function(self) {
if (--Morebits.wiki.numberOfActionsLeft <= 0 && Morebits.wiki.nbrOfCheckpointsLeft <= 0) {
Morebits.wiki.actionCompleted.event(self);
}
};
// Beddel tallaabadii la rabay
/** @memberof Morebits.wiki */
Morebits.wiki.actionCompleted.event = function() {
if (Morebits.wiki.actionCompleted.notice) {
Morebits.Status.actionCompleted(Morebits.wiki.actionCompleted.notice);
}
if (Morebits.wiki.actionCompleted.redirect) {
// haddii uusan ahayn URL, ka dhig mid noqda. Fiiro gaar ah: Tani waxay ka jabtaa maqaallada 'http://', 'ftp://', iyo kuwa la mid ah.
if (!(/^\w+:\/\//).test(Morebits.wiki.actionCompleted.redirect)) {
Morebits.wiki.actionCompleted.redirect = mw.util.getUrl(Morebits.wiki.actionCompleted.redirect);
if (Morebits.wiki.actionCompleted.followRedirect === false) {
Morebits.wiki.actionCompleted.redirect += '?redirect=no';
}
}
window.setTimeout(() => {
window.location = Morebits.wiki.actionCompleted.redirect;
}, Morebits.wiki.actionCompleted.timeOut);
}
};
/** @memberof Morebits.wiki */
Morebits.wiki.actionCompleted.timeOut = typeof window.wpActionCompletedTimeOut === 'undefined' ? 5000 : window.wpActionCompletedTimeOut;
/** @memberof Morebits.wiki */
Morebits.wiki.actionCompleted.redirect = null;
/** @memberof Morebits.wiki */
Morebits.wiki.actionCompleted.notice = null;
/** @memberof Morebits.wiki */
Morebits.wiki.addCheckpoint = function() {
++Morebits.wiki.nbrOfCheckpointsLeft;
};
/** @memberof Morebits.wiki */
Morebits.wiki.removeCheckpoint = function() {
if (--Morebits.wiki.nbrOfCheckpointsLeft <= 0 && Morebits.wiki.numberOfActionsLeft <= 0) {
Morebits.wiki.actionCompleted.event();
}
};
/* **************** Morebits.wiki.Api **************** */
/**
* Si sahlan oo lagula hadlo MediaWiki API. Waxay aqbashaa qaababka json ama xml
* (sida caadiga ah); haddii json la doorto, waxay u dejin doontaa sidii caadiga ahayd `formatversion=2`
* ilaa si kale loogu sheego. Sidoo kale, waxay xoojisaa `errorformat`-yada cusub, iyadoo u dejinaysa `html`
* haddii aan la cayimin. `uselang` waxaa lagu qasbaa luqadda nuxurka wiki-ga.
*
* Koodhka cusub, isticmaalka 3-da halbeeg ee ugu dambeeya waa in laga fogaadaa, halkaas waxaa la isticmaalaa
* {@link Morebits.wiki.Api#setStatusElement|setStatusElement()} si loo xidho shayga xaaladda (haddii loo baahdo)
* oo la isticmaalo `.then()` ama `.catch()` ballanqaadka ay soo celiso `post()`, halkii laga cayimi lahaa wicitaannada celinta `onSuccess` ama `onError`.
*
* @memberof Morebits.wiki
* @class
* @param {string} currentAction - Tallaabada hadda socota (loojahan).
* @param {Object} query - Weydiinta (loojahan).
* @param {Function} [onSuccess] - Shaqada la wacayo marka codsigu guulaysto.
* @param {Morebits.Status} [statusElement] - Shay Morebits.Status ah oo loo isticmaalo fariimaha xaaladda.
* @param {Function} [onError] - Shaqada la wacayo haddii qalad dhaco.
*/
Morebits.wiki.Api = function(currentAction, query, onSuccess, statusElement, onError) {
this.currentAction = currentAction;
this.query = query;
this.query.assert = 'user';
// Ku qasb qaababka qaladka ee cusub, adigoo doorbidaya html
if (!query.errorformat || !['wikitext', 'plaintext'].includes(query.errorformat)) {
this.query.errorformat = 'html';
}
// Si cad u isticmaal luqadda nuxurka wiki-ga si loo yareeyo jahawareerka,
// eeg #1179 wada-hadalka
this.query.uselang = 'content';
this.query.errorlang = 'uselang';
this.query.errorsuselocal = 1;
this.onSuccess = onSuccess;
this.onError = onError;
if (statusElement) {
this.setStatusElement(statusElement);
} else {
this.statelem = new Morebits.Status(currentAction);
}
// JSON waxaa loo isticmaalaa dhammaan Morebits/Twinkle, laakiin xml wuxuu ahaadaa kan caadiga ah si dib loogu waafajiyo wixii hore
if (!query.format) {
this.query.format = 'xml';
} else if (query.format === 'json' && !query.formatversion) {
this.query.formatversion = '2';
} else if (!['xml', 'json'].includes(query.format)) {
this.statelem.error('Qaabka API ee khaldan: kaliya xml iyo json ayaa la taageeraa.');
}
// Iska indhatir calaamadaha weydiinta iyo falalka inta badan aan la taageerin, waxay soo saartaa digniino
if (query.action && ['query', 'review', 'stabilize', 'watch'].includes(query.action)) {
delete query.tags;
}
};
Morebits.wiki.Api.prototype = {
currentAction: '',
onSuccess: null,
onError: null,
parent: window, // isticmaal macnaha guud ee caalamiga ah haddii uusan jirin shay waalid ah
query: null,
response: null,
responseXML: null, // isticmaal `response` halkii; waxaa loo haystaa in dib loogu waafajiyo wixii hore
statelem: null, // magacan aan caadiga ahayn waxaa loo haystaa in dib loogu waafajiyo wixii hore
statusText: null, // natiijada laga helay API, badanaa "success" ama "error"
errorCode: null, // lambarka qaladka ee qoraalka gaaban, haddii uu jiro, sida ku cad MediaWiki API
errorText: null, // sharaxaadda qaladka oo buuxda, haddii ay jirto,
badtokenRetry: false, // u deji true haddii tani ay tahay isku day la sameeyay qaladka badtoken ka dib
/**
* La soco shayga waalidka ee wicitaannada celinta.
*
* @param {*} parent
*/
setParent: function(parent) {
this.parent = parent;
},
/** @param {Morebits.Status} statusElement */
setStatusElement: function(statusElement) {
this.statelem = statusElement;
this.statelem.status(this.currentAction);
},
/**
* Fuliy codsiga.
*
* @param {Object} callerAjaxParameters - Ha cayimin halbeeg ilaa aad si dhab ah u
* rabto inaad siiso jQuery halbeegyo dheeraad ah.
* @return {jQuery.Promise} - Shay ballanqaad jQuery ah oo lagu xaliyay ama lagu diiday shayga api.
*/
post: function(callerAjaxParameters) {
++Morebits.wiki.numberOfActionsLeft;
const queryString = $.map(this.query, (val, i) => {
if (Array.isArray(val)) {
return encodeURIComponent(i) + '=' + val.map(encodeURIComponent).join('|');
} else if (val !== undefined) {
return encodeURIComponent(i) + '=' + encodeURIComponent(val);
}
}).join('&').replace(/^(.*?)(\btoken=[^&]*)&(.*)/, '$1$3&$2');
// calaamadda sumcadda (token) waa inay noqotaa shayga ugu dambeeya ee silsiladda weydiinta (bug TW-B-0013)
const headers = {
'Api-User-Agent': morebitsWikiApiUserAgent
};
if (this.query.action === 'parse') {
// Sida uu qabo https://www.mediawiki.org/wiki/API:Etiquette
headers['Promise-Non-Write-API-Action'] = 'true';
}
const ajaxparams = $.extend({}, {
context: this,
type: this.query.action === 'query' ? 'GET' : 'POST',
url: mw.util.wikiScript('api'),
data: queryString,
dataType: this.query.format,
headers
}, callerAjaxParameters);
return $.ajax(ajaxparams).then(
function onAPIsuccess(response, statusText) {
this.statusText = statusText;
this.response = this.responseXML = response;
// Ku koob calaamadda qaladka koowaad
if (this.query.format === 'json') {
this.errorCode = response.errors && response.errors[0].code;
if (this.query.errorformat === 'html') {
this.errorText = response.errors && response.errors[0].html;
} else if (this.query.errorformat === 'wikitext' || this.query.errorformat === 'plaintext') {
this.errorText = response.errors && response.errors[0].text;
}
} else {
this.errorCode = $(response).find('errors error').eq(0).attr('code');
// Ku filan errorformats-ka html, wikitext, ama plaintext
this.errorText = $(response).find('errors error').eq(0).text();
}
if (typeof this.errorCode === 'string') {
// API-du ma aysan jeclaan wixii aan u sheegnay, tusaale ahaan, sumcad wax ka beddel oo xun ama qalad abuurista bog
return this.returnError(callerAjaxParameters);
}
// wac wicitaanka celinta guusha haddii mid la bixiyay
if (this.onSuccess) {
// u deji macnaha celinta this.parent koodhka cusub oo sii shayga API
// halkaas oo ah doodda koowaad ee wicitaanka celinta (koodhka dhaxalka ah)
this.onSuccess.call(this.parent, this);
} else {
this.statelem.info('la dhammeeyay');
}
Morebits.wiki.actionCompleted();
return $.Deferred().resolveWith(this.parent, [this]);
},
// kaliya shabakadda iyo khaladaadka server-ka ayaa gaara halkan - cabashooyinka API-ga laftiisa waxaa lagu qabtaa success()
function onAPIfailure(jqXHR, statusText, errorThrown) {
this.statusText = statusText;
this.errorThrown = errorThrown; // badanaa aan la cayimin
this.errorText = statusText + ' "' + jqXHR.statusText + '" ayaa dhacay intii lala xiriirnayey API-ga.';
return this.returnError();
}
);
},
returnError: function(callerAjaxParameters) {
if (this.errorCode === 'badtoken' && !this.badtokenRetry) {
this.statelem.warn('Sumcad khaldan. Waxaan helaynaa sumcad cusub oo dib ayaanu u daynaynaa...');
this.badtokenRetry = true;
// Hel sumcad CSRF cusub oo dib u day. Haddii tallaabada asalka ah ay u baahan tahay nooc kale
// oo tallaabo ah marka loo eego CSRF, waxaan samaynaynaa hal dib-u-dayasho oo aan micne lahayn ka hor inta aynaan ka bixin
return Morebits.wiki.Api.getToken().then((token) => {
this.query.token = token;
return this.post(callerAjaxParameters);
});
}
this.statelem.error(this.errorText + ' (' + this.errorCode + ')');
// wac wicitaanka celinta guuldarrada haddii mid la bixiyay
if (this.onError) {
// u deji macnaha celinta this.parent koodhka cusub oo sii shayga API
// halkaas oo ah doodda koowaad ee wicitaanka celinta koodhka dhaxalka ah
this.onError.call(this.parent, this);
}
// ha dhammaystirin tallaabada si uu qaladku u sii ahaado mid muuqda
return $.Deferred().rejectWith(this.parent, [this]);
},
getStatusElement: function() {
return this.statelem;
},
getErrorCode: function() {
return this.errorCode;
},
getErrorText: function() {
return this.errorText;
},
getXML: function() { // waxaa loo haystaa in dib loogu waafajiyo wixii hore, isticmaal getResponse() halkaas
return this.responseXML;
},
getResponse: function() {
return this.response;
}
};
/**
* Soo qaado wikitext bog ka mid ah. Kaydinta waxaa la oggol yahay muddo 1 maalin ah.
*
* @param {string} title - Cinwaanka bogga
* @return {Promise<string|null>} Waxay soo celineysaa nuxurka bogga, ama null haddii uusan boggu jirin.
*/
Morebits.wiki.getCachedPage = function(title) {
return new mw.Api({ userAgent: morebitsWikiApiUserAgent }).get({
action: 'query',
prop: 'revisions',
titles: title,
rvprop: 'content',
rvslots: '*',
format: 'json',
formatversion: '2',
smaxage: '86400', // kaydi 1 maalin
maxage: '86400', // kaydi 1 maalin
uselang: 'content'
}).then((data) => {
const page = data.query.pages[0];
if (page.missing) {
return null;
}
return page.revisions[0].slots.main.content;
});
};
/**
* Soo qaado JSON bog ka mid ah. Kaydinta waxaa la oggol yahay muddo 1 maalin ah.
*
* @param {string} title - Cinwaanka bogga
* @return {Promise<string>}
*/
Morebits.wiki.getCachedJson = function(title) {
return Morebits.wiki.getCachedPage(title).then((wikitext) => JSON.parse(wikitext));
};
var morebitsWikiApiUserAgent = 'morebits.js ([[w:WT:TW]])';
/**
* Deji madaxa wakiilka isticmaalaha gaarka ah, kaas oo loo isticmaalo diiwaangelinta dhinaca server-ka.
* Xusuusnow in samaynta tani ay dejin doonto wakiilka isticmaalaha ee habsocod kasta
5 ee `Morebits.wiki.Api` ee la fuliyo kadib.
*
* @see {@link https://lists.wikimedia.org/pipermail/mediawiki-api-announce/2014-November/000075.html}
* ogeysiiskii asalka ahaa.
*
* @memberof Morebits.wiki.Api
* @param {string} [ua=morebits.js ([[w:WT:TW]])] - Wakiilka isticmaalaha. Qiimaha
* caadiga ah ee `morebits.js ([[w:WT:TW]])` waxaa lagu dari doonaa wixii la bixiyo
* qiime ah.
*/
Morebits.wiki.Api.setApiUserAgent = function(ua) {
morebitsWikiApiUserAgent = (ua ? ua + ' ' : '') + 'morebits.js ([[w:WT:TW]])';
};
/**
* Hel sumcad CSRF cusub marka lala kulmo khaladaadka sumcadda.
*
* @memberof Morebits.wiki.Api
* @return {string} Sumcadda CSRF ee MediaWiki.
*/
Morebits.wiki.Api.getToken = function() {
const tokenApi = new Morebits.wiki.Api('Helitaanka sumcadda', {
action: 'query',
meta: 'tokens',
type: 'csrf',
format: 'json'
});
return tokenApi.post().then((apiobj) => apiobj.response.query.tokens.csrftoken);
};
/* **************** Morebits.wiki.Page **************** */
/**
* Isticmaal MediaWiki API si aad u soo rarto bog oo aad ikhtiyaar ahaan uga beddesho, u guurto, iwm.
*
* Wacayaashu ma oggola inay si toos ah u galaan sifooyinka fasalkan!
* Gelitaanka dhammaan sifooyinka waa iyada oo la marayo habka get___() ama set___() ee ku habboon.
*
* Wacayaashu waa inay dejiyaan {@link Morebits.wiki.actionCompleted.notice} iyo {@link Morebits.wiki.actionCompleted.redirect}
* ka hor wicitaanka koowaad ee {@link Morebits.wiki.Page.load()}.
*
* Shaqo kasta oo ka mid ah shaqooyinka wicitaanka celinta waxay qaadataa hal halbeeg, kaas oo ah
* tixraac ku socda shayga Morebits.wiki.Page ee diiwaangeliyey wicitaanka celinta.
* Shaqooyinka wicitaanka celinta waxay ku wici karaan hab kasta oo Morebits.wiki.Page prototype ah iyagoo adeegsanaya tixraacan.
*
*
* Silsiladda wicitaanka ee hawlaha caadiga ah (wicitaannada celinta isticmaalaha ee ikhtiyaariga ah ee ugu dambeeya lama tuso):
*
* - Wax ka beddel nuxurka hadda ee bogga (ma jiro khilaaf wax ka beddel):
* `.load(userTextEditCallback) -> ctx.loadApi.post() ->
* ctx.loadApi.post.success() -> ctx.fnLoadSuccess() -> userTextEditCallback() ->
* .save() -> ctx.saveApi.post() -> ctx.loadApi.post.success() -> ctx.fnSaveSuccess()`
*
* - Wax ka beddel nuxurka hadda ee bogga (oo leh khilaaf wax ka beddel):
* `.load(userTextEditCallback) -> ctx.loadApi.post() ->
* ctx.loadApi.post.success() -> ctx.fnLoadSuccess() -> userTextEditCallback() ->
* .save() -> ctx.saveApi.post() -> ctx.loadApi.post.success() ->
* ctx.fnSaveError() -> ctx.loadApi.post() -> ctx.loadApi.post.success() ->
* ctx.fnLoadSuccess() -> userTextEditCallback() -> .save() ->
* ctx.saveApi.post() -> ctx.loadApi.post.success() -> ctx.fnSaveSuccess()`
*
* - Ku dar bog (la mid ah prepend iyo newSection):
* `.append() -> ctx.loadApi.post() -> ctx.loadApi.post.success() ->
* ctx.fnLoadSuccess() -> ctx.fnAutoSave() -> .save() -> ctx.saveApi.post() ->
* ctx.loadApi.post.success() -> ctx.fnSaveSuccess()`
*
* Fiiro gaar ah:
* 1. Dhammaan shaqooyinka ka dambeeya Morebits.wiki.Api.post() waxaa laga fuliyaa si aan isku mid ahayn maktabadda jQuery AJAX.
* 2. Silsiladda append/prepend/newSection waxay noqon kartaa mid aad u gaaban,
* laakiin waxay u baahan doontaa nuqulayn weyn oo koodhka ah iyada oo faa'iido yar laga helayo.
*
* @memberof Morebits.wiki
* @class
* @param {string} pageName - Magaca bogga, oo ay ka horreeyaan magaca bannaan (haddii uu jiro).
* Bogga hadda la joogo, isticmaal `mw.config.get('wgPageName')`.
* @param {string|Morebits.Status} [status] - Xadhig qoraal ah oo sharxaya tallaabada la qaadayo,
* ama shay Morebits.Status ah
*/
Morebits.wiki.Page = function(pageName, status) {
if (!status) {
status = 'Furitaanka bogga "' + pageName + '"';
}
/**
* Doorsoomayaasha macnaha guud ee gaarka ah (Private).
*
* Macnaha guud ma muuqdo bannaanka, sidaas darteed dhammaan xogta halkan ku jirta
* waa in la galaa iyada oo la marayo hababka getter iyo setter.
*
* @private
*/
const ctx = {
// keydinta goobaha ee sifooyinka dadweynaha
pageName: pageName,
pageExists: false,
editSummary: null,
changeTags: null,
testActions: null, // saf haddii ay jiraan falal sax ah
callbackParameters: null,
statusElement: status instanceof Morebits.Status ? status : new Morebits.Status(status),
// - wax ka beddel
pageText: null,
editMode: 'all', // save() waxay ku beddeshaa dhammaan nuxurka bogga si caadi ah
appendText: null, // ma isticmaali karo pageText tan sababtoo ah pageText waa la rabaa in lagu raaco redirect
prependText: null, // ma isticmaali karo pageText tan sababtoo ah pageText waa la rabaa in lagu raaco redirect
newSectionText: null,
newSectionTitle: null,
createOption: null,
minorEdit: false,
botEdit: false,
pageSection: null,
maxConflictRetries: 2,
maxRetries: 2,
followRedirect: false,
followCrossNsRedirect: true,
watchlistOption: 'nochange',
watchlistExpiry: null,
discussionToolsAutoSubscribe: null,
creator: null,
timestamp: null,
// - celin
revertOldID: null,
// - guuri
moveDestination: null,
moveTalkPage: false,
moveSubpages: false,
moveSuppressRedirect: false,
// - ilaali
protectEdit: null,
protectMove: null,
protectCreate: null,
protectCascade: null,
// - tirtir
deleteTalkPage: false,
// - soo celi tirtirka
undeleteTalkPage: false,
// - raadinta abuurista
lookupNonRedirectCreator: false,
// - degsiin (FlaggedRevs)
flaggedRevs: null,
// xaaladda gudaha
pageLoaded: false,
csrfToken: null,
loadTime: null,
lastEditTime: null,
pageID: null,
contentModel: null,
revertCurID: null,
revertUser: null,
watched: false,
fullyProtected: false,
suppressProtectWarning: false,
conflictRetries: 0,
retries: 0,
// wicitaannada celinta
onLoadSuccess: null,
onLoadFailure: null,
onSaveSuccess: null,
onSaveFailure: null,
onLookupCreationSuccess: null,
onLookupCreationFailure: null,
onMoveSuccess: null,
onMoveFailure: null,
onDeleteSuccess: null,
onDeleteFailure: null,
onUndeleteSuccess: null,
onUndeleteFailure: null,
onProtectSuccess: null,
onProtectFailure: null,
onStabilizeSuccess: null,
onStabilizeFailure: null,
// shayada gudaha
loadQuery: null,
loadApi: null,
saveApi: null,
lookupCreationApi: null,
moveApi: null,
moveProcessApi: null,
patrolApi: null,
patrolProcessApi: null,
triageApi: null,
triageProcessListApi: null,
triageProcessApi: null,
deleteApi: null,
deleteProcessApi: null,
undeleteApi: null,
undeleteProcessApi: null,
protectApi: null,
protectProcessApi: null,
stabilizeApi: null,
stabilizeProcessApi: null
};
const emptyFunction = function() { };
/**
* Soo rarto qoraalka bogga.
*
* @param {Function} onSuccess - Shaqada wicitaanka celinta ee la wacayo marka raritaanku guulaysto.
* @param {Function} [onFailure] - Shaqada wicitaanka celinta ee la wacayo marka raritaanku guuldarraysto.
*/
this.load = function(onSuccess, onFailure) {
ctx.onLoadSuccess = onSuccess;
ctx.onLoadFailure = onFailure || emptyFunction;
// Waa in la awoodaa in la sameeyo wax ka dib marka bogga la rarto
if (!onSuccess) {
ctx.statusElement.error('Qaladka gudaha: ma jiro wicitaanka celinta onSuccess ee la siiyay load()!');
ctx.onLoadFailure(this);
return;
}
ctx.loadQuery = {
action: 'query',
prop: 'info|revisions',
inprop: 'watched',
intestactions: 'edit', // waa la ballaarin karaa
curtimestamp: '',
meta: 'tokens',
type: 'csrf',
titles: ctx.pageName,
format: 'json'
// uma baahna rvlimit=1 sababtoo ah uma baahnid rvstartid halkan waxaana soo laabta hal rev oo dhab ah sida caadiga ah
};
if (ctx.editMode === 'all') {
ctx.loadQuery.rvprop = 'content|timestamp'; // hel nuxurka bogga isla waqtigaas, haddii loo baahdo
} else if (ctx.editMode === 'revert') {
ctx.loadQuery.rvprop = 'timestamp';
ctx.loadQuery.rvlimit = 1;
ctx.loadQuery.rvstartid = ctx.revertOldID;
}
if (ctx.followRedirect) {
ctx.loadQuery.redirects = ''; // raac dhammaan redirect-yada
}
if (typeof ctx.pageSection === 'number') {
ctx.loadQuery.rvsection = ctx.pageSection;
}
if (Morebits.userIsSysop) {
ctx.loadQuery.inprop += '|protection';
}
ctx.loadApi = new Morebits.wiki.Api('Soo qaadashada bogga...', ctx.loadQuery, fnLoadSuccess, ctx.statusElement, ctx.onLoadFailure);
ctx.loadApi.setParent(this);
ctx.loadApi.post();
};
/**
* Kaydi qoraalka bogga ee Wikipedia.
5 Waa inuu ka horreeyaa wicitaanka guuleystay ee `load()`.
*
* Digniin: Wicitaanka `save()` wuxuu keeni karaa wicitaanno dheeraad ah oo loo sameeyo
* wicitaannada celinta `load()` ee hore si looga soo kabsado khilaafaadka wax ka beddelka! Xaaladdan,
* wacayaashu waa inay sameeyaan wax ka beddelka isla'eg ee pageText cusub oo ay
* dib u wacaan `save()`. Dhaqankan waxaa lagu joojin karaa `setMaxConflictRetries(0)`.
*
* @param {Function} [onSuccess] - Shaqada wicitaanka celinta ee la wacayo marka kaydintu guulaysto.
* @param {Function} [onFailure] - Shaqada wicitaanka celinta ee la wacayo marka kaydintu guuldarraysto.
*/
this.save = function(onSuccess, onFailure) {
ctx.onSaveSuccess = onSuccess;
ctx.onSaveFailure = onFailure || emptyFunction;
// ma heleynaa sumcadda wax ka beddelka ee mw.user.tokens?
const canUseMwUserToken = fnCanUseMwUserToken('edit');
if (!ctx.pageLoaded && !canUseMwUserToken) {
ctx.statusElement.error('Qaladka gudaha: isku day in la kaydiyo bog aan la soo rarin!');
ctx.onSaveFailure(this);
return;
}
if (!ctx.editSummary) {
// habka qaybta cusub waxay oggolaanaysaa (weliba dhiirrigelinaysaa) isticmaalka
// cinwaanka sida kooban ee wax ka beddelka, laakiin weydiinta waxay u baahan tahay
// editSummary inuusan ahayn mid la cayimin ama '', ma aha null
if (ctx.editMode === 'new' && ctx.newSectionTitle) {
ctx.editSummary = '';
} else {
ctx.statusElement.error('Qaladka gudaha: kooban wax ka beddel lama dejin ka hor kaydinta!');
ctx.onSaveFailure(this);
return;
}
}
// waa inay dhicin haddii canUseMwUserToken === true
if (ctx.fullyProtected && !ctx.suppressProtectWarning &&
!confirm(
ctx.fullyProtected === 'infinity' ?
'Waxaad ku dhowdahay inaad wax ka beddesho bogga si buuxda loo ilaaliyo ee "' + ctx.pageName + '" (oo la ilaaliyay weligiis). \n\nRiix OK si aad u sii wadato wax ka beddelka, ama Cancel si aad uga booddo wax ka beddelkan.' :
'Waxaad ku dhowdahay inaad wax ka beddesho bogga si buuxda loo ilaaliyo ee "' + ctx.pageName +
'" (ilaalintu waxay dhacaysaa ' + new Morebits.Date(ctx.fullyProtected).calendar('utc') + ' (UTC)). \n\nRiix OK si aad u sii wadato wax ka beddelka, ama Cancel si aad uga booddo wax ka beddelkan.'
)
) {
ctx.statusElement.error('Wax ka beddelka bogga si buuxda loo ilaaliyo waa la joojiyay.');
ctx.onSaveFailure(this);
return;
}
ctx.retries = 0;
const query = {
action: 'edit',
title: ctx.pageName,
summary: ctx.editSummary,
token: canUseMwUserToken ? mw.user.tokens.get('csrfToken') : ctx.csrfToken,
watchlist: ctx.watchlistOption,
format: 'json'
};
if (ctx.changeTags) {
query.tags = ctx.changeTags;
}
if (fnApplyWatchlistExpiry()) {
query.watchlistexpiry = ctx.watchlistExpiry;
}
if (typeof ctx.pageSection === 'number') {
query.section = ctx.pageSection;
}
// Deji sifo yar oo wax ka beddel ah. Haddii halbeegyadani ay joogaan qiimo kasta, waxaa loo tarjumaa true
if (ctx.minorEdit) {
query.minor = true;
} else {
query.notminor = true; // ku qasb qaabeynta Twinkle inay ka gudubto dejinta doorbididda isticmaalaha ee "dhammaan wax ka beddelku waa kuwo yar"
}
// Deji sifo wax ka beddel bot. Haddii halbeeggani joogo qiimo kasta, waxaa loo tarjumaa true
if (ctx.botEdit) {
query.bot = true;
}
if (ctx.discussionToolsAutoSubscribe !== null) {
query.discussiontoolsautosubscribe = ctx.discussionToolsAutoSubscribe ? 'yes' : 'no';
}
switch (ctx.editMode) {
case 'append':
if (ctx.appendText === null) {
ctx.statusElement.error('Qaladka gudaha: qoraalka lagu darayo lama dejin ka hor kaydinta!');
ctx.onSaveFailure(this);
return;
}
query.appendtext = ctx.appendText; // isticmaal habka aad ugu darto nuxurka bogga hadda
break;
case 'prepend':
if (ctx.prependText === null) {
ctx.statusElement.error('Qaladka gudaha: qoraalka hore loo gelinayo lama dejin ka hor kaydinta!');
ctx.onSaveFailure(this);
return;
}
query.prependtext = ctx.prependText; // isticmaal habka aad horay ugu geliso nuxurka bogga hadda
break;
case 'new':
if (!ctx.newSectionText) { // API ma oggola qoraal qayb cusub oo madhan
ctx.statusElement.error('Qaladka gudaha: qoraalka qaybta cusub lama dejin ka hor kaydinta!');
ctx.onSaveFailure(this);
return;
}
query.section = 'new';
query.text = ctx.newSectionText; // ku dar qayb cusub nuxurka bogga hadda
query.sectiontitle = ctx.newSectionTitle || ctx.editSummary; // waxaa sameeya API, laakiin qiimayaasha aan ahayn '' waxaa loola dhaqmayaa sida qoraal
break;
case 'revert':
query.undo = ctx.revertCurID;
query.undoafter = ctx.revertOldID;
if (ctx.lastEditTime) {
query.basetimestamp = ctx.lastEditTime; // hubi in bogga aan la beddelin tan iyo markii la soo raray
}
query.starttimestamp = ctx.loadTime; // hubi in bogga aan la tirtirin tan iyo markii la soo raray (ha dib u abuurin waxyaabo xun)
break;
default: // 'all'
query.text = ctx.pageText; // ku beddel dhammaan nuxurka bogga
if (ctx.lastEditTime) {
query.basetimestamp = ctx.lastEditTime; // hubi in bogga aan la beddelin tan iyo markii la soo raray
}
query.starttimestamp = ctx.loadTime; // hubi in bogga aan la tirtirin tan iyo markii la soo raray (ha dib u abuurin waxyaabo xun)
break;
}
if (['recreate', 'createonly', 'nocreate'].includes(ctx.createOption)) {
query[ctx.createOption] = '';
}
if (canUseMwUserToken && ctx.followRedirect) {
query.redirect = true;
}
ctx.saveApi = new Morebits.wiki.Api('Kaydinta bogga...', query, fnSaveSuccess, ctx.statusElement, fnSaveError);
ctx.saveApi.setParent(this);
ctx.saveApi.post();
};
/**
* Ku dar qoraalka lagu bixiyay setAppendText() dhammaadka bogga.
* Ma u baahna in la waco `load()` marka hore, ilaa iyo inta la isticmaalayo
* dhicitaanka liiska daawashada (watchlist expiry).
*
* @param {Function} [onSuccess] - Shaqada wicitaanka celinta ee la wacayo marka habku guulaysto.
* @param {Function} [onFailure] - Shaqada wicitaanka celinta ee la wacayo marka habku guuldarraysto.
*/
this.append = function(onSuccess, onFailure) {
ctx.editMode = 'append';
if (fnCanUseMwUserToken('edit')) {
this.save(onSuccess, onFailure);
} else {
ctx.onSaveSuccess = onSuccess;
ctx.onSaveFailure = onFailure || emptyFunction;
this.load(fnAutoSave, ctx.onSaveFailure);
}
};
/**
* Ku dar qoraalka lagu bixiyay setPrependText() billowga bogga.
* Ma u baahna in la waco `load()` marka hore, ilaa iyo inta la isticmaalayo
* dhicitaanka liiska daawashada.
*
* @param {Function} [onSuccess] - Shaqada wicitaanka celinta ee la wacayo marka habku guulaysto.
* @param {Function} [onFailure] - Shaqada wicitaanka celinta ee la wacayo marka habku guuldarraysto.
*/
this.prepend = function(onSuccess, onFailure) {
ctx.editMode = 'prepend';
if (fnCanUseMwUserToken('edit')) {
this.save(onSuccess, onFailure);
} else {
ctx.onSaveSuccess = onSuccess;
ctx.onSaveFailure = onFailure || emptyFunction;
this.load(fnAutoSave, ctx.onSaveFailure);
}
};
/**
* Abuur qayb cusub oo wata qoraalka ay bixisay setNewSectionText()
* iyo cinwaanka qaybta ee ka yimid setNewSectionTitle().
* Haddii editSummary la bixiyo, taas ayaa la isticmaali doonaa halkii laga isticmaali lahaa koobitaanka wax ka beddelka ee auto-generated "->Title (new section".
* Ma u baahna in la waco `load()` marka hore, ilaa iyo inta la isticmaalayo dhicitaanka liiska daawashada.
*
* @param {Function} [onSuccess] - Shaqada wicitaanka celinta ee la wacayo marka habku guulaysto.
* @param {Function} [onFailure] - Shaqada wicitaanka celinta ee la wacayo marka habku guuldarraysto.
*/
this.newSection = function(onSuccess, onFailure) {
ctx.editMode = 'new';
if (fnCanUseMwUserToken('edit')) {
this.save(onSuccess, onFailure);
} else {
ctx.onSaveSuccess = onSuccess;
ctx.onSaveFailure = onFailure || emptyFunction;
this.load(fnAutoSave, ctx.onSaveFailure);
}
};
/** @return {string} Magaca bogga la soo raray, oo ay ku jirto magaca bannaan */
this.getPageName = function() {
return ctx.pageName;
};
/** @return {string} Qoraalka bogga ka dib load() guuleystay */
this.getPageText = function() {
return ctx.pageText;
};
/** @param {string} pageText - Qoraalka bogga ee la cusboonaysiiyay ee la kaydin doono marka `save()` la waco */
this.setPageText = function(pageText) {
ctx.editMode = 'all';
ctx.pageText = pageText;
};
/** @param {string} appendText - Qoraal lagu dari doonaa dhammaadka bogga marka `append()` la waco */
this.setAppendText = function(appendText) {
ctx.editMode = 'append';
ctx.appendText = appendText;
};
/** @param {string} prependText - Qoraal horay loogu gelin doonaa bogga marka `prepend()` la waco */
this.setPrependText = function(prependText) {
ctx.editMode = 'prepend';
ctx.prependText = prependText;
};
/** @param {string} newSectionText - Qoraal lagu dari doonaa qayb cusub oo bogga ah marka `newSection()` la waco */
this.setNewSectionText = function(newSectionText) {
ctx.editMode = 'new';
ctx.newSectionText = newSectionText;
};
/**
* @param {string} newSectionTitle - Cinwaanka qaybta cusub ee la abuuray marka `newSection()` la waco
* Haddii la waayo, `ctx.editSummary` ayaa la isticmaali doonaa. Cilado ayaa dhici kara haddii la isticmaalo hab la beddelay (substituted template).
*/
this.setNewSectionTitle = function(newSectionTitle) {
ctx.editMode = 'new';
ctx.newSectionTitle = newSectionTitle;
};
// Hababka setter-ka ee la xiriira wax ka beddelka:
/**
* Deji koobitaanka wax ka beddelka ee la isticmaali doono marka `save()` la waco.
* Looma baahna haddii editMode uu yahay 'new' oo newSectionTitle la bixiyo.
*
* @param {string} summary
*/
this.setEditSummary = function(summary) {
ctx.editSummary = summary;
};
/**
* Deji calaamad(aha) gaarka ah ee lagu dabaqayo tallaabada API.
* Tiro ka mid ah falalka ma taageeraan tan, sida ugu caansan watch, review,
* iyo stabilize ({@link https://phabricator.wikimedia.org/T247721|T247721}).
*
* @param {string|string[]} tags - Xadhig ama saf calaamad(aha) ah.
*/
this.setChangeTags = function(tags) {
ctx.changeTags = tags;
};
/**
* @param {string} [createOption=null] - Wuxuu qaadan karaa afartan qiime ee soo socda:
* - recreate: abuur bogga haddii uusan jirin, ama ka beddel haddii uu jiro.
* - createonly: abuur bogga haddii uusan jirin, laakiin soo celi qalad haddii uu horay u jiray.
* - nocreate: ha abuurin bogga, kaliya ka beddel haddii uu horay u jiro.
* - `null`: abuur bogga haddii uusan jirin, ilaa iyo inta la tirtiray waqtigii u dhexeeyey raritaanka bogga iyo kaydinta wax ka beddelka (sida caadiga ah).
*/
this.setCreateOption = function(createOption) {
ctx.createOption = createOption;
};
/** @param {boolean} minorEdit - Deji true si aad wax ka beddelka ugu calaamadiso wax ka beddel yar (minor edit). */
this.setMinorEdit = function(minorEdit) {
ctx.minorEdit = minorEdit;
};
/** @param {boolean} botEdit - Deji true si aad wax ka beddelka ugu calaamadiso wax ka beddel bot ah */
this.setBotEdit = function(botEdit) {
ctx.botEdit = botEdit;
};
/**
* @param {number} pageSection - Tiro dhammaystiran oo cayimaysa lambarka qaybta si loo rarto ama loo kaydiyo.
* Haddii loo cayimo sida `null`, dhammaan bogga ayaa la soo qaadan doonaa.
*/
this.setPageSection = function(pageSection) {
ctx.pageSection = pageSection;
};
/**
* @param {number} maxConflictRetries - Tirada dib-u-dayashada ee khaladaadka kaydinta ee ku lug leh khilaaf wax ka beddel ama
* luminta sumcadda. Sida caadiga ah: 2.
*/
this.setMaxConflictRetries = function(maxConflictRetries) {
ctx.maxConflictRetries = maxConflictRetries;
};
/**
* @param {number} maxRetries - Tirada dib-u-dayashada ee khaladaadka kaydinta ee aan ku lug lahayn khilaaf wax ka beddel ama
* luminta sumcadda. Sida caadiga ah: 2.
*/
this.setMaxRetries = function(maxRetries) {
ctx.maxRetries = maxRetries;
};
/**
* Deji in la daawado bogga iyo sida loo daawado, oo ay ku jirto dejinta waqtiga dhicitaanka.
*
* @param {boolean|string|Morebits.Date|Date} [watchlistOption=false] -
* Asal ahaan waa isku-dhafka fursadaha MW API iyo Twinkley ee la heli karo ka hor dhicitaanka:
* - `true`|`'yes'`|`'watch'`: bogga waxaa lagu darayaa liiska daawashada ee isticmaalaha
* marka tallaabada la waco. Waxay ku noqotaa daawasho aan xad lahayn ilaa
* `watchlistExpiry` la bixiyo.
* - `false`|`'no'`|`'nochange'`: xaaladda daawashada bogga (oo ay ku jirto dhicitaanka) lama beddeli doono.
* - `'default'`|`'preferences'`: xaaladda daawashada bogga waxaa loo dejin doonaa
* iyadoo lagu saleynayo dejinta doorbididda isticmaalaha marka tallaabada la waco.
* Waxay ku noqotaa daawasho aan xad lahayn ilaa `watchlistExpiry` la bixiyo.
* - `'unwatch'`: si cad u jooji daawashada bogga.
* - Kasta oo kale `string` ama `number`, ama shay `Morebits.Date` ama `Date`:
* daawashada bogga ilaa waqtiga la cayimay, iyadoo loo laabanayo
* `watchlistExpiry` haddii la bixiyo.
* @param {string|number|Morebits.Date|Date} [watchlistExpiry=infinity] -
* Xadhig taariikh-u-eg ama lambar, ama shay taariikh. Haddii uu yahay xadhig ama lambar,
* wuxuu noqon karaa qaraabo (2 toddobaad) ama mid kale oo taariikh-u-eg (TUSAALE AHAAN MA AHA "baradho"):
* ISO 8601: 2038-01-09T03:14:07Z
* MediaWiki: 20380109031407
* UNIX: 2147483647
* SQL: 2038-01-09 03:14:07
* Wuxuu kaloo noqon karaa `infinity` ama mid infinity-u-eg (`infinite`, `indefinite`, iyo `never`).
* Eeg {@link https://phabricator.wikimedia.org/source/mediawiki-libs-Timestamp/browse/master/src/ConvertibleTimestamp.php;4e53b859a9580c55958078f46dd4f3a44d0fcaa0$57-109?as=source&blame=off}
*/
this.setWatchlist = function(watchlistOption, watchlistExpiry) {
if (watchlistOption instanceof Morebits.Date || watchlistOption instanceof Date) {
watchlistOption = watchlistOption.toISOString();
}
if (typeof watchlistExpiry === 'undefined') {
watchlistExpiry = 'infinity';
} else if (watchlistExpiry instanceof Morebits.Date || watchlistExpiry instanceof Date) {
watchlistExpiry = watchlistExpiry.toISOString();
}
switch (watchlistOption) {
case 'nochange':
case 'no':
case false:
case undefined:
ctx.watchlistOption = 'nochange';
// MW API waxay oggolaanaysaa in la beddelo dhicitaanka iyadoo aan la beddelin (maadaama "nochange" ay tilmaamayso xaaladda binary),
// laakiin adigoo ilaalinaya tan oo ah null waxay si caadi ah ugu laaban doontaa wixii dhicitaan ah ee jira, hubi inaysan jirin wax "isbeddel ah."
ctx
t4ik860t0els77iigqp1215icmfkyvs
MediaWiki:Gadget-morebits
8
53722
310916
2026-10-25T12:59:38Z
Isma4l
41797
/* */
310916
wikitext
text/x-wiki
Maktabad leh astaamo badan oo faa'iido leh, taas oo loo adeegsado [[:en:Wikipedia:Twinkle|Wikipedia:Twinkle]] balse la heli karo qalabka kale ama qoraallada kale. Ma aha inaad tan ka arki karto Special:Preferences.
4i7ym18xnii5advb7vk22lu2x95r4t1
MediaWiki:Gadget-morebits.css
8
53723
310917
2026-10-25T13:00:18Z
Isma4l
41797
Abuuray
310917
css
text/css
/**
* morebits.css
* ===========
* Styles to support morebits.js.
*
* The morebits library is maintained by the maintainers of Twinkle.
* For queries, suggestions, help, etc., head to [[WT:TW]].
* The latest development source is available at [https://github.com/wikimedia-gadgets/twinkle/blob/master/morebits.css].
*/
/* Define CSS variables */
html {
--morebits-color-status-status: #4682b4;
--morebits-color-legend: #31628f;
--morebits-color-tooltip: #0000cd;
--morebits-color-info: #228b22;
--morebits-color-warning: #ff4500;
--morebits-color-titlebar-links: #3062ad;
--morebits-bgcolor-dialog: #f0f8ff;
--morebits-bgcolor-titlebar: #bccadf;
}
@media screen {
html.skin-theme-clientpref-night {
--morebits-color-status-status: #a6c4de;
--morebits-color-legend: #6b9dcc;
--morebits-color-tooltip: #7a7aff;
--morebits-color-info: #6bdb6b;
--morebits-color-warning: #ff6d38;
--morebits-color-titlebar-links: #8baddf;
--morebits-bgcolor-dialog: #141c26;
--morebits-bgcolor-titlebar: #1c2a52;
}
}
/* stylelint-disable-next-line plugin/no-unsupported-browser-features */
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os {
--morebits-color-status-status: #a6c4de;
--morebits-color-legend: #6b9dcc;
--morebits-color-tooltip: #7a7aff;
--morebits-color-info: #6bdb6b;
--morebits-color-warning: #ff6d38;
--morebits-color-titlebar-links: #8baddf;
--morebits-bgcolor-dialog: #141c26;
--morebits-bgcolor-titlebar: #1c2a52;
}
}
/* Morebits.Status */
.morebits_status_status {
color: var(--morebits-color-status-status);
}
.morebits_status_info {
color: var(--morebits-color-info);
}
.morebits_status_warn {
color: var(--morebits-color-warning);
}
.morebits_status_error {
color: var(--morebits-color-warning);
font-weight: bold;
}
/* Morebits.QuickForm */
form.quickform {
box-sizing: border-box;
width: 98%;
height: 100%;
min-height: 0;
margin: 0 auto;
padding: 0.5em;
color: var(--color-base, #202122);
}
/* use flex layout for quickform to make the scrollbox resize with
the dialog, and to keep it from obscuring elements below it */
form.quickform.has-scrollbox {
display: flex;
flex-direction: column;
}
form.quickform * {
font-family: sans-serif;
}
form.quickform fieldset {
margin: 0.4em 0 1em;
}
form.quickform legend {
color: var(--morebits-color-legend);
font-weight: bold;
}
form.quickform input[type=text],
form.quickform select {
min-width: 15em;
font-size: 110%;
}
form.quickform select {
/* stylelint-disable-next-line color-named */ /* FIXME */
border: 1px solid gray;
margin-left: 0.2em;
}
form.quickform input[type=checkbox],
form.quickform input[type=radio] {
height: 13px;
margin-top: 2px;
margin-right: 2px;
margin-bottom: 2px;
padding: 0;
width: 13px;
vertical-align: top;
}
form.quickform div {
/* stylelint-disable-next-line declaration-property-unit-disallowed-list */ /* FIXME */
line-height: 18px;
}
form.quickform h5 {
margin: 0.5em 0 0;
padding: 0.3em 0.2em 0.2em;
font-size: 108%; /* 100% is 12px => 108% is 12.96px */
}
/* only give the top border to headers with something above them */
form.quickform div + h5,
form.quickform h5 + h5,
form.quickform div + div > h5 {
border-top: 1px solid #88a;
}
form.quickform textarea {
width: 100%;
height: 4em;
font-size: 150%;
}
form.quickform input:disabled + label {
color: var(--color-disabled, #72777d);
}
form.quickform span.quickformDescription {
font-style: italic;
}
form.quickform span.quickformDescription code {
font-style: normal;
font-family: monospace;
}
form.quickform .quickformSubgroup {
margin-bottom: 0.5em;
margin-left: 3em;
}
/* The tooltip button and the content itself */
form.quickform .morebits-tooltipButton {
color: var(--morebits-color-tooltip);
font-weight: bold;
cursor: help;
padding: 0.3em;
}
.morebits-ui-tooltip {
position: absolute;
z-index: 1005;
padding: 4px 6px 4px 6px;
max-width: 300px;
transition: opacity 600ms ease;
opacity: 0;
visibility: hidden;
pointer-events: none;
/* stylelint-disable-next-line declaration-property-unit-disallowed-list */ /* FIXME */
font-size: 13px;
background: var(--background-color-neutral-subtle, #f8f9fa);
border: 2px solid var(--border-color-base, #a2ab91);
box-shadow: 0 0 5px #a2ab91;
}
.morebits-ui-tooltip.visible {
opacity: 1;
visibility: visible;
}
/* Scrollbox styles, for use within Morebits.SimpleWindow */
div.morebits-scrollbox {
background: var(--background-color-base, #fff);
/* stylelint-disable-next-line color-named */ /* FIXME */
border: 1px solid gray;
margin-bottom: 0.6em;
margin-top: 0.6em;
height: auto;
flex-grow: 1;
min-height: 0;
overflow: auto;
padding: 6px 6px 0;
}
div.morebits-scrollbox > h5:first-child {
border: 0;
margin-top: 0;
padding-top: 0;
}
div.morebits-scrollbox > :last-child {
margin-bottom: 6px;
}
/* Previewbox */
div.morebits-previewbox {
border: 2px inset;
margin: 0.4em auto 0.2em;
padding: 0.2em 0.4em;
}
div.morebits-usertext {
border: 1px solid #a2a9b1;
background-color: var(--background-color-neutral-subtle, #f8f9fa);
padding: 5px;
font-size: 95%;
}
/* Morebits.SimpleWindow */
.morebits-dialog {
padding: 0.2em;
border: 1px #666 solid;
font-family: sans-serif;
background-color: var(--morebits-bgcolor-dialog);
display: flex;
flex-direction: column;
position: absolute;
overflow: hidden;
min-width: 150px;
min-height: 150px;
/* z-index will be adjusted upwards by JS if there are multiple dialogs open and a dialog gets clicked on. */
z-index: 500;
/* top, left, width, height, and max-height are set via JS. */
}
.morebits-dialog-resizer {
position: absolute;
right: -5px;
bottom: -5px;
height: 20px;
width: 20px;
cursor: se-resize;
background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2aWV3Qm94PSIwIDAgMTYgMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+Cgk8ZyBzdHJva2U9IiM3MmE3Y2UiPgoJCTxwYXRoIGQ9Im0wIDEwTDEwIDAiLz4KCQk8cGF0aCBkPSJtNCAxMEwxMCA0Ii8+CgkJPHBhdGggZD0ibTggMTBMMTAgOCIvPgoJPC9nPgo8L3N2Zz4K);
}
/* px translations in comments are w.r.t standard browser settings,
in other settings, the sizes would be scaled accordingly */
.skin-vector .morebits-dialog {
font-size: 75%; /* 100% is 16px => 75% is 12px */
}
.skin-timeless .morebits-dialog {
font-size: 79%; /* 100% is 15.2px => 79% is 12.008px */
}
.skin-monobook .morebits-dialog,
.skin-modern .morebits-dialog {
font-size: 120%; /* 100% is 10px => 120% is 12px */
}
.morebits-dialog .morebits-dialog-titlebar {
height: 1em;
min-height: 1em;
background-color: var(--morebits-bgcolor-titlebar);
font: bold 108% sans-serif; /* 100% is 12px (from above) => 108% is 12.96px */
overflow: hidden;
padding: 0.4em 0.3em 0.5em;
white-space: nowrap;
display: flex; /* needed so that align-items can be used */
align-items: center; /* to vertically center the close button */
cursor: move;
position: relative; /* so that the close button can be positioned relative to titlebar */
}
.morebits-dialog-scriptname {
font-weight: normal;
}
.morebits-dialog .morebits-dialog-close {
position: absolute;
right: 0;
background-color: transparent;
border: 0;
font-size: 1.2em;
font-weight: bold;
padding: 5px 10px;
cursor: pointer;
border-radius: 50%;
transition: background-color 0.2s, color 0.2s;
}
.morebits-dialog .morebits-dialog-close:hover {
background-color: #eee;
color: #000;
}
.morebits-dialog .morebits-dialog-close span {
margin: 0.33em;
}
.morebits-dialog .morebits-dialog-content {
padding: 0;
display: flex;
flex-direction: column;
box-sizing: border-box;
height: 100%;
flex-grow: 1;
overflow-y: auto;
min-height: 0;
}
.morebits-dialog .morebits-dialog-buttonpane {
background-color: var(--morebits-bgcolor-titlebar);
margin: auto 0 0;
padding: 0.3em 1.4em 0.5em 1.2em;
}
.morebits-dialog .morebits-dialog-buttonpane button {
margin-top: 0.2em;
}
.morebits-dialog-buttons {
font-size: 108%; /* 100% is 12px => 108% is 12.96px */
}
.morebits-dialog-footerlinks {
font-size: 97%; /* 100% is 12px (from above) => 97% is 11.64px */
float: right;
margin: 0.7em 0.4em 0 0;
}
.morebits-dialog .morebits-dialog-footerlinks a {
color: var(--morebits-color-titlebar-links);
}
.morebits-dialog-buttons[data-empty] + .morebits-dialog-footerlinks {
margin: 0.1em 0.4em -0.2em 0;
}
.morebits-dialog-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5); /* Semi-transparent black */
z-index: 700; /* Higher than morebits-dialog but lesser than morebits-dialog-modal */
}
.morebits-dialog.morebits-dialog-modal {
z-index: 701;
}
/* Override select2 silliness */
.select2-morebits,
.select2-morebits .select2-results,
.select2-morebits .select2-results__option[aria-selected=true],
.select2-morebits .select2-selection__rendered,
.select2-morebits .select2-selection--multiple,
.select2-morebits .select2-selection__choice {
background: var(--background-color-base, #fff) !important;
color: inherit !important;
}
o9jmp275nriv5rhor11wh1ba5n0wo8a
MediaWiki:Gadget-Twinkle-pagestyles.css
8
53724
310918
2026-10-25T13:01:15Z
Isma4l
41797
Abuuray
310918
css
text/css
/**
* Kani waxaa loo raran yahay sida qalab lamaanane ah (peer gadget) oo qarsoon oo Twinkle ah.
* Maxay tani u tahay qalab lamaanane ah? Sababtoo ah waxay soo bixi doontaa ka hor inta uusan boggu dhameynin sawirkiisa ugu horreeya (first paint).
* Waxay ku dartaa meel bannaan halka uu menu-ka "TW" ka galo maqaarka Vector 2010, iyadoo asal ahaan u qoondeeysa
* meel menu-ka "TW" si uusan bar-ka sarreeya u "boodboodin".
* Menu-ka "TW" laftiisa waxaa la sawiraa dib u dhac kadib, marka faylasha JS-ka ee qalabku ay dhammeeyaan rarista.
*/
.client-js > body.skin-vector:not(.ns-special) #p-cactions,
.client-js > body.skin-vector.mw-special-Block #p-cactions,
.client-js > body.skin-vector.mw-special-Contributions #p-cactions,
.client-js > body.skin-vector.mw-special-IPContributions #p-cactions,
.client-js > body.skin-vector.mw-special-DeletedContributions #p-cactions,
.client-js > body.skin-vector.mw-special-Prefixindex #p-cactions {
margin-right: 3.24em;
}
03pfb9r8ee4glkjhxs1f1z7mqp08xyo
MediaWiki:Gadget-Twinkle-pagestyles
8
53725
310919
2026-10-25T13:02:26Z
Isma4l
41797
/* */
310919
wikitext
text/x-wiki
Qalabka [[:en:Wikipedia:Twinkle|Twinkle]]
pxqy6cigkiwnjm1ylfw6g2jjafrn1mu
MediaWiki:Gadget-select2.min.css
8
53726
310920
2026-10-25T13:03:02Z
Isma4l
41797
Abuuray
310920
css
text/css
/*! Select2 4.0.12 | https://github.com/select2/select2/blob/master/LICENSE.md */
.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px;padding:1px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb}
g1469rftkzxri386o3a0m1ueea3cqkp
MediaWiki:Gadget-select2
8
53727
310921
2026-10-25T13:03:46Z
Isma4l
41797
/* */
310921
wikitext
text/x-wiki
Beddelka jQuery ee sanduuqyada xulashada; waxaa isticmaala Twinkle balse loo heli karo qalab kale ama qoraallo kale. Waxaa lagu heli karaa shatiga MIT, eeg https://select2.org/. Ma aha inaad tan ka arki karto Special:Preferences.
b1puhwlile72a3hazl77t41hou3i03s
MediaWiki:Gadget-HideCentralNotice.js
8
53728
310922
2026-10-25T13:04:53Z
Isma4l
41797
Abuuray
310922
javascript
text/javascript
/**
* Ka hortag in ogeysiisyada CentralNotice la soo raro.
*
* Qoraalkan wuxuu ku tiirsan yahay inuu awood u yeesho inuu dhageysto dhacdooyinka ay soo saarto
* biraawsarku marka uu bilaabo inuu habeeyo qoraal (script), sawir, ama iframe.
* Haddii qoraalkan la raro ka dib kan uu isku dayayo inuu ka hortago, wuxuu
* noqon doonaa mid aan waxba qabanayn.
*/
if ( document.addEventListener ) {
function blockBannerLoader (e) {
var element, src;
if (!e || !e.preventDefault) {
return;
};
element = e.target;
if (!element) {
return;
}
if (element.nodeName.toLowerCase() === 'script') {
src = String(element.src);
if (src.indexOf('Special:BannerLoader') !== -1 || src.indexOf('Special:BannerListLoader') !== -1) {
e.preventDefault();
}
}
}
// Dhageyso qoraal kasta, sawir kasta, iframe iwm. ee lagu darayo
document.addEventListener('beforeload', blockBannerLoader, true);
}
thyytbxv1o0yun7ir7csrsf03dvf71d
MediaWiki:Gadget-HideCentralNotice.css
8
53729
310923
2026-10-25T13:06:09Z
Isma4l
41797
Abuuray
310923
css
text/css
#centralNotice {
display: none !important;
}
6yybqmsqes9czpuq466face6r22cxyq
MediaWiki:Gadget-HideCentralNotice
8
53730
310924
2026-10-25T13:07:19Z
Isma4l
41797
/* */
310924
wikitext
text/x-wiki
Jooji soo bandhigidda dhammaan [[meta:CentralNotice|CentralNotices]] (Si aad u joojiso ogeysiisyada qaar oo keliya, adeegso [[Special:Preferences#mw-prefsection-centralnotice-banners|Xulashada boodhadhka ee dooqyadaada]])
o0mrck74zrw0lnvvgs5nqmvjdvmd4b4
MediaWiki:Gadget-ReferenceTooltips.js
8
53731
310925
2026-10-25T13:08:53Z
Isma4l
41797
Abuuray
310925
javascript
text/javascript
// Eeg [[mw:Reference Tooltips]]
// Isha https://en.wikipedia.org/wiki/MediaWiki:Gadget-ReferenceTooltips.js
/*eslint space-in-parens: ["error", "always"], array-bracket-spacing: ["error", "always"]*/
( function () {
// Haddii aad qoraalka ka soo rarayso wiki kale oo aad rabto inaad dejiso habayntaada, ku samee taas `window`
// hantida wadata horgalaha `rt_`, tusaale.
// window.rt_REF_LINK_SELECTOR = '...';
// Waxaa loo isticmaali doonaa halka caadiga ah ee enwiki.
var REF_LINK_SELECTOR = window.rt_REF_LINK_SELECTOR || '.reference, a[href^="#CITEREF"]',
COMMENTED_TEXT_CLASS = window.rt_COMMENTED_TEXT_CLASS || 'rt-commentedText',
COMMENTED_TEXT_SELECTOR = (
window.rt_COMMENTED_TEXT_SELECTOR ||
( COMMENTED_TEXT_CLASS ? '.' + COMMENTED_TEXT_CLASS + ', ' : '' ) +
'abbr[title]'
);
if ( mw.messages.get( 'rt-settings' ) === null ) {
mw.messages.set( {
'rt-settings': 'Dejinta Xusuusin-tixraacyada (Reference Tooltips)',
'rt-enable-footer': 'Daar Xusuusin-tixraacyada',
'rt-settings-title': 'Dejinta Xusuusin-tixraacyada',
'rt-save': 'Keydi',
'rt-enable': 'Daar Xusuusin-tixraacyada',
'rt-activationMethod': 'Muuji xusuusin marka aan',
'rt-hovering': 'dul-wareejinayo tixraac',
'rt-clicking': 'riixayo tixraac',
'rt-delay': 'Dib-u-dhaca ka hor inta aysan xusuusintu soo bixin (mili-sekan)',
'rt-tooltipsForComments': 'Muuji xusuusinta korka <span title="Tusaalaha xusuusinta" class="' + ( COMMENTED_TEXT_CLASS || 'rt-commentedText' ) + '" style="border-bottom: 1px dotted; cursor: help;">qoraal ay hoosta ka xarriiqan yihiin dhibco</span> qaabka Xusuusin-tixraacyada (wuxuu u oggolaanayaa in lagu arko xusuusintaas qalabka aan lahayn taageerada jiirka/mouse)',
'rt-disabledNote': 'Waxaad dib u daarmi kartaa Xusuusin-tixraacyada iyadoo la adeegsanayo xiriir ku yaal gunta (footer) bogga.',
'rt-done': 'Waa la dhammeeyay',
'rt-enabled': 'Xusuusin-tixraacyada waa la daarmay'
} );
}
// Doorsoomayaasha "Global" ah
var SECONDS_IN_A_DAY = 60 * 60 * 24,
CLASSES = {
FADE_IN_DOWN: 'rt-fade-in-down',
FADE_IN_UP: 'rt-fade-in-up',
FADE_OUT_DOWN: 'rt-fade-out-down',
FADE_OUT_UP: 'rt-fade-out-up'
},
IS_TOUCHSCREEN = 'ontouchstart' in document.documentElement,
// Hubin qallafsan oo loogu talagalay daalacashada gacanta, oo ah isku-dhafka waxa lagula taliyay
// https://stackoverflow.com/a/24600597 (waxay u diraysaa
// https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent)
// iyo https://stackoverflow.com/a/14301832
IS_MOBILE = /Mobi|Android/i.test( navigator.userAgent ) ||
typeof window.orientation !== 'undefined',
CLIENT_NAME = $.client.profile().name,
settingsString, settings, enabled, delay, activatedByClick, tooltipsForComments, cursorWaitCss,
windowManager, $teleportTarget,
$body = $( document.body ),
$window = $( window ),
$overlay = $( '<div>' )
.addClass( 'rt-overlay' )
.appendTo( $body );
// Lama isticmaali karo ka hor inta aan la xallin https://phabricator.wikimedia.org/T369880
// mw.loader.using( 'mediawiki.page.ready' ).then( function ( require ) {
// $teleportTarget = $( require( 'mediawiki.page.ready' ).teleportTarget );
// $overlay.appendTo( $teleportTarget );
// } );
function rt( $content ) {
// Qalabka Popups
if ( window.pg ) {
return;
}
var teSelector,
settingsDialogOpening = false;
function setSettingsCookie() {
mw.cookie.set(
'RTsettings',
(
Number( enabled ) +
'|' +
delay +
'|' +
Number( activatedByClick ) +
'|' +
Number( tooltipsForComments )
),
{ path: '/', expires: 90 * SECONDS_IN_A_DAY, prefix: '' }
);
}
function enableRt() {
enabled = true;
setSettingsCookie();
$( '.rt-enableItem' ).remove();
rt( $content );
mw.notify( mw.msg( 'rt-enabled' ) );
}
function disableRt() {
$content.find( teSelector ).removeClass( 'rt-commentedText' ).off( '.rt' );
$body.off( '.rt' );
$window.off( '.rt' );
}
function addEnableLink() {
// #footer-places – Vector
// #f-list – Timeless, Monobook, Modern
// waalidka #footer li – Cologne Blue
var $footer = $( '#footer-places, #f-list' );
if ( !$footer.length ) {
$footer = $( '#footer li' ).parent();
}
if ( !$footer.find( '.rt-enableItem' ).length ) {
$footer.append(
$( '<li>' )
.addClass( 'rt-enableItem' )
.append(
$( '<a>' )
.text( mw.msg( 'rt-enable-footer' ) )
.attr( 'href', '#' )
.click( function ( e ) {
e.preventDefault();
enableRt();
} )
)
);
}
}
function TooltippedElement( $element ) {
var events,
te = this;
function onStartEvent( e ) {
var showRefArgs;
if ( activatedByClick && te.type !== 'commentedText' && e.type !== 'contextmenu' ) {
e.preventDefault();
}
if ( !te.noRef ) {
showRefArgs = [ $( this ) ];
if ( te.type !== 'supRef' ) {
showRefArgs.push( e.pageX, e.pageY );
}
te.showRef.apply( te, showRefArgs );
}
}
function onEndEvent() {
if ( !te.noRef ) {
te.hideRef();
}
}
if ( !$element ) {
return;
}
// TooltippedElement.$element iyo TooltippedElement.$originalElement way kala duwanaan doonaan marka
// kan koowaad la beddelo ka dib marka nooca la koobiyay lagu dul-wareejiyo xusuusinta dhexdeeda
this.$element = $element;
this.$originalElement = $element;
if ( this.$element.is( REF_LINK_SELECTOR ) ) {
if ( this.$element.prop( 'tagName' ) === 'SUP' ) {
this.type = 'supRef';
} else {
this.type = 'harvardRef';
}
} else {
this.type = 'commentedText';
this.comment = this.$element.attr( 'title' );
if ( !this.comment ) {
return;
}
this.$element.addClass( 'rt-commentedText' );
}
if ( activatedByClick ) {
events = {
'click.rt': onStartEvent
};
// Waxay ku dareysaa awood aad ku aragto xusuusin xiriirada
if (
this.type === 'commentedText' &&
( this.$element.closest( 'a' ).length || this.$element.has( 'a' ).length )
) {
events[ 'contextmenu.rt' ] = onStartEvent;
}
} else {
events = {
'mouseenter.rt': onStartEvent,
'mouseleave.rt': onEndEvent
};
}
this.$element.on( events );
this.hideRef = function ( immediately ) {
clearTimeout( te.showTimer );
if ( this.type === 'commentedText' ) {
this.$element.attr( 'title', this.comment );
}
if ( this.tooltip && this.tooltip.isPresent ) {
if ( activatedByClick || immediately ) {
this.tooltip.hide();
} else {
this.hideTimer = setTimeout( function () {
te.tooltip.hide();
}, 200 );
}
} else if ( this.$ref && this.$ref.hasClass( 'rt-target' ) ) {
this.$ref.removeClass( 'rt-target' );
if ( activatedByClick ) {
$body.off( 'click.rt touchstart.rt', this.onBodyClick );
}
}
};
this.showRef = function ( $element, ePageX, ePageY ) {
// Qalabka Popups
if ( window.pg ) {
disableRt();
return;
}
if ( this.tooltip && !this.tooltip.$content.length ) {
return;
}
var tooltipInitiallyPresent = this.tooltip && this.tooltip.isPresent;
function reallyShow() {
var viewportTop, refOffsetTop, teHref;
if ( !te.$ref && !te.comment ) {
teHref = te.type === 'supRef' ?
te.$element.find( 'a' ).attr( 'href' ) :
te.$element.attr( 'href' ); // harvardRef
te.$ref = teHref &&
$( '#' + $.escapeSelector( teHref.slice( 1 ) ) );
if ( !te.$ref || !te.$ref.length || !te.$ref.text() ) {
te.noRef = true;
return;
}
}
if ( !tooltipInitiallyPresent && !te.comment ) {
viewportTop = $window.scrollTop();
refOffsetTop = te.$ref.offset().top;
if (
!activatedByClick &&
viewportTop < refOffsetTop &&
viewportTop + $window.height() > refOffsetTop + te.$ref.height() &&
// Waxaa jiri kara qalab/qoraallo ka dhigaya tixraacyada kuwo si jiif ah u rogrogan kara.
$window.width() > te.$ref.offset().left + te.$ref.width()
) {
// Calaamadee tixraaca laftiisa
te.$ref.addClass( 'rt-target' );
return;
}
}
if ( !te.tooltip ) {
te.tooltip = new Tooltip( te );
if ( !te.tooltip.$content.length ) {
return;
}
}
// Haddii xusuusintan looga yeero gudaha xusuusin kale. Ma qeexi karno taas
// halka dhismaha (constructor) maadaama tixraaca la koobiyeyn karo balse uu leeyahay shay Tooltip oo mid ah;
// sidaas darteed, Tooltip.parent waa qiimo lulmaya.
te.tooltip.parent = te.$element.closest( '.rt-tooltip' ).data( 'tooltip' );
if ( te.tooltip.parent && te.tooltip.parent.disappearing ) {
return;
}
te.tooltip.show();
if ( tooltipInitiallyPresent ) {
if ( te.tooltip.$element.hasClass( 'rt-tooltip-above' ) ) {
te.tooltip.$element.addClass( CLASSES.FADE_IN_DOWN );
} else {
te.tooltip.$element.addClass( CLASSES.FADE_IN_UP );
}
return;
}
te.tooltip.calculatePosition( ePageX, ePageY );
$window.on( 'resize.rt', te.onWindowResize );
}
// Waxaan dib u qeexeynaa this.$element halkan maadaama e.target uu noqon karo xiriir tixraac oo ku dhex jira
// xusuusinta tixraaca, ee aysan ahayn xiriir bilowgii loo qoondeeyay this.$element
this.$element = $element;
if ( this.type === 'commentedText' ) {
this.$element.attr( 'title', '' );
}
if ( activatedByClick ) {
if (
tooltipInitiallyPresent ||
( this.$ref && this.$ref.hasClass( 'rt-target' ) )
) {
return;
} else {
setTimeout( function () {
$body.on( 'click.rt touchstart.rt', te.onBodyClick );
}, 0 );
}
}
if ( activatedByClick || tooltipInitiallyPresent ) {
reallyShow();
} else {
this.showTimer = setTimeout( reallyShow, delay );
}
};
this.onBodyClick = function ( e ) {
if ( !te.tooltip && !( te.$ref && te.$ref.hasClass( 'rt-target' ) ) ) {
return;
}
var $current = $( e.target );
function contextMatchesParameter( parameter ) {
return this === parameter;
}
// Xaaladda ugu dambeysa waxaa loo isticmaalaa in lagu go'aamiyo xaaladaha marka xusuusin la riixay ay tahay tan
// curiyaha hadda jira ama mid ka mid ah faracyadiisa
while (
$current.length &&
(
!$current.hasClass( 'rt-tooltip' ) ||
!$current.data( 'tooltip' ) ||
!$current.data( 'tooltip' ).upToTopParent(
contextMatchesParameter, [ te.tooltip ],
true
)
)
) {
$current = $current.parent();
}
if ( !$current.length ) {
te.hideRef();
}
};
this.onWindowResize = function () {
te.tooltip.calculatePosition();
};
}
function Tooltip( te ) {
function openSettingsDialog() {
var settingsDialog, settingsWindow;
if ( cursorWaitCss ) {
cursorWaitCss.disabled = true;
}
function SettingsDialog() {
SettingsDialog.parent.call( this );
}
OO.inheritClass( SettingsDialog, OO.ui.ProcessDialog );
SettingsDialog.static.name = 'settingsDialog';
SettingsDialog.static.title = mw.msg( 'rt-settings-title' );
SettingsDialog.static.actions = [
{
modes: 'main',
action: 'save',
label: mw.msg( 'rt-save' ),
flags: [ 'primary', 'progressive' ]
},
{
modes: 'main',
flags: [ 'safe', 'close' ]
},
{
modes: 'disabled',
action: 'deactivated',
label: mw.msg( 'rt-done' ),
flags: [ 'primary', 'progressive' ]
}
];
SettingsDialog.prototype.initialize = function () {
var dialog = this;
SettingsDialog.parent.prototype.initialize.apply( this, arguments );
this.enableCheckbox = new OO.ui.CheckboxInputWidget( {
selected: true
} );
this.enableCheckbox.on( 'change', function ( selected ) {
dialog.activationMethodSelect.setDisabled( !selected );
dialog.delayInput.setDisabled( !selected || dialog.clickOption.isSelected() );
dialog.tooltipsForCommentsCheckbox.setDisabled( !selected );
} );
this.enableField = new OO.ui.FieldLayout( this.enableCheckbox, {
label: mw.msg( 'rt-enable' ),
align: 'inline',
classes: [ 'rt-enableField' ]
} );
this.hoverOption = new OO.ui.RadioOptionWidget( {
label: mw.msg( 'rt-hovering' )
} );
this.clickOption = new OO.ui.RadioOptionWidget( {
label: mw.msg( 'rt-clicking' )
} );
this.activationMethodSelect = new OO.ui.RadioSelectWidget( {
items: [ this.hoverOption, this.clickOption ]
} );
this.activationMethodSelect.selectItem(
activatedByClick ? this.clickOption : this.hoverOption
);
this.activationMethodSelect.on( 'choose', function ( item ) {
dialog.delayInput.setDisabled( item === dialog.clickOption );
} );
this.activationMethodField = new OO.ui.FieldLayout( this.activationMethodSelect, {
label: mw.msg( 'rt-activationMethod' ),
align: 'top'
} );
this.delayInput = new OO.ui.NumberInputWidget( {
input: { value: delay },
step: 50,
min: 0,
max: 5000,
disabled: activatedByClick,
classes: [ 'rt-numberInput' ]
} );
this.delayField = new OO.ui.FieldLayout( this.delayInput, {
label: mw.msg( 'rt-delay' ),
align: 'top'
} );
this.tooltipsForCommentsCheckbox = new OO.ui.CheckboxInputWidget( {
selected: tooltipsForComments
} );
this.tooltipsForCommentsField = new OO.ui.FieldLayout(
this.tooltipsForCommentsCheckbox,
{
label: new OO.ui.HtmlSnippet( mw.msg( 'rt-tooltipsForComments' ) ),
align: 'inline',
classes: [ 'rt-tooltipsForCommentsField' ]
}
);
new TooltippedElement(
this.tooltipsForCommentsField.$element.find(
'.' + ( COMMENTED_TEXT_CLASS || 'rt-commentedText' )
)
);
this.fieldset = new OO.ui.FieldsetLayout();
this.fieldset.addItems( [
this.enableField,
this.activationMethodField,
this.delayField,
this.tooltipsForCommentsField
] );
this.panelSettings = new OO.ui.PanelLayout( {
padded: true,
expanded: false
} );
this.panelSettings.$element.append( this.fieldset.$element );
this.panelDisabled = new OO.ui.PanelLayout( {
padded: true,
expanded: false
} );
this.panelDisabled.$element.append(
$( '<table>' )
.addClass( 'rt-disabledHelp' )
.append(
$( '<tr>' ).append(
$( '<td>' ).append(
$( '<img>' ).attr( 'src', 'https://upload.wikimedia.org/wikipedia/commons/c/c0/MediaWiki_footer_link_ltr.svg' )
),
$( '<td>' )
.addClass( 'rt-disabledNote' )
.text( mw.msg( 'rt-disabledNote' ) )
)
)
);
this.stackLayout = new OO.ui.StackLayout( {
items: [ this.panelSettings, this.panelDisabled ]
} );
this.$body.append( this.stackLayout.$element );
};
SettingsDialog.prototype.getSetupProcess = function ( data ) {
return SettingsDialog.parent.prototype.getSetupProcess.call( this, data )
.next( function () {
this.stackLayout.setItem( this.panelSettings );
this.actions.setMode( 'main' );
}, this );
};
SettingsDialog.prototype.getActionProcess = function ( action ) {
var dialog = this;
if ( action === 'save' ) {
return new OO.ui.Process( function () {
var newDelay = Number( dialog.delayInput.getValue() );
enabled = dialog.enableCheckbox.isSelected();
if ( newDelay >= 0 && newDelay <= 5000 ) {
delay = newDelay;
}
activatedByClick = dialog.clickOption.isSelected();
tooltipsForComments = dialog.tooltipsForCommentsCheckbox.isSelected();
setSettingsCookie();
if ( enabled ) {
dialog.close();
disableRt();
rt( $content );
} else {
dialog.actions.setMode( 'disabled' );
dialog.stackLayout.setItem( dialog.panelDisabled );
disableRt();
addEnableLink();
}
} );
} else if ( action === 'deactivated' ) {
dialog.close();
}
return SettingsDialog.parent.prototype.getActionProcess.call( this, action );
};
SettingsDialog.prototype.getBodyHeight = function () {
return this.stackLayout.getCurrentItem().$element.outerHeight( true );
};
tooltip.upToTopParent( function adjustRightAndHide() {
if ( this.isPresent ) {
if ( this.$element[ 0 ].style.right ) {
this.$element.css(
'right',
'+=' + ( window.innerWidth - $window.width() )
);
}
this.te.hideRef( true );
}
} );
if ( !windowManager ) {
windowManager = new OO.ui.WindowManager();
$body.append( windowManager.$element );
}
settingsDialog = new SettingsDialog();
windowManager.addWindows( [ settingsDialog ] );
settingsWindow = windowManager.openWindow( settingsDialog );
settingsWindow.opened.then( function () {
settingsDialogOpening = false;
} );
settingsWindow.closed.then( function () {
windowManager.clearWindows();
} );
}
var tooltip = this;
// Doorsoomahan waa badali karaa: hal xusuusin waxaa looga yeeri karaa xiriir tixraac oo nooca harvard ah
// kaas oo la galiyo xusuusino kala duwan
this.te = te;
switch ( this.te.type ) {
case 'supRef':
this.id = 'rt-' + this.te.$originalElement.attr( 'id' );
this.$content = this.te.$ref
.contents()
.filter( function ( i ) {
var $this = $( this );
if ( $this.hasClass( 'mw-subreference-list' ) ) {
return false;
}
return (
this.nodeType === Node.TEXT_NODE ||
!(
// `a[href^="#cite_ref-"]` waxaa loogu talagalay Wiktionary iyo malaha goobo kale
// (oo aan aheyn Wikipedia Soomaaliga) halkaas oo soo saaridda kordhinta Cite
// ay tahay mid wax yar ka duwan
$this.is( '.mw-cite-backlink, a[href^="#cite_ref-"]' ) ||
(
i === 0 &&
// Template:Cnote, Template:Note
( $this.is( 'b' ) ||
// Template:Note_label
$this.is( 'a' ) &&
$this.attr( 'href' ).indexOf( '#ref' ) === 0
)
)
)
);
} )
.clone( true );
const $ol = this.te.$ref.closest( 'ol' );
if ( $ol.hasClass( 'mw-subreference-list' ) ) {
this.$content = $( '<div>' ).append(
$ol.siblings( '.reference-text' ).clone( true )
.css( { display: 'block', 'margin-bottom': '0.7em' } ),
this.$content
);
}
break;
case 'harvardRef':
this.id = 'rt-' + this.te.$originalElement.closest( 'li' ).attr( 'id' );
this.$content = this.te.$ref
.clone( true )
.removeAttr( 'id' );
break;
case 'commentedText':
this.id = 'rt-' + String( Math.random() ).slice( 2 );
this.$content = $( document.createTextNode( this.te.comment ) );
break;
}
if ( !this.$content.length ) {
return;
}
this.isInsideWindow = Boolean( this.te.$element.closest( '.oo-ui-window' ).length );
this.$element = $( '<div>' )
.addClass( 'rt-tooltip' )
.attr( 'id', this.id )
.attr( 'role', 'tooltip' )
.data( 'tooltip', this );
var $hoverArea = $( '<div>' )
.addClass( 'rt-hoverArea' )
.appendTo( this.$element );
var $scroll = $( '<div>' )
.addClass( 'rt-scroll' )
.appendTo( $hoverArea );
this.$content = this.$content
.wrapAll( '<div>' )
.parent()
.addClass( 'rt-content' )
.addClass( 'mw-parser-output' )
.appendTo( $scroll );
if ( !activatedByClick ) {
this.$element
.on( 'mouseenter linkPopupHover', function ( e ) {
if ( !tooltip.disappearing || e.type === 'linkPopupHover' ) {
tooltip.upToTopParent( function () {
this.show();
} );
}
} )
.on( 'mouseleave', function ( e ) {
// https://stackoverflow.com/q/47649442 shaqo-ka-leexin. Ku tiirsanaanta relatedTarget
// keligeed waxay leedahay dabin: marka la sameynayo alt-tabbing, relatedTarget waa mid madhan sidoo kale
if (
CLIENT_NAME !== 'chrome' ||
(
!e.originalEvent ||
e.originalEvent.relatedTarget !== null ||
!tooltip.clickedTime ||
$.now() - tooltip.clickedTime > 50
)
) {
tooltip.upToTopParent( function () {
this.te.hideRef();
} );
}
} )
.click( function () {
tooltip.clickedTime = $.now();
} );
}
if ( !this.isInsideWindow ) {
$( '<a>' )
.addClass( 'rt-settingsLink' )
.attr( 'role', 'button' )
.attr( 'href', '#' )
.attr( 'title', mw.msg( 'rt-settings' ) )
.click( function ( e ) {
e.preventDefault();
if ( settingsDialogOpening ) {
return;
}
settingsDialogOpening = true;
if ( mw.loader.getState( 'oojs-ui' ) !== 'ready' ) {
if ( cursorWaitCss ) {
cursorWaitCss.disabled = false;
} else {
cursorWaitCss = mw.util.addCSS( 'body { cursor: wait; }' );
}
}
mw.loader.using( [ 'oojs', 'oojs-ui' ], openSettingsDialog );
} )
.prependTo( this.$content );
}
// Curiyaha dabada xusuusinta wuxuu ku jiraa gudaha curiyaha nuxurka xusuusinta si xusuusintu
// aysan u dabar go'in marka jiirku uu dusha ka saaran yahay dabada
this.$tail = $( '<div>' )
.addClass( 'rt-tail' )
.prependTo( this.$element );
this.disappearing = false;
this.show = function () {
this.disappearing = false;
clearTimeout( this.te.hideTimer );
clearTimeout( this.te.removeTimer );
this.$element
.removeClass( CLASSES.FADE_OUT_DOWN )
.removeClass( CLASSES.FADE_OUT_UP );
if ( !this.isPresent ) {
$overlay.append( this.$element );
}
this.isPresent = true;
};
this.hide = function () {
var tooltip = this;
tooltip.disappearing = true;
if ( tooltip.$element.hasClass( 'rt-tooltip-above' ) ) {
tooltip.$element
.removeClass( CLASSES.FADE_IN_DOWN )
.addClass( CLASSES.FADE_OUT_UP );
} else {
tooltip.$element
.removeClass( CLASSES.FADE_IN_UP )
.addClass( CLASSES.FADE_OUT_DOWN );
}
tooltip.te.removeTimer = setTimeout( function () {
if ( tooltip.isPresent ) {
tooltip.$element.detach();
tooltip.$tail.css( 'left', '' );
if ( activatedByClick ) {
$body.off( 'click.rt touchstart.rt', tooltip.te.onBodyClick );
}
$window.off( 'resize.rt', tooltip.te.onWindowResize );
tooltip.isPresent = false;
}
}, 200 );
};
this.calculatePosition = function ( ePageX, ePageY ) {
var teElement, teOffsets, teOffset, targetTailOffsetX, tailLeft;
this.$tail.css( 'left', '' );
teElement = this.te.$element.get( 0 );
if ( ePageX !== undefined ) {
targetTailOffsetX = ePageX;
teOffsets = ( teElement.getClientRects && teElement.getClientRects() ) ||
teElement.getBoundingClientRect();
if ( teOffsets.length > 1 ) {
for ( var i = teOffsets.length - 1; i >= 0; i-- ) {
if (
ePageY >= Math.round( $window.scrollTop() + teOffsets[ i ].top ) &&
ePageY <= Math.round(
$window.scrollTop() + teOffsets[i].top + teOffsets[ i ].height
)
) {
teOffset = teOffsets[ i ];
}
}
}
}
if ( !teOffset ) {
teOffset = ( teElement.getClientRects && teElement.getClientRects()[ 0 ] ) ||
teElement.getBoundingClientRect();
}
teOffset = {
top: $window.scrollTop() + teOffset.top,
left: $window.scrollLeft() + teOffset.left,
width: teOffset.width,
height: teOffset.height
};
if ( !targetTailOffsetX ) {
targetTailOffsetX = teOffset.left + ( teOffset.width / 2 );
}
// Qiimaha `left` ee ku jira `.rt-tooltip-above .rt-tail`
var defaultTailLeft = 19;
// Qiimaha `width` ee ku jira `.rt-tail`
var tailSideWidth = 13;
// Waxaan leexineynaa laba-jibaarka 45 darajada, markaa waxaan u baahanahay xididka laba-jibaaran si loo xisaabiyo fogaanta.
var tailWidth = tailSideWidth * Math.SQRT2;
var tailHeight = tailWidth / 2;
var tailCenterDelta = tailSideWidth + 1 - ( tailWidth / 2 );
var tooltip = this;
var getTop = function ( isBelow ) {
var delta = isBelow ?
teOffset.height + tailHeight :
-tooltip.$element.outerHeight() - tailHeight + 1;
return teOffset.top + delta;
};
this.$element.css( {
top: getTop(),
left: targetTailOffsetX - defaultTailLeft - tailCenterDelta,
right: ''
} );
// Ma lagu riixay dhinaca midig ee bogga?
if ( this.$element.offset().left + this.$element.outerWidth() > $window.width() - 1 ) {
this.$element.css( {
left: '',
right: 0
} );
tailLeft = targetTailOffsetX - this.$element.offset().left - tailCenterDelta;
}
// Ma mid ka mid ah qaybihiisa ay ka sarreysaa dusha sare ee shaashadda?
if ( teOffset.top < this.$element.outerHeight() + $window.scrollTop() + tailHeight ) {
this.$element
.removeClass( 'rt-tooltip-above' )
.addClass( 'rt-tooltip-below' )
.addClass( CLASSES.FADE_IN_UP )
.css( {
top: getTop( true )
} );
if ( tailLeft ) {
this.$tail.css( 'left', ( tailLeft + tailSideWidth ) + 'px' );
}
} else {
this.$element
.removeClass( 'rt-tooltip-below' )
.addClass( 'rt-tooltip-above' )
.addClass( CLASSES.FADE_IN_DOWN )
// Hagaajin loogu talagalay kiisaska marka xusuusin hal mar la soo bandhigay markaa si khaldan loo meeleeyay marka
// dib loo soo bandhigo ka dib cabbirka daaqadda oo la beddelay.
.css( {
top: getTop()
} );
if ( tailLeft ) {
this.$tail.css( 'left', tailLeft + 'px' );
}
}
};
// Ku orod shaqo qaar ka mid ah dhammaan xusuusinada ilaa tan ugu sarreysa ee geedka dhexdiisa. Xaaladdeedu waxay noqon doontaa
// xusuusinta, halka cabbiraadahaaga loo gudbin karo Tooltip.upToTopParent oo ah saf (array)
// cabbirka labaad. Haddii cabbirka saddexaad ee la gudbiyo ToolTip.upToTopParent uu yahay mid run ah (true),
// fulinta waa ay joogsaneysaa marka shaqada su'aasha ku jirtaa ay soo celiso run markii ugu horreysay,
// waxaana ToolTip.upToTopParent uu soo celinayaa run sidoo kale.
this.upToTopParent = function ( func, parameters, stopAtTrue ) {
var returnValue,
currentTooltip = this;
do {
returnValue = func.apply( currentTooltip, parameters );
if ( stopAtTrue && returnValue ) {
break;
}
} while ( ( currentTooltip = currentTooltip.parent ) );
if ( stopAtTrue ) {
return returnValue;
}
};
}
if ( !enabled ) {
addEnableLink();
return;
}
teSelector = REF_LINK_SELECTOR;
if ( tooltipsForComments ) {
teSelector += ', ' + COMMENTED_TEXT_SELECTOR;
}
$content.find( teSelector ).each( function () {
new TooltippedElement( $( this ) );
} );
}
settingsString = mw.cookie.get( 'RTsettings', '' );
if ( settingsString ) {
settings = settingsString.split( '|' );
enabled = Boolean( Number( settings[ 0 ] ) );
delay = Number( settings[ 1 ] );
activatedByClick = Boolean( Number( settings[ 2 ] ) );
// Qiimaha afraad waxaa la daray goor dambe, markaa waxaan u qoondeyneynaa qiimo caadi ah. Eeg faallooyinka hoose
// sababta aan u adeegsano "IS_TOUCHSCREEN && IS_MOBILE".
tooltipsForComments = settings[ 3 ] === undefined ?
IS_TOUCHSCREEN && IS_MOBILE :
Boolean( Number( settings[ 3 ] ) );
} else {
enabled = true;
delay = 200;
// Maadaama hubinta biraawsarka gacanta ay tahay mid qallad-u-furan, ku darida xaaladda IS_MOBILE halkan waxay u badan tahay inaanay
// reebeyn kiisaska uu isticmaale la falgalaaya biraawsarka isagoo adeegsanaya taabasho uusan aqoonin sida loogu yeero
// xusuusin si loogu beddelo hawlgelinta riixid. Qaar ka mid ah isticmaalayaasha laptop-yada taabashada taageera
// ee la falgala taabashada (inkasta oo malaha aan ahayn kiiska isticmaalka ugu caansan) kuma faraxsanaan doonaan iyaguna.
activatedByClick = IS_TOUCHSCREEN;
// Sida la doodayo ma aha inaan u beddelno xusuusinada dhalasho kuwa xusuusinta qalabka ee qalabka leh
// taageerada jiirka, xitaa haddii ay leeyihiin shaashado taabasho (waxaa jira laptop-yo leh shaashado taabasho).
// Hubinta IS_TOUCHSCREEN halkan waa si loo helo kalsooni, maadaama hubinta gacanta ay u nugushahay
// xog-beenaadka.
tooltipsForComments = IS_TOUCHSCREEN && IS_MOBILE;
}
mw.hook( 'wikipage.content' ).add( rt );
}() );
4o47659857j9bp9vzadc66pjtay8orl
MediaWiki:Gadget-ReferenceTooltips.css
8
53732
310926
2026-10-25T13:09:35Z
Isma4l
41797
Abuuray
310926
css
text/css
/* See [[mw:Reference Tooltips]] */
.rt-overlay {
position: absolute;
width: 100%;
font-size: calc(var(--font-size-medium, 1rem) * (13 / 14));
line-height: 1.5em;
/* Remove after https://phabricator.wikimedia.org/T369880 is resolved and $teleportTarget is assigned */
z-index: 800; /* match z-index-tooltip in https://doc.wikimedia.org/codex/latest/design-tokens/z-index.html */
top: 0;
}
/* Remove after https://phabricator.wikimedia.org/T369880 is resolved and $teleportTarget is assigned */
.skin-vector-legacy .rt-overlay {
font-size: 13px;
}
.skin-monobook .rt-overlay {
font-size: 12.7px;
}
.rt-tooltip {
position: absolute;
max-width: 27em;
background: var(--background-color-base, #fff);
color: var(--color-base, #202122);
border: 1px solid var(--border-color-subtle, #c8ccd1);
border-radius: 2px;
box-shadow: 0 20px 48px 0 rgba(0, 0, 0, 0.2);
}
html.skin-theme-clientpref-night .rt-tooltip {
box-shadow: 0 20px 48px 0 rgba(0, 0, 0, 1);
}
/* Extend the tooltip vertically to make sure it doesn't disappear while the user moves the mouse to it */
.rt-tooltip-above .rt-hoverArea {
margin-bottom: -0.6em;
padding-bottom: 0.6em;
}
.rt-tooltip-below .rt-hoverArea {
margin-top: -0.7em;
padding-top: 0.7em;
}
.rt-scroll {
overflow-x: auto;
}
.rt-content {
padding: 0.7em 0.9em;
overflow-wrap: break-word;
}
.rt-tail {
/* Use 48%, not 50%, to make the tail start at a right place in Blink browsers in Windows on bigger system font sizes */
background: linear-gradient(to top right, var(--border-color-subtle, #c8ccd1) 48%, rgba(0, 0, 0, 0) 48%);
--tail-left: 19px;
--tail-side-width: 13px;
}
.rt-tail,
.rt-tail:after {
position: absolute;
/* Make sure the tail is behind the scrollbar, e.g. [73] at
https://en.wikipedia.org/w/index.php?title=Lemniscate_elliptic_functions&oldid=1231701944#cite_ref-73
if .rt-tooltip has width of 25em */
z-index: -1;
width: var(--tail-side-width);
height: var(--tail-side-width);
}
.rt-tail:after {
content: '';
background: var(--background-color-base, #fff);
bottom: 1px;
left: 1px;
}
.rt-tooltip-above .rt-tail {
transform: rotate(-45deg);
transform-origin: 100% 100%;
bottom: 0;
left: var(--tail-left);
}
.rt-tooltip-below .rt-tail {
transform: rotate(135deg);
transform-origin: 0 0;
top: 0;
left: calc(var(--tail-left) + var(--tail-side-width));
}
.rt-settingsLink {
background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%0D%0A%20%20%20%20%3Cpath%20fill%3D%22%2354595d%22%20d%3D%22M20%2014.5v-2.9l-1.8-.3c-.1-.4-.3-.8-.6-1.4l1.1-1.5-2.1-2.1-1.5%201.1c-.5-.3-1-.5-1.4-.6L13.5%205h-2.9l-.3%201.8c-.5.1-.9.3-1.4.6L7.4%206.3%205.3%208.4l1%201.5c-.3.5-.4.9-.6%201.4l-1.7.2v2.9l1.8.3c.1.5.3.9.6%201.4l-1%201.5%202.1%202.1%201.5-1c.4.2.9.4%201.4.6l.3%201.8h3l.3-1.8c.5-.1.9-.3%201.4-.6l1.5%201.1%202.1-2.1-1.1-1.5c.3-.5.5-1%20.6-1.4l1.5-.3zM12%2016c-1.7%200-3-1.3-3-3s1.3-3%203-3%203%201.3%203%203-1.3%203-3%203z%22%2F%3E%0D%0A%3C%2Fsvg%3E);
float: right;
margin: -0.5em -0.5em 0 0.5em;
box-sizing: border-box;
height: 32px;
width: 32px;
border: 1px solid transparent;
border-radius: 2px;
background-position: center center;
background-repeat: no-repeat;
background-size: 24px 24px;
}
html.skin-theme-clientpref-night .rt-settingsLink {
background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%0D%0A%20%20%20%20%3Cpath%20fill%3D%22%23c8ccd1%22%20d%3D%22M20%2014.5v-2.9l-1.8-.3c-.1-.4-.3-.8-.6-1.4l1.1-1.5-2.1-2.1-1.5%201.1c-.5-.3-1-.5-1.4-.6L13.5%205h-2.9l-.3%201.8c-.5.1-.9.3-1.4.6L7.4%206.3%205.3%208.4l1%201.5c-.3.5-.4.9-.6%201.4l-1.7.2v2.9l1.8.3c.1.5.3.9.6%201.4l-1%201.5%202.1%202.1%201.5-1c.4.2.9.4%201.4.6l.3%201.8h3l.3-1.8c.5-.1.9-.3%201.4-.6l1.5%201.1%202.1-2.1-1.1-1.5c.3-.5.5-1%20.6-1.4l1.5-.3zM12%2016c-1.7%200-3-1.3-3-3s1.3-3%203-3%203%201.3%203%203-1.3%203-3%203z%22%2F%3E%0D%0A%3C%2Fsvg%3E);
}
.rt-settingsLink:hover,
.rt-settingsLink:active {
background-color: var(--background-color-interactive, #eaecf0);
}
.rt-settingsLink:active {
border-color: var(--border-color-interactive, #72777d);
}
.rt-settingsLink:focus {
outline: 1px solid transparent;
}
.rt-settingsLink:focus:not(:active) {
border-color: var(--border-color-progressive--focus, #36c);
box-shadow: inset 0 0 0 1px var(--box-shadow-color-progressive--focus, #36c);
}
.rt-target {
background-color: var(--background-color-progressive-subtle, #eaf3ff);
}
.rt-enableField {
font-weight: bold;
margin-bottom: 1.25em;
}
.rt-numberInput.rt-numberInput {
width: 10em;
}
.rt-tooltipsForCommentsField.rt-tooltipsForCommentsField.rt-tooltipsForCommentsField {
margin-top: 1.25em;
}
.rt-disabledHelp {
border-collapse: collapse;
}
.rt-disabledHelp td {
padding: 0;
}
.rt-disabledNote.rt-disabledNote {
vertical-align: bottom;
padding-left: 0.36em;
font-weight: bold;
}
@keyframes rt-fade-in-up {
0% {
opacity: 0;
transform: translate(0, 20px);
}
100% {
opacity: 1;
transform: translate(0, 0);
}
}
@keyframes rt-fade-in-down {
0% {
opacity: 0;
transform: translate(0, -20px);
}
100% {
opacity: 1;
transform: translate(0, 0);
}
}
@keyframes rt-fade-out-down {
0% {
opacity: 1;
transform: translate(0, 0);
}
100% {
opacity: 0;
transform: translate(0, 20px);
}
}
@keyframes rt-fade-out-up {
0% {
opacity: 1;
transform: translate(0, 0);
}
100% {
opacity: 0;
transform: translate(0, -20px);
}
}
.rt-fade-in-up {
animation: rt-fade-in-up 0.2s ease forwards;
}
.rt-fade-in-down {
animation: rt-fade-in-down 0.2s ease forwards;
}
.rt-fade-out-down {
animation: rt-fade-out-down 0.2s ease forwards;
}
.rt-fade-out-up {
animation: rt-fade-out-up 0.2s ease forwards;
}
8zpwcq3vyh7m42hvp1h7840jq6sb25g
MediaWiki:Gadget-ReferenceTooltips
8
53733
310927
2026-10-25T13:10:36Z
Isma4l
41797
/* */
310927
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-default}}">(D)</abbr></sup> [[mw:Reference Tooltips|Reference Tooltips]]: dul wareeji tixraacyada ku dhex jira qoraalka si aad u aragto macluumaadka tixraaca adiga oo aan ka fogaanin qoraalka maqaalka (kama shaqeeyo haddii "Navigation popups" ay ka shaqeyso kor ku xusan)
sr9s9qr6awh43ryq088jsglfn8cegqt
MediaWiki:Gadget-BugStatusUpdate.js
8
53734
310928
2026-10-25T13:11:50Z
Isma4l
41797
Abuuray
310928
javascript
text/javascript
/*
* Qalabka Cusbooneysiinta Xaaladda Ciladda (Bug Status Update Gadget)
*
* Qorayaasha:
* Waxaa qoray Rob Moen (robm).
* Waxaa u soo rarray Phabricator Matthew Flaschen (Mattflaschen (WMF))
*
* Sharaxaad:
* Wuxuu helaa oo cusbooneysiiyaa tabannada xaaladda ciladda ee bogga saaran.
* Wuxuu sameeyaa 1 codsi oo ah JSONP oo ku socda phabricator-bug-status API (oo ay maamusho Matthew Flaschen)
* (taas oo u gudbisa codsiga Conduit API ee Phabricator)
* Isha: [[mw:User:Robmoen/bugStatusUpdate.js]]
*/
( function( $ ){
var ids = [],
target = 'https://tools.wmflabs.org/phabricator-bug-status/queryTasks';
var getParams = function( ids ) {
return $.param( { ids: JSON.stringify( ids ) } );
};
// Hel nambarada aqoonsiga hawsha (task ID) ee Phabricator ee ku yaal bogga
// Tabbanadu waa inay bixisaa sifo xogeed (data attribute), fududeynta iyo waxqabadka oo fiican awgeed. Waa in
// sidoo kale la helaa fasal (class), si si degdeg ah loo helo. Tusaale.
// data-phabricator-task="123" class="trakfab ..." ...
// Tani waxay markaas noqon kartaa mid si fudud loo soo xusho, lambarkana waxaa lagu heli karaa adoo adeegsanaya .data( 'phabricatorTask' )
$( '.mw-trackedTemplate' ).find( 'a[title^="phabricator:T"]' ).each( function() {
var titleMatch = $( this ).attr( 'title' ).match( /phabricator:T(\d*)/ );
if ( titleMatch !== null ) {
ids.push( parseInt( titleMatch[1], 10 ) );
}
});
// Ha weydiin haddii aan la helin wax nambar aqoonsi ah
if ( !ids.length ) {
return;
}
// Samee jsonp
$.ajax( {
url: target,
dataType: 'jsonp',
timeout: 5000, // Iska daa haddii Tool Labs ay maanta gaabis tahay
statusCode: { 500: function () { /* Tool Labs way guuldarraysatay, waxba halkan loogama qaban karo */ } },
data: getParams( ids ),
success: function ( data ) {
var color = {
"resolved": "green"
},
phid, taskInfo, taskNumber, selector,
trackedTemplate, $taskLink, $title, $item,
$status;
for( phid in data ) {
taskInfo = data[phid];
taskNumber = taskInfo.id;
// Hel hawsha saxda ah ee la cusbooneysiinayo
selector = '.mw-trackedTemplate a[title^="phabricator:T' + taskNumber + '"]';
$taskLink = $( selector );
$title = $taskLink.find( '.trakfab-T' + taskNumber );
if ( $title ) {
$title.text( taskInfo.title );
}
$item = $taskLink.closest( '.mw-trackedTemplate' );
if( $item ) {
// Hel faraca, haddii uu jiro
// Tani waa mid aad u jilicsan; waxay u baahan tahay fasal (class).
$status = $( '.tracked-closure' );
// Abuur curiyaha xaaladda haddii uusan jirin
if( $status.length === 0 ) {
$status = $( '<span></span>' )
.addClass('tracked-closure');
$item.append( '<br>', $status );
}
// Cusbooneysii curiyaha xaaladda
// Tani waxay la mid tahay Template:Tracked laftiisa, halkaas oo kaliya midka xallismay uu leeyahay midab
// loogu talagalay Phabricator (wax kasta oo kalena waa madow).
$status
.text( taskInfo.statusName )
.css( 'color', color[taskInfo.status] || 'black' );
}
}
}
} );
})( jQuery );
r5rws0pxrw96rl7xqe0yupp5q14496n
MediaWiki:Gadget-BugStatusUpdate
8
53735
310929
2026-10-25T13:12:42Z
Isma4l
41797
/* */
310929
wikitext
text/x-wiki
Daar dabagalka cilladaha ee Phabricator adoo adeegsanaya tusmada) {{tl|tracked}}
eabdn5cs4nvo7ul9nahzaj3wxx7kjcm
Template:Tracked
10
53736
310930
2026-10-25T13:13:29Z
Isma4l
41797
/* */
310930
wikitext
text/x-wiki
<templatestyles src="Tracked/styles.css" /><div role="note" class="tracked plainlinks {{#if:{{{1|}}}|mw-trackedTemplate}}">Waxaa lagala socdaa [[phabricator:|Phabricator]]<br />{{#if:{{{1|}}}|<span class="tracked-url">[[phabricator:{{ #ifeq: {{padleft: | 1 | {{ uc: {{{1}}} }} }} | T | {{ uc: {{{1}}} }} | T{{ #expr: {{{1}}} + 2000 }} }}|<span class="trakfab-{{ #ifeq: {{padleft: | 1 | {{ uc: {{{1}}} }} }} | T | {{ uc: {{{1}}} }} | T{{ #expr: {{{1}}} + 2000 }} }}"> Hawsha {{ #ifeq: {{padleft: | 1 | {{ uc: {{{1}}} }} }} | T | {{ uc: {{{1}}} }} | T{{ #expr: {{{1}}} + 2000 }} }}</span>]]</span>}}<br>{{#switch:{{lc:{{{2|}}}}}
|resolved|fixed=<span class="tracked-closure tracked-resolved">La xalliyay</span>
|invalid=<span class="tracked-closure">Lama aqbali karo</span>
|duplicate=<span class="tracked-closure">Nuqul ah</span>
|declined|wontfix=<span class="tracked-closure">La diiday</span>
|stalled|later=<span class="tracked-closure">La hakiyay</span>
|open=<span class="tracked-closure">Furan</span>
}}</div><noinclude>
{{documentation}}
</noinclude>
onyi177nnc4trfptnwhyipaw85nh0hd
Template:Tracked/styles.css
10
53737
310931
2026-10-25T13:13:54Z
Isma4l
41797
Abuuray
310931
sanitized-css
text/css
/* {{pp|small=y}} */
.tracked {
float: right;
clear: right;
margin: 0 0 1em 1em;
width: 12em;
border: 1px solid var( --border-color-base, #a2a9b1 );
border-radius: 2px;
background-color: var( --background-color-interactive, #EAECF0 );
color: var( --color-base, #202122 );
font-size: 85%;
text-align: center;
padding: 0.5em;
}
.tracked-url {
font-weight: bold;
}
.tracked-closure {
color: var( --color-emphasized, #000 );
font-weight: bold;
text-transform: uppercase;
}
.tracked-resolved {
color: var( --color-success, #14866d );
}
nejphk45hqr2f36r3m4kwk8h09oqk9h
MediaWiki:Gadget-RTRC.js
8
53738
310932
2026-10-25T13:14:47Z
Isma4l
41797
Abuuray
310932
javascript
text/javascript
// [[File:Krinkle_RTRC.js]]
mw.loader.load('https://www.mediawiki.org/w/load.php?debug=false&modules=ext.gadget.rtrc&lang=en');
kdb6i5a6o1pt7880oufx3b4cn6f1opt
MediaWiki:Gadget-RTRC
8
53739
310933
2026-10-25T13:15:40Z
Isma4l
41797
/* */
310933
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-sister}}">(S)</abbr></sup> [[m:User:Krinkle/RTRC-docs|Isbeddellada Dhow ee Waqtiga-Dhabta ah]]: ilaali isbeddellada dhow ee waqtiga dhabta ah (sifaynta aan la ilaalin waxay ka shaqeysaa bogagga cusub oo keliya)
3spgih8mcciol7x4e51jjrnd0560rp1
MediaWiki:Gadget-script-installer.js
8
53740
310934
2026-10-25T13:16:22Z
Isma4l
41797
Abuuray
310934
javascript
text/javascript
/**
* script-installer loader
*/
if( mw.config.get( "wgNamespaceNumber" ) > 0 ) {
var jsPage = mw.config.get( "wgPageName" ).slice( -3 ) === ".js" ||
mw.config.get( "wgPageContentModel" ) === "javascript";
if( jsPage || document.getElementsByClassName( "scriptInstallerLink" ).length ||
document.querySelector( "table.infobox-user-script" ) ) {
mw.loader.load('https://en.wikipedia.org/w/index.php?title=MediaWiki:Gadget-script-installer-core.js&action=raw&ctype=text/javascript');
mw.loader.load('https://en.wikipedia.org/w/index.php?title=MediaWiki:Gadget-script-installer-core.css&action=raw&ctype=text/css', 'text/css');
}
}
puz1xb9ww7rl1ixszdbcfeel6pis55h
310937
310934
2026-10-25T13:19:14Z
Isma4l
41797
310937
javascript
text/javascript
/**
* script-installer loader
*/
if( mw.config.get( "wgNamespaceNumber" ) > 0 ) {
var jsPage = mw.config.get( "wgPageName" ).slice( -3 ) === ".js" ||
mw.config.get( "wgPageContentModel" ) === "javascript";
if( jsPage || document.getElementsByClassName( "scriptInstallerLink" ).length ||
document.querySelector( "table.infobox-user-script" ) ) {
mw.loader.load('https://so.wikipedia.org/w/index.php?title=MediaWiki:Gadget-script-installer-core.js&action=raw&ctype=text/javascript');
mw.loader.load('https://so.wikipedia.org/w/index.php?title=MediaWiki:Gadget-script-installer-core.css&action=raw&ctype=text/css', 'text/css');
}
}
8ldjlokfcmzfpfzyus4zcytwls19hj8
MediaWiki:Gadget-script-installer-core.js
8
53741
310935
2026-10-25T13:18:02Z
Isma4l
41797
Abuuray
310935
javascript
text/javascript
( function () {
// Shayga mw.Api
let api;
// Keydi "common" bilowga
const SKINS = [ 'common', 'monobook', 'minerva', 'vector', 'vector-2022', 'timeless' ];
// Imisa qoraal ayaan u baahannahy kahor inta aanaan soo bandhigin shaandhaynta degdegga ah?
const NUM_SCRIPTS_FOR_SEARCH = 5;
const imports = {};
const localScriptsByName = {};
// Imisa qoraal ayaa la rakibay?
let scriptCount = 0;
// Waxaa lagu daraa dhammaadka soo koobidda wax-ka-beddelka
const ADVERT = ' ([[User:Enterprisey/script-installer|script-installer]])';
/**
* Xadhkaha (strings), ee turjumidda
*/
const STRINGS = {
skinCommon: 'common (kuxiran dhammaan maqaallada/maqaarka)',
backlink: 'Xiriirka dib u soo celinta:',
installSummary: 'Rakibidda $1',
installLinkText: 'Rakib',
installProgressMsg: 'Waa la rakibayaa...',
uninstallSummary: 'Ka saaridda $1',
uninstallLinkText: 'Ka saar',
uninstallProgressMsg: 'Waa la ka saarayaa...',
disableSummary: 'Daminta $1',
disableLinkText: 'Dami',
disableProgressMsg: 'Waa la daminayaa...',
enableSummary: 'Daaridda $1',
enableLinkText: 'Daar',
enableProgressMsg: 'Waa la daarayaa...',
moveLinkText: 'Raree',
moveProgressMsg: 'Waa la rarayaa...',
movePrompt: 'Meesha loo socdo? Geli mid ka mid ah:', // waxaa ku xiga magacyada maqaarka/skins
normalizeSummary: 'Hagaajinta rakibidda qoraallada',
remoteUrlDesc: '$1, laga raray $2',
panelHeader: 'Hadda waxaad haysataa qoraallada soo socda oo la rakibay (ka hel wax dheeraad ah WP:USL)',
cannotInstall: 'Lama rakibi karo',
cannotInstallSkin: 'Boggan waa mid ka mid ah bogaggaaga habaynta isticmaalaha, waana uu horay u shaqeyn karaa (ama wuu shaqeyn doonaa, haddii uu yahay common.js) markasta oo bogga la raro.',
cannotInstallContentModel: "Qaabka nuxurka boggu waa $1, ee ma aha 'javascript'",
insecure: '(amaah ama amni-darro)', // waxaa lagu isticmaalaa dhammaadka fariimaha qaar
notJavaScript: 'ma aha JavaScript',
installViaPreferences: 'Ka rakib doorbidisyada (preferences)',
showNormalizeLinks: 'Muuji xiriirada "hagaajinta"?',
normalize: 'hagaaji',
showMoveLinks: 'Muuji xiriirada "raridda"?',
quickFilter: 'Shaandhaynta degdegga ah:',
tempWarning: 'Rakibidda bogagga aan ahayn User, ama aan la ilaalin ee MediaWiki waa ku-meel-gaar waxaana laga yaabaa in la tirtiro mustaqbalka.',
badPageError: 'Boggu ma aha User: ama MediaWiki: mana la ilaaliyo',
manageUserScripts: 'Maaree qoraallada isticmaalaha',
bigSecurityWarning: "Digniin!$1\n\nDhammaan qoraallada isticmaalaha waxay yeelan karaan nuxur xaasidnimo ah oo awood u leh inuu wax u dhimo koontadaada. Rakibidda qoraal waxay la macno tahay in dad kale ay beddeli karaan; hubi inaad ku kalsoon tahay qoraageeda. Haddii aadan hubin in qoraalku ammaan yahay, ka hubi golaha bulshada farsamada. Ma rakibtaa qoraalkan?",
securityWarningSection: ' Waxaa la rabaa in la rakibo $1.'
};
const USER_NAMESPACE_NAME = mw.config.get( 'wgFormattedNamespaces' )[ 2 ];
/**
* Dhisidda Soo-dejinta (Import). Soo-dejintu waa xariiq ku jirta faylka JS oo soo dejineysa
* qoraalka isticmaalaha. Astaamaha:
*
* KELIYAHADDA mid ka mid ah "page" ama "url" ayaa eber ah (null) soo-dejinta kasta.
*
* this.type = 0 haddii ay tahay maxalli (local), 1 haddii meel fog laga soo raray, iyo 2 haddii ay tahay URL.
*/
function Import( page, wiki, url, target, disabled ) {
this.page = page;
this.wiki = wiki;
this.url = url;
this.target = target;
this.disabled = disabled;
this.type = this.url ? 2 : ( this.wiki ? 1 : 0 );
}
Import.ofLocal = function ( page, target, disabled ) {
if ( disabled === undefined ) {
disabled = false;
}
return new Import( page, null, null, target, disabled );
};
/**
* URL-ka loo dhoofiyo. Waxay u qaadanaysaa wgScriptPath inuu yahay "/w"
*/
Import.ofUrl = function ( url, target, disabled ) {
if ( disabled === undefined ) {
disabled = false;
}
const URL_RGX = /^(?:https?:)?\/\/(.+?)\.org\/w\/index\.php\?.*?title=(.+?(?:&|$))/;
const match = URL_RGX.exec( url );
if ( match ) {
const title = decodeURIComponent( match[ 2 ].replace( /&$/, '' ) ),
wiki = decodeURIComponent( match[ 1 ] );
return new Import( title, wiki, null, target, disabled );
}
return new Import( null, null, url, target, disabled );
};
Import.fromJs = function ( line, target ) {
const IMPORT_RGX = /^\s*(\/\/)?\s*importScript\s*\(\s*(?:"|')(.+?)(?:"|')\s*\)/;
let match = IMPORT_RGX.exec( line );
if ( match ) {
return Import.ofLocal( unescapeForJsString( match[ 2 ] ), target, !!match[ 1 ] );
}
const LOADER_RGX = /^\s*(\/\/)?\s*mw\.loader\.load\s*\(\s*(?:"|')(.+?)(?:"|')\s*\)/;
match = LOADER_RGX.exec( line );
if ( match ) {
return Import.ofUrl( unescapeForJsString( match[ 2 ] ), target, !!match[ 1 ] );
}
};
Import.prototype.getDescription = function ( useWikitext ) {
switch ( this.type ) {
case 0: return useWikitext ? ( '[[' + this.page + ']]' ) : this.page;
case 1: return STRINGS.remoteUrlDesc.replace( '$1', this.page ).replace( '$2', this.wiki );
case 2: return this.url;
}
};
/**
* URL bini'aadamku akhrin karo (oo aan khasab ku ahayn ResourceLoader).
*/
Import.prototype.getHumanUrl = function () {
switch ( this.type ) {
case 0: return '/wiki/' + encodeURI( this.page );
case 1: return '//' + this.wiki + '.org/wiki/' + encodeURI( this.page );
case 2: return this.url;
}
};
Import.prototype.toJs = function () {
const dis = this.disabled ? '//' : '';
let url = this.url;
switch ( this.type ) {
case 0: return dis + "importScript('" + escapeForJsString( this.page ) + "'); // " + STRINGS.backlink + ' [[' + escapeForJsComment( this.page ) + ']]';
case 1: url = '//' + encodeURIComponent( this.wiki ) + '.org/w/index.php?title=' +
encodeURIComponent( this.page ) + '&action=raw&ctype=text/javascript';
/* KU DHAC HOOS */
case 2: return dis + "mw.loader.load('" + escapeForJsString( url ) + "');";
}
};
/**
* Rakibaadda soo-dejinta.
*/
Import.prototype.install = function () {
return api.postWithEditToken( {
action: 'edit',
title: getFullTarget( this.target ),
summary: STRINGS.installSummary.replace( '$1', this.getDescription( /* useWikitext */ true ) ) + ADVERT,
appendtext: '\n' + this.toJs()
} );
};
/**
* Hel dhammaan nambarada xariiqda ee bogga bartilmaameedka ah ee xusaya
* qoraalka cayiman.
*/
Import.prototype.getLineNums = function ( targetWikitext ) {
function quoted( s ) {
return new RegExp( "(['\"])" + escapeForRegex( s ) + '\\1' );
}
let toFind;
switch ( this.type ) {
case 0:
toFind = quoted( escapeForJsString( this.page ) );
break;
case 1:
toFind = new RegExp( escapeForRegex( encodeURIComponent( this.wiki ) ) + '.*?' +
escapeForRegex( encodeURIComponent( this.page ) ) );
break;
case 2:
toFind = quoted( escapeForJsString( this.url ) );
break;
}
const lineNums = [], lines = targetWikitext.split( '\n' );
for ( let i = 0; i < lines.length; i++ ) {
if ( toFind.test( lines[ i ] ) ) {
lineNums.push( i );
}
}
return lineNums;
};
/**
* Ka saarista soo-dejinta la bixiyay. Taasi waa, tirtir dhammaan xariiqyada bogga
* bartilmaameedka ah ee soo dejinaya qoraalka cayiman.
*/
Import.prototype.uninstall = function () {
const that = this;
return getWikitext( getFullTarget( this.target ) ).then( ( wikitext ) => {
const lineNums = that.getLineNums( wikitext ),
newWikitext = wikitext.split( '\n' ).filter( ( _, idx ) => lineNums.indexOf( idx ) < 0 ).join( '\n' );
return api.postWithEditToken( {
action: 'edit',
title: getFullTarget( that.target ),
summary: STRINGS.uninstallSummary.replace( '$1', that.getDescription( /* useWikitext */ true ) ) + ADVERT,
text: newWikitext
} );
} );
};
/**
* Dejinta in soo-dejinta la bixiyay ay curyaan tahay (disabled), iyadoo sal looga dhigayo qiimaha
* boolean-ka ee la bixiyay.
*/
Import.prototype.setDisabled = function ( disabled ) {
const that = this;
this.disabled = disabled;
return getWikitext( getFullTarget( this.target ) ).then( ( wikitext ) => {
const lineNums = that.getLineNums( wikitext ),
newWikitextLines = wikitext.split( '\n' );
if ( disabled ) {
lineNums.forEach( ( lineNum ) => {
if ( newWikitextLines[ lineNum ].trim().indexOf( '//' ) !== 0 ) {
newWikitextLines[ lineNum ] = '//' + newWikitextLines[ lineNum ].trim();
}
} );
} else {
lineNums.forEach( ( lineNum ) => {
if ( newWikitextLines[ lineNum ].trim().indexOf( '//' ) === 0 ) {
newWikitextLines[ lineNum ] = newWikitextLines[ lineNum ].replace( /^\s*\/\/\s*/, '' );
}
} );
}
const summary = ( disabled ? STRINGS.disableSummary : STRINGS.enableSummary )
.replace( '$1', that.getDescription( /* useWikitext */ true ) ) + ADVERT;
return api.postWithEditToken( {
action: 'edit',
title: getFullTarget( that.target ),
summary: summary,
text: newWikitextLines.join( '\n' )
} );
} );
};
Import.prototype.toggleDisabled = function () {
this.disabled = !this.disabled;
return this.setDisabled( this.disabled );
};
/**
* U rarista soo-dejintan fayl kale.
*/
Import.prototype.move = function ( newTarget ) {
if ( this.target === newTarget ) {
return;
}
const old = new Import( this.page, this.wiki, this.url, this.target, this.disabled );
this.target = newTarget;
return $.when( old.uninstall(), this.install() );
};
function getAllTargetWikitexts() {
return $.getJSON(
mw.util.wikiScript( 'api' ),
{
format: 'json',
action: 'query',
prop: 'revisions',
rvprop: 'content',
rvslots: 'main',
titles: SKINS.map( getFullTarget ).join( '|' )
}
).then( ( data ) => {
if ( data && data.query && data.query.pages ) {
const result = {};
Object.values( data.query.pages ).forEach( ( moreData ) => {
const nameWithoutExtension = new mw.Title( moreData.title ).getNameText();
const targetName = nameWithoutExtension.substring( nameWithoutExtension.indexOf( '/' ) + 1 );
result[ targetName ] = moreData.revisions ? moreData.revisions[ 0 ].slots.main[ '*' ] : null;
} );
return result;
}
} );
}
function buildImportList() {
return getAllTargetWikitexts().then( ( wikitexts ) => {
Object.keys( wikitexts ).forEach( ( targetName ) => {
const targetImports = [];
if ( wikitexts[ targetName ] ) {
const lines = wikitexts[ targetName ].split( '\n' );
let currImport;
for ( let i = 0; i < lines.length; i++ ) {
currImport = Import.fromJs( lines[ i ], targetName );
if ( currImport ) {
targetImports.push( currImport );
scriptCount++;
if ( currImport.type === 0 ) {
if ( !localScriptsByName[ currImport.page ] ) {
localScriptsByName[ currImport.page ] = [];
}
localScriptsByName[ currImport.page ].push( currImport.target );
}
}
}
}
imports[ targetName ] = targetImports;
} );
} );
}
/**
* "Hagaajinta" (jaangooynta qaabdhismeedka) xariiqyada bogga habaynta
* ee la bixiyay.
*/
function normalize( target ) {
return getWikitext( getFullTarget( target ) ).then( ( wikitext ) => {
const lines = wikitext.split( '\n' ),
newLines = Array( lines.length );
let currImport;
for ( let i = 0; i < lines.length; i++ ) {
currImport = Import.fromJs( lines[ i ], target );
if ( currImport ) {
newLines[ i ] = currImport.toJs();
} else {
newLines[ i ] = lines[ i ];
}
}
return api.postWithEditToken( {
action: 'edit',
title: getFullTarget( target ),
summary: STRINGS.normalizeSummary + ADVERT,
text: newLines.join( '\n' )
} );
} );
}
function conditionalReload( openPanel ) {
if ( window.scriptInstallerAutoReload ) {
if ( openPanel ) {
document.cookie = 'open_script_installer=yes';
}
window.location.reload( true );
}
}
/********************************************
*
* Koodka UI
*
********************************************/
function makePanel() {
const $list = $( '<div>' ).attr( 'id', 'script-installer-panel' )
.append( $( '<header>' ).text( STRINGS.panelHeader ) );
const $container = $( '<div>' ).addClass( 'container' ).appendTo( $list );
// Meesha sanduuqyada calaamadaynta (checkboxes)
$container.append( $( '<div>' )
.attr( 'class', 'checkbox-container' )
.append(
$( '<input>' )
.attr( { id: 'siNormalize', type: 'checkbox' } )
.on( 'click', () => {
$( '.normalize-wrapper' ).toggle( 0 );
} ),
$( '<label>' )
.attr( 'for', 'siNormalize' )
.text( STRINGS.showNormalizeLinks ),
$( '<input>' )
.attr( { id: 'siMove', type: 'checkbox' } )
.on( 'click', () => {
$( '.move-wrapper' ).toggle( 0 );
} ),
$( '<label>' )
.attr( 'for', 'siMove' )
.text( STRINGS.showMoveLinks ) ) );
if ( scriptCount > NUM_SCRIPTS_FOR_SEARCH ) {
$container.append( $( '<div>' )
.attr( 'class', 'filter-container' )
.append(
$( '<label>' )
.attr( 'for', 'siQuickFilter' )
.text( STRINGS.quickFilter ),
$( '<input>' )
.attr( { id: 'siQuickFilter', type: 'text' } )
.on( 'input', function () {
const filterString = $( this ).val();
if ( filterString ) {
const sel = "#script-installer-panel li[name*='" +
$.escapeSelector( $( this ).val() ) + "']";
$( '#script-installer-panel li.script' ).toggle( false );
$( sel ).toggle( true );
} else {
$( '#script-installer-panel li.script' ).toggle( true );
}
} )
) );
// Hadda, ka saar sanduuqyada calaamadaynta jidka
$container.find( '.checkbox-container' )
.css( 'float', 'right' );
}
$.each( imports, ( targetName, targetImports ) => {
const fmtTargetName = ( targetName === 'common' ?
STRINGS.skinCommon :
targetName );
if ( targetImports.length ) {
$container.append(
$( '<h2>' ).append(
fmtTargetName,
$( '<span>' )
.addClass( 'normalize-wrapper' )
.append(
' (',
$( '<a>' )
.text( STRINGS.normalize )
.on( 'click', () => {
normalize( targetName ).done( () => {
conditionalReload( true );
} );
} ),
')' )
.hide() ),
$( '<ul>' ).append(
targetImports.map( ( anImport ) => $( '<li>' )
.addClass( 'script' )
.attr( 'name', anImport.getDescription() )
.append(
$( '<a>' )
.text( anImport.getDescription() )
.addClass( 'script' )
.attr( 'href', anImport.getHumanUrl() ),
' (',
$( '<a>' )
.text( STRINGS.uninstallLinkText )
.on( 'click', function () {
$( this ).text( STRINGS.uninstallProgressMsg );
anImport.uninstall().done( () => {
conditionalReload( true );
} );
} ),
' | ',
$( '<a>' )
.text( anImport.disabled ? STRINGS.enableLinkText : STRINGS.disableLinkText )
.on( 'click', function () {
$( this ).text( anImport.disabled ? STRINGS.enableProgressMsg : STRINGS.disableProgressMsg );
anImport.toggleDisabled().done( function () {
$( this ).toggleClass( 'disabled' );
conditionalReload( true );
} );
} ),
$( '<span>' )
.addClass( 'move-wrapper' )
.append(
' | ',
$( '<a>' )
.text( STRINGS.moveLinkText )
.on( 'click', function () {
let dest = null;
const PROMPT = STRINGS.movePrompt + ' ' + SKINS.join( ', ' );
do {
dest = ( window.prompt( PROMPT ) || '' ).toLowerCase();
} while ( dest && SKINS.indexOf( dest ) < 0 );
if ( !dest ) {
return;
}
$( this ).text( STRINGS.moveProgressMsg );
anImport.move( dest ).done( () => {
conditionalReload( true );
} );
} )
)
.hide(),
')' )
.toggleClass( 'disabled', anImport.disabled ) ) ) );
}
} );
return $list;
}
function buildCurrentPageInstallElement() {
let addingInstallLink = false; // miyaanu ku daraynaa xiriir rakibid oo sax ah?
const $installElement = $( '<span>' ); // waxaa la isticmaalaa oo keliya haddii addingInstallLink loo dejiyeen run (true)
const namespaceNumber = mw.config.get( 'wgNamespaceNumber' );
const pageName = mw.config.get( 'wgPageName' );
// Magaca bannaan (Namespace) 2 waa User
if ( namespaceNumber === 2 &&
pageName.indexOf( '/' ) > 0 ) {
const contentModel = mw.config.get( 'wgPageContentModel' );
if ( contentModel === 'javascript' ) {
const prefixLength = mw.config.get( 'wgUserName' ).length + 6;
if ( pageName.indexOf( USER_NAMESPACE_NAME + ':' + mw.config.get( 'wgUserName' ) ) === 0 ) {
const skinIndex = SKINS.indexOf( pageName.substring( prefixLength ).slice( 0, -3 ) );
if ( skinIndex >= 0 ) {
return $( '<abbr>' ).text( STRINGS.cannotInstall )
.attr( 'title', STRINGS.cannotInstallSkin );
}
}
addingInstallLink = true;
} else {
return $( '<abbr>' ).text( STRINGS.cannotInstall + ' (' + STRINGS.notJavaScript + ')' )
.attr( 'title', STRINGS.cannotInstallContentModel.replace( '$1', contentModel ) );
}
}
// Magaca bannaan (Namespace) 8 waa MediaWiki
if ( namespaceNumber === 8 ) {
return $( '<a>' ).text( STRINGS.installViaPreferences )
.attr( 'href', mw.util.getUrl( 'Special:Preferences' ) + '#mw-prefsection-gadgets' );
}
const editRestriction = mw.config.get( 'wgRestrictionEdit' ) || [];
if ( ( namespaceNumber !== 2 && namespaceNumber !== 8 ) &&
( editRestriction.indexOf( 'sysop' ) >= 0 ||
editRestriction.indexOf( 'editprotected' ) >= 0 ) ) {
$installElement.append( ' ',
$( '<abbr>' ).append(
$( '<img>' ).attr( 'src', 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/35/Achtung-yellow.svg/20px-Achtung-yellow.svg.png' ).addClass( 'warning' ),
STRINGS.insecure )
.attr( 'title', STRINGS.tempWarning ) );
addingInstallLink = true;
}
if ( addingInstallLink ) {
const fixedPageName = mw.config.get( 'wgPageName' ).replace( /_/g, ' ' );
$installElement.prepend( $( '<a>' )
.attr( 'id', 'script-installer-main-install' )
.text( localScriptsByName[ fixedPageName ] ? STRINGS.uninstallLinkText : STRINGS.installLinkText )
.on( 'click', makeLocalInstallClickHandler( fixedPageName ) ) );
// Haddii qoraalka la rakibay laakiin uu curyaan yahay, u oggolow isticmaalaha inuu daarayo
const allScriptsInTarget = imports[ localScriptsByName[ fixedPageName ] ];
const importObj = allScriptsInTarget && allScriptsInTarget.find( ( anImport ) => anImport.page === fixedPageName );
if ( importObj && importObj.disabled ) {
$installElement.append( ' | ',
$( '<a>' )
.attr( 'id', 'script-installer-main-enable' )
.text( STRINGS.enableLinkText )
.on( 'click', function () {
$( this ).text( STRINGS.enableProgressMsg );
importObj.setDisabled( false ).done( () => {
conditionalReload( false );
} );
} ) );
}
return $installElement;
}
return $( '<abbr>' ).text( STRINGS.cannotInstall + ' ' + STRINGS.insecure )
.attr( 'title', STRINGS.badPageError );
}
function showUi() {
$( '#firstHeading' ).append( $( '<span>' )
.attr( 'id', 'script-installer-top-container' )
.append(
buildCurrentPageInstallElement(),
' | ',
$( '<a>' )
.text( STRINGS.manageUserScripts ).on( 'click', () => {
if ( !document.getElementById( 'script-installer-panel' ) ) {
$( '#mw-content-text' ).before( makePanel() );
} else {
$( '#script-installer-panel' ).remove();
}
} ) ) );
}
function attachInstallLinks() {
// Dhamaadka tarjumaad kasta oo {{Userscript}}, waxaa jira
// <span id='User:Foo/Bar.js' class='scriptInstallerLink'></span>
$( 'span.scriptInstallerLink' ).each( function () {
const scriptName = this.id.replace( /_/g, ' ' );
$( this ).append( ' | ', $( '<a>' )
.text( localScriptsByName[ scriptName ] ? STRINGS.uninstallLinkText : STRINGS.installLinkText )
.on( 'click', makeLocalInstallClickHandler( scriptName ) ) );
} );
// Ku dar badhan rakibid oo buluug ah oo weyn {{Infobox user script}} kasta
$( 'table.infobox-user-script' ).each( function () {
const $infoboxScriptField = $( this ).find( "th:contains('Source')" ).next();
let scriptName = mw.config.get( 'wgPageName' );
const isHyperlink = $infoboxScriptField.html() !== $infoboxScriptField.text();
if ( isHyperlink ) {
const $link = $infoboxScriptField.find( 'a' ).first();
const isExternalLink = $link.hasClass( 'external' );
if ( !isExternalLink ) {
scriptName = /\/wiki\/(.*)/.exec( $link.attr( 'href' ) )[ 1 ];
}
} else {
scriptName = $infoboxScriptField.text();
}
scriptName = /user:.+?\/.+?.js/i.exec( scriptName )[ 0 ];
scriptName = scriptName.replace( /_/g, ' ' ); // hubi in magaca qoraalku uusan lahayn hoosta ka xarriiq (underscores)
$( this ).children( 'tbody' ).append( $( '<tr>' ).append( $( '<td>' )
.attr( 'colspan', '2' )
.addClass( 'script-installer-ibx' )
.append( $( '<button>' )
.addClass( 'mw-ui-button mw-ui-progressive mw-ui-big' )
.text( localScriptsByName[ scriptName ] ? STRINGS.uninstallLinkText : STRINGS.installLinkText )
.on( 'click', makeLocalInstallClickHandler( scriptName ) ) ) ) );
});
}
function makeLocalInstallClickHandler( scriptName ) {
return function () {
const $this = $( this );
if ( $this.text() === STRINGS.installLinkText ) {
const okay = window.confirm(
STRINGS.bigSecurityWarning.replace( '$1',
STRINGS.securityWarningSection.replace( '$1', scriptName ) ) );
if ( okay ) {
$( this ).text( STRINGS.installProgressMsg );
Import.ofLocal( scriptName, window.scriptInstallerInstallTarget ).install().done( () => {
$( this ).text( STRINGS.uninstallLinkText );
conditionalReload( false );
} );
}
} else {
$( this ).text( STRINGS.uninstallProgressMsg );
const uninstalls = uniques( localScriptsByName[ scriptName ] )
.map( ( target ) => Import.ofLocal( scriptName, target ).uninstall() );
$.when.apply( $, uninstalls ).then( () => {
$( this ).text( STRINGS.installLinkText );
conditionalReload( false );
} );
}
};
}
/********************************************
*
* Shaqooyinka kaalmada (Utility functions)
*
********************************************/
/**
* Hel wikitext-ka bogga oo wata cinwaanka la bixiyay (magaca bannaanka / namespace ayaa loo baahan yahay).
*/
function getWikitext( title ) {
return $.getJSON(
mw.util.wikiScript( 'api' ),
{
format: 'json',
action: 'query',
prop: 'revisions',
rvprop: 'content',
rvslots: 'main',
rvlimit: 1,
titles: title
}
).then( ( data ) => {
const pageId = Object.keys( data.query.pages )[ 0 ];
if ( data.query.pages[ pageId ].revisions ) {
return data.query.pages[ pageId ].revisions[ 0 ].slots.main[ '*' ];
}
return '';
} );
}
function escapeForRegex( s ) {
return s.replace( /[-/\\^$*+?.()|[\]{}]/g, '\\$&' );
}
/**
* Ka baxsashada xadhig si loogu isticmaalo xadhig suugaaneed JavaScript ah.
* Shaqadan waxaa laga soo qaatay
* https://github.com/joliss/js-string-escape/blob/6887a69003555edf5c6caaa75f2592228558c595/index.js
* (waxaa lagu sii daayay shatiga MIT).
*/
function escapeForJsString( s ) {
return s.replace( /["'\\\n\r\u2028\u2029]/g, ( character ) => {
switch ( character ) {
case '"':
case "'":
case '\\':
return '\\' + character;
case '\n':
return '\\n';
case '\r':
return '\\r';
case '\u2028':
return '\\u2028';
case '\u2029':
return '\\u2029';
}
} );
}
/**
* Ka baxsashada xadhig si loogu isticmaalo faallo JavaScript ah oo dhexda ku jirta (faallooyinka ku billowda labada jeex "//").
*/
function escapeForJsComment( s ) {
return s.replace( /[\n\r\u2028\u2029]/g, ( character ) => {
switch ( character ) {
case '\n':
return '\\n';
case '\r':
return '\\r';
case '\u2028':
return '\\u2028';
case '\u2029':
return '\\u2029';
}
} );
}
/**
* Dib-u-soo-celinta xadhig suugaaneed JavaScript ah.
*/
function unescapeForJsString( s ) {
return s.replace( /\\"|\\'|\\\\|\\n|\\r|\\u2028|\\u2029/g, ( substring ) => {
switch ( substring ) {
case '\\"':
return '"';
case "\\'":
return "'";
case '\\\\':
return '\\';
case '\\r':
return '\r';
case '\\n':
return '\n';
case '\\u2028':
return '\u2028';
case '\\u2029':
return '\u2029';
}
} );
}
function getFullTarget( target ) {
return USER_NAMESPACE_NAME + ':' + mw.config.get( 'wgUserName' ) + '/' +
target + '.js';
}
// Laga soo qaatay https://stackoverflow.com/a/10192255
function uniques( array ) {
return array.filter( ( el, index, arr ) => index === arr.indexOf( el ) );
}
if ( window.scriptInstallerAutoReload === undefined ) {
window.scriptInstallerAutoReload = true;
}
if ( window.scriptInstallerInstallTarget === undefined ) {
window.scriptInstallerInstallTarget = 'common'; // si caadi ah, ugu rakib waxyaabaha common.js ee isticmaalaha
}
const jsPage = mw.config.get( 'wgPageName' ).slice( -3 ) === '.js' ||
mw.config.get( 'wgPageContentModel' ) === 'javascript';
$.when(
$.ready,
mw.loader.using( [ 'mediawiki.api', 'mediawiki.util' ] )
).then( () => {
api = new mw.Api();
buildImportList().then( () => {
attachInstallLinks();
if ( jsPage ) {
showUi();
}
// Si otomaatig ah u fur guddiga haddii aan dejino cookie-ga si aan sidaas u yeelno (eeg `conditionalReload()`)
if ( document.cookie.indexOf( 'open_script_installer=yes' ) >= 0 ) {
document.cookie = 'open_script_installer=; expires=Thu, 01 Jan 1970 00:00:01 GMT';
$( "#script-installer-top-container a:contains('Manage')" ).trigger( 'click' );
}
} );
} );
}() );
js7p0w4nagnctbfusk4w9tywazax8a7
MediaWiki:Gadget-script-installer-core.css
8
53742
310936
2026-10-25T13:18:49Z
Isma4l
41797
Abuuray
310936
css
text/css
#script-installer-panel li.disabled a.script {
text-decoration: line-through;
font-style: italic;
}
#script-installer-panel {
width: 60%;
border: solid lightgray 1px;
padding: 0;
margin-left: auto;
margin-right: auto;
margin-bottom: 15px;
overflow: auto;
box-shadow: 5px 5px 5px #999;
background-color: var(--background-color-base, #fff);
z-index: 50;
}
#script-installer-panel header {
background-color: var(--background-color-content-added, #a3d3ff);
display: block;
padding: 5px;
font-size: 1.1em;
font-weight: bold;
text-align: left;
}
#script-installer-panel .checkbox-container input {
margin-left: 1.5em;
}
#script-installer-panel .filter-container {
margin-bottom: -0.75em;
}
#script-installer-panel .filter-container label {
margin-right: 0.35em;
}
#script-installer-panel .container {
padding: 0.75em;
}
#script-installer-panel .container h2 {
margin-top: 0.75em;
}
#script-installer-panel a {
cursor: pointer;
}
#script-installer-main-install {
font-weight: bold;
}
#script-installer-top-container {
bottom: 5px;
font-size: 70%;
margin-left: 1em;
user-select: none;
}
body.skin-modern #script-installer-top-container a {
color: inherit;
cursor: pointer;
}
body.skin-timeless #script-installer-top-container a,
body.skin-cologneblue #script-installer-top-container a {
cursor: pointer
}
#script-installer-top-container img.warning {
position: relative;
top: -2px;
margin-right: 3px;
}
td.script-installer-ibx {
text-align: center
}
5yhkwtc5q2tqx9ep3bvxtph76bgvwbh
MediaWiki:Gadget-script-installer
8
53743
310938
2026-10-25T13:20:22Z
Isma4l
41797
/* */
310938
wikitext
text/x-wiki
Rakib qoraallada adigoon si gacanta ah u beddelin faylasha JavaScript-ka ([[:en:User:Enterprisey/script-installer|dukumentiyeyn]])
o1dm6gvkv5w2780goaelywa5eeu07g2
MediaWiki:Gadget-section-dayactirka
8
53744
310939
2026-10-25T13:21:35Z
Isma4l
41797
/* */
310939
wikitext
text/x-wiki
Dayactirka iyo Maamulka
b5fdn3jg91x8eusyygwh9gqk04nh4j3
MediaWiki:Gadget-XFDcloser.js
8
53745
310940
2026-10-25T13:22:27Z
Isma4l
41797
Abuuray
310940
javascript
text/javascript
/* _______________________________________________________________________________
* | |
* | === DIGADIIN: FAYLKA QALABKA CAALAMIGA AH === |
* | Isbeddellada boggan waxay saameeyaan isticmaaleyaal badan. |
* | Fadlan kala hadal Isbeddellada bogga wada-hadalka ama [[WT:Gadget]] ka hor inta aadan wax ka beddelin. |
* |_______________________________________________________________________________|
*
* Laga dhisay koodka isha ee kaydka GitHub [https://github.com/wikimedia-gadgets/xfdcloser]
* Dhammaan isbeddellada waa in lagu sameeyaa kaydka, haddii kale waa la lumin doonaa.
*
* Si aad u cusboonaysiiso qoraalkan oo aad ka soo qaadato github, waa inaad haysataa kayd maxalli ah oo la habeeyey. Kadib
* raac tilmaamaha ku yaal [https://github.com/wikimedia-gadgets/xfdcloser/blob/master/README.md]
*
* XFDcloser: xirida doodaha tirtiridda ee goobaha XfD, oo ay ku jiraan tallaabooyinka lagu fulinayo xiritaanka; eeg [[WP:XFDC]]
* Qoraa: Evad37
* Shatiga iyo u nisbaynta: [[WP:XFDC#Licencing and attribution]]
*/
/* jshint esversion: 5, esnext:false, laxbreak: true, undef: true, eqnull: true, maxerr: 3000 */
/* globals console, document, window, $, mw, OO */
/* <nowiki> */
(function(){
// Hubi haddii uu yahay maqaal/fayl/bog aan jirin (si looga saaro xiriirada dib u tilmaamaya - backlinks)
var isNonexistentPage = mw.config.get("wgArticleId") === 0;
var isUnlinkableNamespace = [
0, // Maqaal
6, // Fayl
100 // Bogga hore (Portal)
].indexOf(mw.config.get("wgNamespaceNumber")) !== -1;
var isUnlinkablePage = isNonexistentPage && isUnlinkableNamespace;
// Hubi habka wax-ka-beddelka, taariikhda, kala-duwanaanshaha (diff), ama oldid
if ( !isUnlinkablePage && /(?:\?|&)(?:action|diff|oldid)=/.test(window.location.href) ) {
return;
}
// Xulashada XFDcloser
var options;
try {
options = JSON.parse(mw.user.options.get("userjs-xfdc")) || {};
} catch(e) {
options = {};
}
// Hubi haddii uu ku jiro bogga XfD
var xfdpage_regex = /(Articles_for_deletion\/|Miscellany_for_deletion|User:Cyberbot_I\/AfD's_requiring_attention|Wikipedia:WikiProject_Deletion_sorting\/(?!(Flat|Compact)$)|(Categories|Files|Templates|Redirects)_for_discussion(?!\/(Working|Holding_cell|Speedy)))(?!\/?(?:Administrator_instructions|Common_outcomes)$)/;
var isXfdPage = xfdpage_regex.test(mw.config.get("wgPageName"));
// Ku rar bogagga XfD iyo sidoo kala bogagga aan la xiriirin karin
var shouldLoadScript = isXfdPage || isUnlinkablePage;
if ( !shouldLoadScript ) {
return;
}
mw.loader.load( options && options.beta ? "ext.gadget.XFDcloser-core-beta" : "ext.gadget.XFDcloser-core");
})();
/* </nowiki> */
7fleoist10uc6nhmmrcsxkcfcufq8lh
MediaWiki:Gadget-XFDcloser
8
53746
310941
2026-10-25T13:23:17Z
Isma4l
41797
/* */
310941
wikitext
text/x-wiki
[[:en:WP:XFDC|XFDcloser]]: xir doodaha tirtiridda ee goobaha XfD, oo ay ku jiraan tallaabooyinka lagu fulinayo xiritaanka
2s04fl15vzcpey9h5b5kvh1lui9j2mc
MediaWiki:Gadget-XFDcloser-core.js
8
53747
310942
2026-10-25T13:34:19Z
Isma4l
41797
Abuuray
310942
javascript
text/javascript
/* _______________________________________________________________________________
* | |
* | === DIGTOONAAN: FAYLKA GAADHIIGA CAALAMIGA AH === |
* | Isbeddellada boggan waxay saameeyaan isticmaaleyaal badan. |
* | Fadlan kala hadal isbeddellada bogga wadahadalka ama [[WT:Gadget]] ka hor inta aadan wax ka beddelin. |
* |_______________________________________________________________________________|
*
* Laga dhisay koodhka isha ee kaydka GitHub [https://github.com/wikimedia-gadgets/xfdcloser]
* Dhammaan isbeddellada waa in lagu sameeyaa kaydka, haddii kale waa la lumin doonaa.
*
* Si aad qoraalkan uga cusboonaysiiso GitHub, waa inaad haysataa kayd maxalli ah oo la habeeyey. Kadib
* raac tilmaamaha ku yaal [https://github.com/wikimedia-gadgets/xfdcloser/blob/master/README.md]
*
* XFDcloser: xidh wadahadallada tirtiridda ee goobaha XfD, oo ay ku jiraan tallaabooyinka lagu hirgelinayo xidhitaannada; eeg [[WP:XFDC]]
* Qoraa: Evad37
* Shatiga iyo tilmaamaha: [[WP:XFDC#Licencing and attribution]]
*/
/* jshint esversion: 5, esnext:false, laxbreak: true, undef: true, eqnull: true, maxerr: 3000 */
/* globals console, document, window, $, mw, OO */
/* <nowiki> */
!function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);throw(f=new Error("Cannot find module '"+i+"'")).code="MODULE_NOT_FOUND",f}c=n[i]={exports:{}},e[i][0].call(c.exports,function(r){return o(e[i][1][r]||r)},c,c.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}({1:[function(require,module,exports){require("core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.mw=exports.OO=exports.$=void 0;exports.$=window.$,exports.mw=window.mw,exports.OO=window.OO},{"core-js/modules/es.object.define-property.js":195}],2:[function(require,module,exports){var isCallable=require("../internals/is-callable"),tryToString=require("../internals/try-to-string"),$TypeError=TypeError;module.exports=function(argument){if(isCallable(argument))return argument;throw new $TypeError(tryToString(argument)+" is not a function")}},{"../internals/is-callable":85,"../internals/try-to-string":166}],3:[function(require,module,exports){var isConstructor=require("../internals/is-constructor"),tryToString=require("../internals/try-to-string"),$TypeError=TypeError;module.exports=function(argument){if(isConstructor(argument))return argument;throw new $TypeError(tryToString(argument)+" is not a constructor")}},{"../internals/is-constructor":86,"../internals/try-to-string":166}],4:[function(require,module,exports){var isPossiblePrototype=require("../internals/is-possible-prototype"),$String=String,$TypeError=TypeError;module.exports=function(argument){if(isPossiblePrototype(argument))return argument;throw new $TypeError("Can't set "+$String(argument)+" as a prototype")}},{"../internals/is-possible-prototype":90}],5:[function(require,module,exports){var wellKnownSymbol=require("../internals/well-known-symbol"),create=require("../internals/object-create"),require=require("../internals/object-define-property").f,UNSCOPABLES=wellKnownSymbol("unscopables"),ArrayPrototype=Array.prototype;void 0===ArrayPrototype[UNSCOPABLES]&&require(ArrayPrototype,UNSCOPABLES,{configurable:!0,value:create(null)}),module.exports=function(key){ArrayPrototype[UNSCOPABLES][key]=!0}},{"../internals/object-create":107,"../internals/object-define-property":109,"../internals/well-known-symbol":174}],6:[function(require,module,exports){var charAt=require("../internals/string-multibyte").charAt;module.exports=function(S,index,unicode){return index+(unicode?charAt(S,index).length:1)}},{"../internals/string-multibyte":149}],7:[function(require,module,exports){var isPrototypeOf=require("../internals/object-is-prototype-of"),$TypeError=TypeError;module.exports=function(it,Prototype){if(isPrototypeOf(Prototype,it))return it;throw new $TypeError("Incorrect invocation")}},{"../internals/object-is-prototype-of":116}],8:[function(require,module,exports){var isObject=require("../internals/is-object"),$String=String,$TypeError=TypeError;module.exports=function(argument){if(isObject(argument))return argument;throw new $TypeError($String(argument)+" is not an object")}},{"../internals/is-object":89}],9:[function(require,module,exports){require=require("../internals/fails");module.exports=require(function(){var buffer;"function"==typeof ArrayBuffer&&(buffer=new ArrayBuffer(8),Object.isExtensible(buffer))&&Object.defineProperty(buffer,"a",{value:8})})},{"../internals/fails":53}],10:[function(require,module,exports){var $forEach=require("../internals/array-iteration").forEach,require=require("../internals/array-method-is-strict")("forEach");module.exports=require?[].forEach:function(callbackfn){return $forEach(this,callbackfn,1<arguments.length?arguments[1]:void 0)}},{"../internals/array-iteration":13,"../internals/array-method-is-strict":16}],11:[function(require,module,exports){var bind=require("../internals/function-bind-context"),call=require("../internals/function-call"),toObject=require("../internals/to-object"),callWithSafeIterationClosing=require("../internals/call-with-safe-iteration-closing"),isArrayIteratorMethod=require("../internals/is-array-iterator-method"),isConstructor=require("../internals/is-constructor"),lengthOfArrayLike=require("../internals/length-of-array-like"),createProperty=require("../internals/create-property"),getIterator=require("../internals/get-iterator"),getIteratorMethod=require("../internals/get-iterator-method"),$Array=Array;module.exports=function(arrayLike){var length,result,step,iterator,next,value,O=toObject(arrayLike),arrayLike=isConstructor(this),argumentsLength=arguments.length,mapfn=1<argumentsLength?arguments[1]:void 0,mapping=void 0!==mapfn,argumentsLength=(mapping&&(mapfn=bind(mapfn,2<argumentsLength?arguments[2]:void 0)),getIteratorMethod(O)),index=0;if(!argumentsLength||this===$Array&&isArrayIteratorMethod(argumentsLength))for(length=lengthOfArrayLike(O),result=arrayLike?new this(length):$Array(length);index<length;index++)value=mapping?mapfn(O[index],index):O[index],createProperty(result,index,value);else for(result=arrayLike?new this:[],next=(iterator=getIterator(O,argumentsLength)).next;!(step=call(next,iterator)).done;index++)value=mapping?callWithSafeIterationClosing(iterator,mapfn,[step.value,index],!0):step.value,createProperty(result,index,value);return result.length=index,result}},{"../internals/call-with-safe-iteration-closing":21,"../internals/create-property":33,"../internals/function-bind-context":58,"../internals/function-call":61,"../internals/get-iterator":68,"../internals/get-iterator-method":67,"../internals/is-array-iterator-method":83,"../internals/is-constructor":86,"../internals/length-of-array-like":100,"../internals/to-object":161}],12:[function(require,module,exports){function createMethod(IS_INCLUDES){return function($this,el,fromIndex){var O=toIndexedObject($this),length=lengthOfArrayLike(O);if(0!==length){var value,index=toAbsoluteIndex(fromIndex,length);if(IS_INCLUDES&&el!=el){for(;index<length;)if((value=O[index++])!=value)return!0}else for(;index<length;index++)if((IS_INCLUDES||index in O)&&O[index]===el)return IS_INCLUDES||index||0}return!IS_INCLUDES&&-1}}var toIndexedObject=require("../internals/to-indexed-object"),toAbsoluteIndex=require("../internals/to-absolute-index"),lengthOfArrayLike=require("../internals/length-of-array-like");module.exports={includes:createMethod(!0),indexOf:createMethod(!1)}},{"../internals/length-of-array-like":100,"../internals/to-absolute-index":157,"../internals/to-indexed-object":158}],13:[function(require,module,exports){function createMethod(TYPE){var IS_MAP=1===TYPE,IS_FILTER=2===TYPE,IS_SOME=3===TYPE,IS_EVERY=4===TYPE,IS_FIND_INDEX=6===TYPE,IS_FILTER_REJECT=7===TYPE,NO_HOLES=5===TYPE||IS_FIND_INDEX;return function($this,callbackfn,that,specificCreate){for(var value,result,O=toObject($this),self=IndexedObject(O),length=lengthOfArrayLike(self),boundFunction=bind(callbackfn,that),index=0,callbackfn=specificCreate||arraySpeciesCreate,target=IS_MAP?callbackfn($this,length):IS_FILTER||IS_FILTER_REJECT?callbackfn($this,0):void 0;index<length;index++)if((NO_HOLES||index in self)&&(result=boundFunction(value=self[index],index,O),TYPE))if(IS_MAP)target[index]=result;else if(result)switch(TYPE){case 3:return!0;case 5:return value;case 6:return index;case 2:push(target,value)}else switch(TYPE){case 4:return!1;case 7:push(target,value)}return IS_FIND_INDEX?-1:IS_SOME||IS_EVERY?IS_EVERY:target}}var bind=require("../internals/function-bind-context"),uncurryThis=require("../internals/function-uncurry-this"),IndexedObject=require("../internals/indexed-object"),toObject=require("../internals/to-object"),lengthOfArrayLike=require("../internals/length-of-array-like"),arraySpeciesCreate=require("../internals/array-species-create"),push=uncurryThis([].push);module.exports={forEach:createMethod(0),map:createMethod(1),filter:createMethod(2),some:createMethod(3),every:createMethod(4),find:createMethod(5),findIndex:createMethod(6),filterReject:createMethod(7)}},{"../internals/array-species-create":20,"../internals/function-bind-context":58,"../internals/function-uncurry-this":65,"../internals/indexed-object":78,"../internals/length-of-array-like":100,"../internals/to-object":161}],14:[function(require,module,exports){var apply=require("../internals/function-apply"),toIndexedObject=require("../internals/to-indexed-object"),toIntegerOrInfinity=require("../internals/to-integer-or-infinity"),lengthOfArrayLike=require("../internals/length-of-array-like"),require=require("../internals/array-method-is-strict"),min=Math.min,$lastIndexOf=[].lastIndexOf,NEGATIVE_ZERO=!!$lastIndexOf&&1/[1].lastIndexOf(1,-0)<0,require=require("lastIndexOf");module.exports=NEGATIVE_ZERO||!require?function(searchElement){if(NEGATIVE_ZERO)return apply($lastIndexOf,this,arguments)||0;var O=toIndexedObject(this),length=lengthOfArrayLike(O);if(0!==length){var index=length-1;for((index=1<arguments.length?min(index,toIntegerOrInfinity(arguments[1])):index)<0&&(index=length+index);0<=index;index--)if(index in O&&O[index]===searchElement)return index||0}return-1}:$lastIndexOf},{"../internals/array-method-is-strict":16,"../internals/function-apply":57,"../internals/length-of-array-like":100,"../internals/to-indexed-object":158,"../internals/to-integer-or-infinity":159}],15:[function(require,module,exports){var fails=require("../internals/fails"),wellKnownSymbol=require("../internals/well-known-symbol"),V8_VERSION=require("../internals/environment-v8-version"),SPECIES=wellKnownSymbol("species");module.exports=function(METHOD_NAME){return 51<=V8_VERSION||!fails(function(){var array=[];return(array.constructor={})[SPECIES]=function(){return{foo:1}},1!==array[METHOD_NAME](Boolean).foo})}},{"../internals/environment-v8-version":50,"../internals/fails":53,"../internals/well-known-symbol":174}],16:[function(require,module,exports){var fails=require("../internals/fails");module.exports=function(METHOD_NAME,argument){var method=[][METHOD_NAME];return!!method&&fails(function(){method.call(null,argument||function(){return 1},1)})}},{"../internals/fails":53}],17:[function(require,module,exports){function createMethod(IS_RIGHT){return function(that,callbackfn,argumentsLength,memo){var O=toObject(that),self=IndexedObject(O),length=lengthOfArrayLike(O);if(aCallable(callbackfn),0===length&&argumentsLength<2)throw new $TypeError(REDUCE_EMPTY);var index=IS_RIGHT?length-1:0,i=IS_RIGHT?-1:1;if(argumentsLength<2)for(;;){if(index in self){memo=self[index],index+=i;break}if(index+=i,IS_RIGHT?index<0:length<=index)throw new $TypeError(REDUCE_EMPTY)}for(;IS_RIGHT?0<=index:index<length;index+=i)index in self&&(memo=callbackfn(memo,self[index],index,O));return memo}}var aCallable=require("../internals/a-callable"),toObject=require("../internals/to-object"),IndexedObject=require("../internals/indexed-object"),lengthOfArrayLike=require("../internals/length-of-array-like"),$TypeError=TypeError,REDUCE_EMPTY="Reduce of empty array with no initial value";module.exports={left:createMethod(!1),right:createMethod(!0)}},{"../internals/a-callable":2,"../internals/indexed-object":78,"../internals/length-of-array-like":100,"../internals/to-object":161}],18:[function(require,module,exports){require=require("../internals/function-uncurry-this");module.exports=require([].slice)},{"../internals/function-uncurry-this":65}],19:[function(require,module,exports){var isArray=require("../internals/is-array"),isConstructor=require("../internals/is-constructor"),isObject=require("../internals/is-object"),SPECIES=require("../internals/well-known-symbol")("species"),$Array=Array;module.exports=function(originalArray){var C;return void 0===(C=isArray(originalArray)&&(C=originalArray.constructor,isConstructor(C)&&(C===$Array||isArray(C.prototype))||isObject(C)&&null===(C=C[SPECIES]))?void 0:C)?$Array:C}},{"../internals/is-array":84,"../internals/is-constructor":86,"../internals/is-object":89,"../internals/well-known-symbol":174}],20:[function(require,module,exports){var arraySpeciesConstructor=require("../internals/array-species-constructor");module.exports=function(originalArray,length){return new(arraySpeciesConstructor(originalArray))(0===length?0:length)}},{"../internals/array-species-constructor":19}],21:[function(require,module,exports){var anObject=require("../internals/an-object"),iteratorClose=require("../internals/iterator-close");module.exports=function(iterator,fn,value,ENTRIES){try{return ENTRIES?fn(anObject(value)[0],value[1]):fn(value)}catch(error){iteratorClose(iterator,"throw",error)}}},{"../internals/an-object":8,"../internals/iterator-close":95}],22:[function(require,module,exports){var ITERATOR=require("../internals/well-known-symbol")("iterator"),SAFE_CLOSING=!1;try{var called=0,iteratorWithReturn={next:function(){return{done:!!called++}},return:function(){SAFE_CLOSING=!0}};iteratorWithReturn[ITERATOR]=function(){return this},Array.from(iteratorWithReturn,function(){throw 2})}catch(error){}module.exports=function(exec,SKIP_CLOSING){try{if(!SKIP_CLOSING&&!SAFE_CLOSING)return!1}catch(error){return!1}var ITERATION_SUPPORT=!1;try{var object={};object[ITERATOR]=function(){return{next:function(){return{done:ITERATION_SUPPORT=!0}}}},exec(object)}catch(error){}return ITERATION_SUPPORT}},{"../internals/well-known-symbol":174}],23:[function(require,module,exports){var require=require("../internals/function-uncurry-this"),toString=require({}.toString),stringSlice=require("".slice);module.exports=function(it){return stringSlice(toString(it),8,-1)}},{"../internals/function-uncurry-this":65}],24:[function(require,module,exports){var TO_STRING_TAG_SUPPORT=require("../internals/to-string-tag-support"),isCallable=require("../internals/is-callable"),classofRaw=require("../internals/classof-raw"),TO_STRING_TAG=require("../internals/well-known-symbol")("toStringTag"),$Object=Object,CORRECT_ARGUMENTS="Arguments"===classofRaw(function(){return arguments}());module.exports=TO_STRING_TAG_SUPPORT?classofRaw:function(it){var tag;return void 0===it?"Undefined":null===it?"Null":"string"==typeof(tag=((it,key)=>{try{return it[key]}catch(error){}})(it=$Object(it),TO_STRING_TAG))?tag:CORRECT_ARGUMENTS?classofRaw(it):"Object"===(tag=classofRaw(it))&&isCallable(it.callee)?"Arguments":tag}},{"../internals/classof-raw":23,"../internals/is-callable":85,"../internals/to-string-tag-support":164,"../internals/well-known-symbol":174}],25:[function(require,module,exports){function uncaughtFrozenStore(state){return state.frozen||(state.frozen=new UncaughtFrozenStore)}function UncaughtFrozenStore(){this.entries=[]}function findUncaughtFrozen(store,key){return find(store.entries,function(it){return it[0]===key})}var uncurryThis=require("../internals/function-uncurry-this"),defineBuiltIns=require("../internals/define-built-ins"),getWeakData=require("../internals/internal-metadata").getWeakData,anInstance=require("../internals/an-instance"),anObject=require("../internals/an-object"),isNullOrUndefined=require("../internals/is-null-or-undefined"),isObject=require("../internals/is-object"),iterate=require("../internals/iterate"),ArrayIterationModule=require("../internals/array-iteration"),hasOwn=require("../internals/has-own-property"),require=require("../internals/internal-state"),setInternalState=require.set,internalStateGetterFor=require.getterFor,find=ArrayIterationModule.find,findIndex=ArrayIterationModule.findIndex,splice=uncurryThis([].splice),id=0;UncaughtFrozenStore.prototype={get:function(key){key=findUncaughtFrozen(this,key);if(key)return key[1]},has:function(key){return!!findUncaughtFrozen(this,key)},set:function(key,value){var entry=findUncaughtFrozen(this,key);entry?entry[1]=value:this.entries.push([key,value])},delete:function(key){var index=findIndex(this.entries,function(it){return it[0]===key});return~index&&splice(this.entries,index,1),!!~index}},module.exports={getConstructor:function(wrapper,CONSTRUCTOR_NAME,IS_MAP,ADDER){function define(that,key,value){var state=getInternalState(that),data=getWeakData(anObject(key),!0);return!0===data?uncaughtFrozenStore(state).set(key,value):data[state.id]=value,that}var wrapper=wrapper(function(that,iterable){anInstance(that,Prototype),setInternalState(that,{type:CONSTRUCTOR_NAME,id:id++,frozen:null}),isNullOrUndefined(iterable)||iterate(iterable,that[ADDER],{that:that,AS_ENTRIES:IS_MAP})}),Prototype=wrapper.prototype,getInternalState=internalStateGetterFor(CONSTRUCTOR_NAME);return defineBuiltIns(Prototype,{delete:function(key){var data,state=getInternalState(this);return!!isObject(key)&&(!0===(data=getWeakData(key))?uncaughtFrozenStore(state).delete(key):data&&hasOwn(data,state.id)&&delete data[state.id])},has:function(key){var data,state=getInternalState(this);return!!isObject(key)&&(!0===(data=getWeakData(key))?uncaughtFrozenStore(state).has(key):data&&hasOwn(data,state.id))}}),defineBuiltIns(Prototype,IS_MAP?{get:function(key){var data,state=getInternalState(this);if(isObject(key))return!0===(data=getWeakData(key))?uncaughtFrozenStore(state).get(key):data?data[state.id]:void 0},set:function(key,value){return define(this,key,value)}}:{add:function(value){return define(this,value,!0)}}),wrapper}}},{"../internals/an-instance":7,"../internals/an-object":8,"../internals/array-iteration":13,"../internals/define-built-ins":37,"../internals/function-uncurry-this":65,"../internals/has-own-property":73,"../internals/internal-metadata":81,"../internals/internal-state":82,"../internals/is-null-or-undefined":88,"../internals/is-object":89,"../internals/iterate":94}],26:[function(require,module,exports){var $=require("../internals/export"),globalThis=require("../internals/global-this"),uncurryThis=require("../internals/function-uncurry-this"),isForced=require("../internals/is-forced"),defineBuiltIn=require("../internals/define-built-in"),InternalMetadataModule=require("../internals/internal-metadata"),iterate=require("../internals/iterate"),anInstance=require("../internals/an-instance"),isCallable=require("../internals/is-callable"),isNullOrUndefined=require("../internals/is-null-or-undefined"),isObject=require("../internals/is-object"),fails=require("../internals/fails"),checkCorrectnessOfIteration=require("../internals/check-correctness-of-iteration"),setToStringTag=require("../internals/set-to-string-tag"),inheritIfRequired=require("../internals/inherit-if-required");module.exports=function(CONSTRUCTOR_NAME,wrapper,common){function fixMethod(KEY){var uncurriedNativeMethod=uncurryThis(NativePrototype[KEY]);defineBuiltIn(NativePrototype,KEY,"add"===KEY?function(value){return uncurriedNativeMethod(this,0===value?0:value),this}:"delete"===KEY?function(key){return!(IS_WEAK&&!isObject(key))&&uncurriedNativeMethod(this,0===key?0:key)}:"get"===KEY?function(key){return IS_WEAK&&!isObject(key)?void 0:uncurriedNativeMethod(this,0===key?0:key)}:"has"===KEY?function(key){return!(IS_WEAK&&!isObject(key))&&uncurriedNativeMethod(this,0===key?0:key)}:function(key,value){return uncurriedNativeMethod(this,0===key?0:key,value),this})}var instance,HASNT_CHAINING,THROWS_ON_PRIMITIVES,ACCEPT_ITERABLES,BUGGY_ZERO,IS_MAP=-1!==CONSTRUCTOR_NAME.indexOf("Map"),IS_WEAK=-1!==CONSTRUCTOR_NAME.indexOf("Weak"),ADDER=IS_MAP?"set":"add",NativeConstructor=globalThis[CONSTRUCTOR_NAME],NativePrototype=NativeConstructor&&NativeConstructor.prototype,Constructor=NativeConstructor,exported={};return isForced(CONSTRUCTOR_NAME,!isCallable(NativeConstructor)||!(IS_WEAK||NativePrototype.forEach&&!fails(function(){(new NativeConstructor).entries().next()})))?(Constructor=common.getConstructor(wrapper,CONSTRUCTOR_NAME,IS_MAP,ADDER),InternalMetadataModule.enable()):isForced(CONSTRUCTOR_NAME,!0)&&(HASNT_CHAINING=(instance=new Constructor)[ADDER](IS_WEAK?{}:-0,1)!==instance,THROWS_ON_PRIMITIVES=fails(function(){instance.has(1)}),ACCEPT_ITERABLES=checkCorrectnessOfIteration(function(iterable){new NativeConstructor(iterable)}),BUGGY_ZERO=!IS_WEAK&&fails(function(){for(var $instance=new NativeConstructor,index=5;index--;)$instance[ADDER](index,index);return!$instance.has(-0)}),ACCEPT_ITERABLES||(((Constructor=wrapper(function(dummy,iterable){anInstance(dummy,NativePrototype);dummy=inheritIfRequired(new NativeConstructor,dummy,Constructor);return isNullOrUndefined(iterable)||iterate(iterable,dummy[ADDER],{that:dummy,AS_ENTRIES:IS_MAP}),dummy})).prototype=NativePrototype).constructor=Constructor),(THROWS_ON_PRIMITIVES||BUGGY_ZERO)&&(fixMethod("delete"),fixMethod("has"),IS_MAP)&&fixMethod("get"),(BUGGY_ZERO||HASNT_CHAINING)&&fixMethod(ADDER),IS_WEAK)&&NativePrototype.clear&&delete NativePrototype.clear,$({global:!0,constructor:!0,forced:(exported[CONSTRUCTOR_NAME]=Constructor)!==NativeConstructor},exported),setToStringTag(Constructor,CONSTRUCTOR_NAME),IS_WEAK||common.setStrong(Constructor,CONSTRUCTOR_NAME,IS_MAP),Constructor}},{"../internals/an-instance":7,"../internals/check-correctness-of-iteration":22,"../internals/define-built-in":36,"../internals/export":52,"../internals/fails":53,"../internals/function-uncurry-this":65,"../internals/global-this":72,"../internals/inherit-if-required":79,"../internals/internal-metadata":81,"../internals/is-callable":85,"../internals/is-forced":87,"../internals/is-null-or-undefined":88,"../internals/is-object":89,"../internals/iterate":94,"../internals/set-to-string-tag":144}],27:[function(require,module,exports){var hasOwn=require("../internals/has-own-property"),ownKeys=require("../internals/own-keys"),getOwnPropertyDescriptorModule=require("../internals/object-get-own-property-descriptor"),definePropertyModule=require("../internals/object-define-property");module.exports=function(target,source,exceptions){for(var keys=ownKeys(source),defineProperty=definePropertyModule.f,getOwnPropertyDescriptor=getOwnPropertyDescriptorModule.f,i=0;i<keys.length;i++){var key=keys[i];hasOwn(target,key)||exceptions&&hasOwn(exceptions,key)||defineProperty(target,key,getOwnPropertyDescriptor(source,key))}}},{"../internals/has-own-property":73,"../internals/object-define-property":109,"../internals/object-get-own-property-descriptor":110,"../internals/own-keys":124}],28:[function(require,module,exports){var MATCH=require("../internals/well-known-symbol")("match");module.exports=function(METHOD_NAME){var regexp=/./;try{"/./"[METHOD_NAME](regexp)}catch(error1){try{return regexp[MATCH]=!1,"/./"[METHOD_NAME](regexp)}catch(error2){}}return!1}},{"../internals/well-known-symbol":174}],29:[function(require,module,exports){require=require("../internals/fails");module.exports=!require(function(){function F(){}return F.prototype.constructor=null,Object.getPrototypeOf(new F)!==F.prototype})},{"../internals/fails":53}],30:[function(require,module,exports){module.exports=function(value,done){return{value:value,done:done}}},{}],31:[function(require,module,exports){var DESCRIPTORS=require("../internals/descriptors"),definePropertyModule=require("../internals/object-define-property"),createPropertyDescriptor=require("../internals/create-property-descriptor");module.exports=DESCRIPTORS?function(object,key,value){return definePropertyModule.f(object,key,createPropertyDescriptor(1,value))}:function(object,key,value){return object[key]=value,object}},{"../internals/create-property-descriptor":32,"../internals/descriptors":39,"../internals/object-define-property":109}],32:[function(require,module,exports){module.exports=function(bitmap,value){return{enumerable:!(1&bitmap),configurable:!(2&bitmap),writable:!(4&bitmap),value:value}}},{}],33:[function(require,module,exports){var DESCRIPTORS=require("../internals/descriptors"),definePropertyModule=require("../internals/object-define-property"),createPropertyDescriptor=require("../internals/create-property-descriptor");module.exports=function(object,key,value){DESCRIPTORS?definePropertyModule.f(object,key,createPropertyDescriptor(0,value)):object[key]=value}},{"../internals/create-property-descriptor":32,"../internals/descriptors":39,"../internals/object-define-property":109}],34:[function(require,module,exports){var anObject=require("../internals/an-object"),ordinaryToPrimitive=require("../internals/ordinary-to-primitive"),$TypeError=TypeError;module.exports=function(hint){if(anObject(this),"string"===hint||"default"===hint)hint="string";else if("number"!==hint)throw new $TypeError("Incorrect hint");return ordinaryToPrimitive(this,hint)}},{"../internals/an-object":8,"../internals/ordinary-to-primitive":123}],35:[function(require,module,exports){var makeBuiltIn=require("../internals/make-built-in"),defineProperty=require("../internals/object-define-property");module.exports=function(target,name,descriptor){return descriptor.get&&makeBuiltIn(descriptor.get,name,{getter:!0}),descriptor.set&&makeBuiltIn(descriptor.set,name,{setter:!0}),defineProperty.f(target,name,descriptor)}},{"../internals/make-built-in":101,"../internals/object-define-property":109}],36:[function(require,module,exports){var isCallable=require("../internals/is-callable"),definePropertyModule=require("../internals/object-define-property"),makeBuiltIn=require("../internals/make-built-in"),defineGlobalProperty=require("../internals/define-global-property");module.exports=function(O,key,value,options){var simple=(options=options||{}).enumerable,name=void 0!==options.name?options.name:key;if(isCallable(value)&&makeBuiltIn(value,name,options),options.global)simple?O[key]=value:defineGlobalProperty(key,value);else{try{options.unsafe?O[key]&&(simple=!0):delete O[key]}catch(error){}simple?O[key]=value:definePropertyModule.f(O,key,{value:value,enumerable:!1,configurable:!options.nonConfigurable,writable:!options.nonWritable})}return O}},{"../internals/define-global-property":38,"../internals/is-callable":85,"../internals/make-built-in":101,"../internals/object-define-property":109}],37:[function(require,module,exports){var defineBuiltIn=require("../internals/define-built-in");module.exports=function(target,src,options){for(var key in src)defineBuiltIn(target,key,src[key],options);return target}},{"../internals/define-built-in":36}],38:[function(require,module,exports){var globalThis=require("../internals/global-this"),defineProperty=Object.defineProperty;module.exports=function(key,value){try{defineProperty(globalThis,key,{value:value,configurable:!0,writable:!0})}catch(error){globalThis[key]=value}return value}},{"../internals/global-this":72}],39:[function(require,module,exports){require=require("../internals/fails");module.exports=!require(function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]})},{"../internals/fails":53}],40:[function(require,module,exports){var globalThis=require("../internals/global-this"),require=require("../internals/is-object"),document=globalThis.document,EXISTS=require(document)&&require(document.createElement);module.exports=function(it){return EXISTS?document.createElement(it):{}}},{"../internals/global-this":72,"../internals/is-object":89}],41:[function(require,module,exports){var $TypeError=TypeError;module.exports=function(it){if(9007199254740991<it)throw $TypeError("Maximum allowed index exceeded");return it}},{}],42:[function(require,module,exports){module.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},{}],43:[function(require,module,exports){require=require("../internals/document-create-element")("span").classList,require=require&&require.constructor&&require.constructor.prototype;module.exports=require===Object.prototype?void 0:require},{"../internals/document-create-element":40}],44:[function(require,module,exports){module.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},{}],45:[function(require,module,exports){require=require("../internals/environment-user-agent");module.exports=/ipad|iphone|ipod/i.test(require)&&"undefined"!=typeof Pebble},{"../internals/environment-user-agent":49}],46:[function(require,module,exports){require=require("../internals/environment-user-agent");module.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(require)},{"../internals/environment-user-agent":49}],47:[function(require,module,exports){require=require("../internals/environment");module.exports="NODE"===require},{"../internals/environment":51}],48:[function(require,module,exports){require=require("../internals/environment-user-agent");module.exports=/web0s(?!.*chrome)/i.test(require)},{"../internals/environment-user-agent":49}],49:[function(require,module,exports){require=require("../internals/global-this").navigator,require=require&&require.userAgent;module.exports=require?String(require):""},{"../internals/global-this":72}],50:[function(require,module,exports){var match,version,globalThis=require("../internals/global-this"),require=require("../internals/environment-user-agent"),process=globalThis.process,globalThis=globalThis.Deno,process=process&&process.versions||globalThis&&globalThis.version,globalThis=process&&process.v8;!(version=globalThis?0<(match=globalThis.split("."))[0]&&match[0]<4?1:+(match[0]+match[1]):version)&&require&&(!(match=require.match(/Edge\/(\d+)/))||74<=match[1])&&(match=require.match(/Chrome\/(\d+)/))&&(version=+match[1]),module.exports=version},{"../internals/environment-user-agent":49,"../internals/global-this":72}],51:[function(require,module,exports){function userAgentStartsWith(string){return userAgent.slice(0,string.length)===string}var globalThis=require("../internals/global-this"),userAgent=require("../internals/environment-user-agent"),require=require("../internals/classof-raw");module.exports=userAgentStartsWith("Bun/")?"BUN":userAgentStartsWith("Cloudflare-Workers")?"CLOUDFLARE":userAgentStartsWith("Deno/")?"DENO":userAgentStartsWith("Node.js/")?"NODE":globalThis.Bun&&"string"==typeof Bun.version?"BUN":globalThis.Deno&&"object"==typeof Deno.version?"DENO":"process"===require(globalThis.process)?"NODE":globalThis.window&&globalThis.document?"BROWSER":"REST"},{"../internals/classof-raw":23,"../internals/environment-user-agent":49,"../internals/global-this":72}],52:[function(require,module,exports){var globalThis=require("../internals/global-this"),getOwnPropertyDescriptor=require("../internals/object-get-own-property-descriptor").f,createNonEnumerableProperty=require("../internals/create-non-enumerable-property"),defineBuiltIn=require("../internals/define-built-in"),defineGlobalProperty=require("../internals/define-global-property"),copyConstructorProperties=require("../internals/copy-constructor-properties"),isForced=require("../internals/is-forced");module.exports=function(options,source){var key,sourceProperty,descriptor,TARGET=options.target,GLOBAL=options.global,STATIC=options.stat,target=GLOBAL?globalThis:STATIC?globalThis[TARGET]||defineGlobalProperty(TARGET,{}):globalThis[TARGET]&&globalThis[TARGET].prototype;if(target)for(key in source){if(sourceProperty=source[key],descriptor=options.dontCallGetSet?(descriptor=getOwnPropertyDescriptor(target,key))&&descriptor.value:target[key],!isForced(GLOBAL?key:TARGET+(STATIC?".":"#")+key,options.forced)&&void 0!==descriptor){if(typeof sourceProperty==typeof descriptor)continue;copyConstructorProperties(sourceProperty,descriptor)}(options.sham||descriptor&&descriptor.sham)&&createNonEnumerableProperty(sourceProperty,"sham",!0),defineBuiltIn(target,key,sourceProperty,options)}}},{"../internals/copy-constructor-properties":27,"../internals/create-non-enumerable-property":31,"../internals/define-built-in":36,"../internals/define-global-property":38,"../internals/global-this":72,"../internals/is-forced":87,"../internals/object-get-own-property-descriptor":110}],53:[function(require,module,exports){module.exports=function(exec){try{return!!exec()}catch(error){return!0}}},{}],54:[function(require,module,exports){require("../modules/es.regexp.exec");var call=require("../internals/function-call"),defineBuiltIn=require("../internals/define-built-in"),regexpExec=require("../internals/regexp-exec"),fails=require("../internals/fails"),wellKnownSymbol=require("../internals/well-known-symbol"),createNonEnumerableProperty=require("../internals/create-non-enumerable-property"),SPECIES=wellKnownSymbol("species"),RegExpPrototype=RegExp.prototype;module.exports=function(KEY,exec,FORCED,SHAM){var nativeRegExpMethod,SYMBOL=wellKnownSymbol(KEY),DELEGATES_TO_SYMBOL=!fails(function(){var O={};return O[SYMBOL]=function(){return 7},7!==""[KEY](O)}),DELEGATES_TO_EXEC=DELEGATES_TO_SYMBOL&&!fails(function(){var execCalled=!1,re=/a/;return"split"===KEY&&((re={constructor:{}}).constructor[SPECIES]=function(){return re},re.flags="",re[SYMBOL]=/./[SYMBOL]),re.exec=function(){return execCalled=!0,null},re[SYMBOL](""),!execCalled});DELEGATES_TO_SYMBOL&&DELEGATES_TO_EXEC&&!FORCED||(nativeRegExpMethod=/./[SYMBOL],DELEGATES_TO_EXEC=exec(SYMBOL,""[KEY],function(nativeMethod,regexp,str,arg2,forceStringMethod){var $exec=regexp.exec;return $exec===regexpExec||$exec===RegExpPrototype.exec?DELEGATES_TO_SYMBOL&&!forceStringMethod?{done:!0,value:call(nativeRegExpMethod,regexp,str,arg2)}:{done:!0,value:call(nativeMethod,str,regexp,arg2)}:{done:!1}}),defineBuiltIn(String.prototype,KEY,DELEGATES_TO_EXEC[0]),defineBuiltIn(RegExpPrototype,SYMBOL,DELEGATES_TO_EXEC[1])),SHAM&&createNonEnumerableProperty(RegExpPrototype[SYMBOL],"sham",!0)}},{"../internals/create-non-enumerable-property":31,"../internals/define-built-in":36,"../internals/fails":53,"../internals/function-call":61,"../internals/regexp-exec":134,"../internals/well-known-symbol":174,"../modules/es.regexp.exec":214}],55:[function(require,module,exports){function flattenIntoArray(target,original,source,sourceLen,start,depth,mapper,thisArg){for(var element,elementLen,targetIndex=start,sourceIndex=0,mapFn=!!mapper&&bind(mapper,thisArg);sourceIndex<sourceLen;)sourceIndex in source&&(element=mapFn?mapFn(source[sourceIndex],sourceIndex,original):source[sourceIndex],0<depth&&isArray(element)?(elementLen=lengthOfArrayLike(element),targetIndex=flattenIntoArray(target,original,element,elementLen,targetIndex,depth-1)-1):(doesNotExceedSafeInteger(targetIndex+1),target[targetIndex]=element),targetIndex++),sourceIndex++;return targetIndex}var isArray=require("../internals/is-array"),lengthOfArrayLike=require("../internals/length-of-array-like"),doesNotExceedSafeInteger=require("../internals/does-not-exceed-safe-integer"),bind=require("../internals/function-bind-context");module.exports=flattenIntoArray},{"../internals/does-not-exceed-safe-integer":41,"../internals/function-bind-context":58,"../internals/is-array":84,"../internals/length-of-array-like":100}],56:[function(require,module,exports){require=require("../internals/fails");module.exports=!require(function(){return Object.isExtensible(Object.preventExtensions({}))})},{"../internals/fails":53}],57:[function(require,module,exports){var require=require("../internals/function-bind-native"),FunctionPrototype=Function.prototype,apply=FunctionPrototype.apply,call=FunctionPrototype.call;module.exports="object"==typeof Reflect&&Reflect.apply||(require?call.bind(apply):function(){return call.apply(apply,arguments)})},{"../internals/function-bind-native":59}],58:[function(require,module,exports){var uncurryThis=require("../internals/function-uncurry-this-clause"),aCallable=require("../internals/a-callable"),NATIVE_BIND=require("../internals/function-bind-native"),bind=uncurryThis(uncurryThis.bind);module.exports=function(fn,that){return aCallable(fn),void 0===that?fn:NATIVE_BIND?bind(fn,that):function(){return fn.apply(that,arguments)}}},{"../internals/a-callable":2,"../internals/function-bind-native":59,"../internals/function-uncurry-this-clause":64}],59:[function(require,module,exports){require=require("../internals/fails");module.exports=!require(function(){var test=function(){}.bind();return"function"!=typeof test||test.hasOwnProperty("prototype")})},{"../internals/fails":53}],60:[function(require,module,exports){var uncurryThis=require("../internals/function-uncurry-this"),aCallable=require("../internals/a-callable"),isObject=require("../internals/is-object"),hasOwn=require("../internals/has-own-property"),arraySlice=require("../internals/array-slice"),require=require("../internals/function-bind-native"),$Function=Function,concat=uncurryThis([].concat),join=uncurryThis([].join),factories={};module.exports=require?$Function.bind:function(that){var F=aCallable(this),Prototype=F.prototype,partArgs=arraySlice(arguments,1),boundFunction=function(){var args=concat(partArgs,arraySlice(arguments));return this instanceof boundFunction?((C,argsLength,args)=>{if(!hasOwn(factories,argsLength)){for(var list=[],i=0;i<argsLength;i++)list[i]="a["+i+"]";factories[argsLength]=$Function("C,a","return new C("+join(list,",")+")")}return factories[argsLength](C,args)})(F,args.length,args):F.apply(that,args)};return isObject(Prototype)&&(boundFunction.prototype=Prototype),boundFunction}},{"../internals/a-callable":2,"../internals/array-slice":18,"../internals/function-bind-native":59,"../internals/function-uncurry-this":65,"../internals/has-own-property":73,"../internals/is-object":89}],61:[function(require,module,exports){var require=require("../internals/function-bind-native"),call=Function.prototype.call;module.exports=require?call.bind(call):function(){return call.apply(call,arguments)}}},{"../internals/function-bind-native":59}],62:[function(require,module,exports){var DESCRIPTORS=require("../internals/descriptors"),require=require("../internals/has-own-property"),FunctionPrototype=Function.prototype,getDescriptor=DESCRIPTORS&&Object.getOwnPropertyDescriptor,require=require(FunctionPrototype,"name"),PROPER=require&&"something"===function(){}.name,DESCRIPTORS=require&&(!DESCRIPTORS||getDescriptor(FunctionPrototype,"name").configurable);module.exports={EXISTS:require,PROPER:PROPER,CONFIGURABLE:DESCRIPTORS}},{"../internals/descriptors":39,"../internals/has-own-property":73}],63:[function(require,module,exports){var uncurryThis=require("../internals/function-uncurry-this"),aCallable=require("../internals/a-callable");module.exports=function(object,key,method){try{return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object,key)[method]))}catch(error){}}},{"../internals/a-callable":2,"../internals/function-uncurry-this":65}],64:[function(require,module,exports){var classofRaw=require("../internals/classof-raw"),uncurryThis=require("../internals/function-uncurry-this");module.exports=function(fn){if("Function"===classofRaw(fn))return uncurryThis(fn)}}},{"../internals/classof-raw":23,"../internals/function-uncurry-this":65}],65:[function(require,module,exports){var require=require("../internals/function-bind-native"),FunctionPrototype=Function.prototype,call=FunctionPrototype.call,FunctionPrototype=require&&FunctionPrototype.bind.bind(call,call);module.exports=require?FunctionPrototype:function(fn){return function(){return call.apply(fn,arguments)}}},{"../internals/function-bind-native":59}],66:[function(require,module,exports){var globalThis=require("../internals/global-this"),isCallable=require("../internals/is-callable");module.exports=function(namespace,method){return arguments.length<2?(argument=globalThis[namespace],isCallable(argument)?argument:void 0):globalThis[namespace]&&globalThis[namespace][method];var argument}},{"../internals/global-this":72,"../internals/is-callable":85}],67:[function(require,module,exports){var classof=require("../internals/classof"),getMethod=require("../internals/get-method"),isNullOrUndefined=require("../internals/is-null-or-undefined"),Iterators=require("../internals/iterators"),ITERATOR=require("../internals/well-known-symbol")("iterator");module.exports=function(it){if(!isNullOrUndefined(it))return getMethod(it,ITERATOR)||getMethod(it,"@@iterator")||Iterators[classof(it)]}},{"../internals/classof":24,"../internals/get-method":70,"../internals/is-null-or-undefined":88,"../internals/iterators":99,"../internals/well-known-symbol":174}],68:[function(require,module,exports){var call=require("../internals/function-call"),aCallable=require("../internals/a-callable"),anObject=require("../internals/an-object"),tryToString=require("../internals/try-to-string"),getIteratorMethod=require("../internals/get-iterator-method"),$TypeError=TypeError;module.exports=function(argument,usingIterator){usingIterator=arguments.length<2?getIteratorMethod(argument):usingIterator;if(aCallable(usingIterator))return anObject(call(usingIterator,argument));throw new $TypeError(tryToString(argument)+" is not iterable")}},{"../internals/a-callable":2,"../internals/an-object":8,"../internals/function-call":61,"../internals/get-iterator-method":67,"../internals/try-to-string":166}],69:[function(require,module,exports){var uncurryThis=require("../internals/function-uncurry-this"),isArray=require("../internals/is-array"),isCallable=require("../internals/is-callable"),classof=require("../internals/classof-raw"),toString=require("../internals/to-string"),push=uncurryThis([].push);module.exports=function(replacer){if(isCallable(replacer))return replacer;if(isArray(replacer)){for(var rawLength=replacer.length,keys=[],i=0;i<rawLength;i++){var element=replacer[i];"string"==typeof element?push(keys,element):"number"!=typeof element&&"Number"!==classof(element)&&"String"!==classof(element)||push(keys,toString(element))}var keysLength=keys.length,root=!0;return function(key,value){if(root)return root=!1,value;if(isArray(this))return value;for(var j=0;j<keysLength;j++)if(keys[j]===key)return value}}}},{"../internals/classof-raw":23,"../internals/function-uncurry-this":65,"../internals/is-array":84,"../internals/is-callable":85,"../internals/to-string":165}],70:[function(require,module,exports){var aCallable=require("../internals/a-callable"),isNullOrUndefined=require("../internals/is-null-or-undefined");module.exports=function(V,P){V=V[P];return isNullOrUndefined(V)?void 0:aCallable(V)}},{"../internals/a-callable":2,"../internals/is-null-or-undefined":88}],71:[function(require,module,exports){var uncurryThis=require("../internals/function-uncurry-this"),toObject=require("../internals/to-object"),floor=Math.floor,charAt=uncurryThis("".charAt),replace=uncurryThis("".replace),stringSlice=uncurryThis("".slice),SUBSTITUTION_SYMBOLS=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,SUBSTITUTION_SYMBOLS_NO_NAMED=/\$([$&'`]|\d{1,2})/g;module.exports=function(matched,str,position,captures,namedCaptures,replacement){var tailPos=position+matched.length,m=captures.length,symbols=SUBSTITUTION_SYMBOLS_NO_NAMED;return void 0!==namedCaptures&&(namedCaptures=toObject(namedCaptures),symbols=SUBSTITUTION_SYMBOLS),replace(replacement,symbols,function(match,ch){var capture;switch(charAt(ch,0)){case"$":return"$";case"&":return matched;case"`":return stringSlice(str,0,position);case"'":return stringSlice(str,tailPos);case"<":capture=namedCaptures[stringSlice(ch,1,-1)];break;default:var f,n=+ch;if(0==n)return match;if(m<n)return 0!==(f=floor(n/10))&&f<=m?void 0===captures[f-1]?charAt(ch,1):captures[f-1]+charAt(ch,1):match;capture=captures[n-1]}return void 0===capture?"":capture})}},{"../internals/function-uncurry-this":65,"../internals/to-object":161}],72:[function(require,module,exports){!function(global){!function(){function check(it){return it&&it.Math===Math&&it}module.exports=check("object"==typeof globalThis&&globalThis)||check("object"==typeof window&&window)||check("object"==typeof self&&self)||check("object"==typeof global&&global)||check("object"==typeof this&&this)||function(){return this}()||Function("return this")()}.call(this)}.call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],73:[function(require,module,exports){var uncurryThis=require("../internals/function-uncurry-this"),toObject=require("../internals/to-object"),hasOwnProperty=uncurryThis({}.hasOwnProperty);module.exports=Object.hasOwn||function(it,key){return hasOwnProperty(toObject(it),key)}},{"../internals/function-uncurry-this":65,"../internals/to-object":161}],74:[function(require,module,exports){module.exports={}},{}],75:[function(require,module,exports){module.exports=function(a,b){try{1===arguments.length?console.error(a):console.error(a,b)}catch(error){}}},{}],76:[function(require,module,exports){require=require("../internals/get-built-in");module.exports=require("document","documentElement")},{"../internals/get-built-in":66}],77:[function(require,module,exports){var DESCRIPTORS=require("../internals/descriptors"),fails=require("../internals/fails"),createElement=require("../internals/document-create-element");module.exports=!DESCRIPTORS&&!fails(function(){return 7!==Object.defineProperty(createElement("div"),"a",{get:function(){return 7}}).a})},{"../internals/descriptors":39,"../internals/document-create-element":40,"../internals/fails":53}],78:[function(require,module,exports){var uncurryThis=require("../internals/function-uncurry-this"),fails=require("../internals/fails"),classof=require("../internals/classof-raw"),$Object=Object,split=uncurryThis("".split);module.exports=fails(function(){return!$Object("z").propertyIsEnumerable(0)})?function(it){return"String"===classof(it)?split(it,""):$Object(it)}:$Object},{"../internals/classof-raw":23,"../internals/fails":53,"../internals/function-uncurry-this":65}],79:[function(require,module,exports){var isCallable=require("../internals/is-callable"),isObject=require("../internals/is-object"),setPrototypeOf=require("../internals/object-set-prototype-of");module.exports=function($this,dummy,Wrapper){return setPrototypeOf&&isCallable(dummy=dummy.constructor)&&dummy!==Wrapper&&isObject(dummy=dummy.prototype)&&dummy!==Wrapper.prototype&&setPrototypeOf($this,dummy),$this}},{"../internals/is-callable":85,"../internals/is-object":89,"../internals/object-set-prototype-of":120}],80:[function(require,module,exports){var uncurryThis=require("../internals/function-uncurry-this"),isCallable=require("../internals/is-callable"),require=require("../internals/shared-store"),functionToString=uncurryThis(Function.toString);isCallable(require.inspectSource)||(require.inspectSource=function(it){return functionToString(it)}),module.exports=require.inspectSource},{"../internals/function-uncurry-this":65,"../internals/is-callable":85,"../internals/shared-store":146}],81:[function(require,module,exports){function setMetadata(it){defineProperty(it,METADATA,{value:{objectID:"O"+id++,weakData:{}}})}var $=require("../internals/export"),uncurryThis=require("../internals/function-uncurry-this"),hiddenKeys=require("../internals/hidden-keys"),isObject=require("../internals/is-object"),hasOwn=require("../internals/has-own-property"),defineProperty=require("../internals/object-define-property").f,getOwnPropertyNamesModule=require("../internals/object-get-own-property-names"),getOwnPropertyNamesExternalModule=require("../internals/object-get-own-property-names-external"),isExtensible=require("../internals/object-is-extensible"),uid=require("../internals/uid"),FREEZING=require("../internals/freezing"),REQUIRED=!1,METADATA=uid("meta"),id=0,meta=module.exports={enable:function(){meta.enable=function(){},REQUIRED=!0;var getOwnPropertyNames=getOwnPropertyNamesModule.f,splice=uncurryThis([].splice),test={};test[METADATA]=1,getOwnPropertyNames(test).length&&(getOwnPropertyNamesModule.f=function(it){for(var result=getOwnPropertyNames(it),i=0,length=result.length;i<length;i++)if(result[i]===METADATA){splice(result,i,1);break}return result},$({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:getOwnPropertyNamesExternalModule.f}))},fastKey:function(it,create){if(!isObject(it))return"symbol"==typeof it?it:("string"==typeof it?"S":"P")+it;if(!hasOwn(it,METADATA)){if(!isExtensible(it))return"F";if(!create)return"E";setMetadata(it)}return it[METADATA].objectID},getWeakData:function(it,create){if(!hasOwn(it,METADATA)){if(!isExtensible(it))return!0;if(!create)return!1;setMetadata(it)}return it[METADATA].weakData},onFreeze:function(it){return FREEZING&&REQUIRED&&isExtensible(it)&&!hasOwn(it,METADATA)&&setMetadata(it),it}};hiddenKeys[METADATA]=!0},{"../internals/export":52,"../internals/freezing":56,"../internals/function-uncurry-this":65,"../internals/has-own-property":73,"../internals/hidden-keys":74,"../internals/is-object":89,"../internals/object-define-property":109,"../internals/object-get-own-property-names":112,"../internals/object-get-own-property-names-external":111,"../internals/object-is-extensible":115,"../internals/uid":167}],82:[function(require,module,exports){var set,get,store,STATE,NATIVE_WEAK_MAP=require("../internals/weak-map-basic-detection"),globalThis=require("../internals/global-this"),isObject=require("../internals/is-object"),createNonEnumerableProperty=require("../internals/create-non-enumerable-property"),hasOwn=require("../internals/has-own-property"),shared=require("../internals/shared-store"),sharedKey=require("../internals/shared-key"),require=require("../internals/hidden-keys"),TypeError=globalThis.TypeError,globalThis=globalThis.WeakMap,has=NATIVE_WEAK_MAP||shared.state?((store=shared.state||(shared.state=new globalThis)).get=store.get,store.has=store.has,store.set=store.set,set=function(it,metadata){if(store.has(it))throw new TypeError("Object already initialized");return metadata.facade=it,store.set(it,metadata),metadata},get=function(it){return store.get(it)||{}},function(it){return store.has(it)}):(require[STATE=sharedKey("state")]=!0,set=function(it,metadata){if(hasOwn(it,STATE))throw new TypeError("Object already initialized");return metadata.facade=it,createNonEnumerableProperty(it,STATE,metadata),metadata},get=function(it){return hasOwn(it,STATE)?it[STATE]:{}},function(it){return hasOwn(it,STATE)});module.exports={set:set,get:get,has:has,enforce:function(it){return has(it)?get(it):set(it,{})},getterFor:function(TYPE){return function(it){if(isObject(it)&&(it=get(it)).type===TYPE)return it;throw new TypeError("Incompatible receiver, "+TYPE+" required")}}}},{"../internals/create-non-enumerable-property":31,"../internals/global-this":72,"../internals/has-own-property":73,"../internals/hidden-keys":74,"../internals/is-object":89,"../internals/shared-key":145,"../internals/shared-store":146,"../internals/weak-map-basic-detection":171}],83:[function(require,module,exports){var wellKnownSymbol=require("../internals/well-known-symbol"),Iterators=require("../internals/iterators"),ITERATOR=wellKnownSymbol("iterator"),ArrayPrototype=Array.prototype;module.exports=function(it){return void 0!==it&&(Iterators.Array===it||ArrayPrototype[ITERATOR]===it)}},{"../internals/iterators":99,"../internals/well-known-symbol":174}],84:[function(require,module,exports){var classof=require("../internals/classof-raw");module.exports=Array.isArray||function(argument){return"Array"===classof(argument)}},{"../internals/classof-raw":23}],85:[function(require,module,exports){var documentAll="object"==typeof document&&document.all;module.exports=void 0===documentAll&&void 0!==documentAll?function(argument){return"function"==typeof argument||argument===documentAll}:function(argument){return"function"==typeof argument}},{}],86:[function(require,module,exports){function noop(){}function isConstructorModern(argument){if(!isCallable(argument))return!1;try{return construct(noop,[],argument),!0}catch(error){return!1}}function isConstructorLegacy(argument){if(!isCallable(argument))return!1;switch(classof(argument)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return INCORRECT_TO_STRING||!!exec(constructorRegExp,inspectSource(argument))}catch(error){return!0}}var uncurryThis=require("../internals/function-uncurry-this"),fails=require("../internals/fails"),isCallable=require("../internals/is-callable"),classof=require("../internals/classof"),getBuiltIn=require("../internals/get-built-in"),inspectSource=require("../internals/inspect-source"),construct=getBuiltIn("Reflect","construct"),constructorRegExp=/^\s*(?:class|function)\b/,exec=uncurryThis(constructorRegExp.exec),INCORRECT_TO_STRING=!constructorRegExp.test(noop);isConstructorLegacy.sham=!0,module.exports=!construct||fails(function(){var called;return isConstructorModern(isConstructorModern.call)||!isConstructorModern(Object)||!isConstructorModern(function(){called=!0})||called})?isConstructorLegacy:isConstructorModern},{"../internals/classof":24,"../internals/fails":53,"../internals/function-uncurry-this":65,"../internals/get-built-in":66,"../internals/inspect-source":80,"../internals/is-callable":85}],87:[function(require,module,exports){function isForced(feature,detection){return(feature=data[normalize(feature)])===POLYFILL||feature!==NATIVE&&(isCallable(detection)?fails(detection):!!detection)}var fails=require("../internals/fails"),isCallable=require("../internals/is-callable"),replacement=/#|\.prototype\./,normalize=isForced.normalize=function(string){return String(string).replace(replacement,".").toLowerCase()},data=isForced.data={},NATIVE=isForced.NATIVE="N",POLYFILL=isForced.POLYFILL="P";module.exports=isForced},{"../internals/fails":53,"../internals/is-callable":85}],88:[function(require,module,exports){module.exports=function(it){return null==it}},{}],89:[function(require,module,exports){var isCallable=require("../internals/is-callable");module.exports=function(it){return"object"==typeof it?null!==it:isCallable(it)}},{"../internals/is-callable":85}],90:[function(require,module,exports){var isObject=require("../internals/is-object");module.exports=function(argument){return isObject(argument)||null===argument}},{"../internals/is-object":89}],91:[function(require,module,exports){module.exports=!1},{}],92:[function(require,module,exports){var isObject=require("../internals/is-object"),classof=require("../internals/classof-raw"),MATCH=require("../internals/well-known-symbol")("match");module.exports=function(it){var isRegExp;return isObject(it)&&(void 0!==(isRegExp=it[MATCH])?!!isRegExp:"RegExp"===classof(it))}},{"../internals/classof-raw":23,"../internals/is-object":89,"../internals/well-known-symbol":174}],93:[function(require,module,exports){var getBuiltIn=require("../internals/get-built-in"),isCallable=require("../internals/is-callable"),isPrototypeOf=require("../internals/object-is-prototype-of"),require=require("../internals/use-symbol-as-uid"),$Object=Object;module.exports=require?function(it){return"symbol"==typeof it}:function(it){var $Symbol=getBuiltIn("Symbol");return isCallable($Symbol)&&isPrototypeOf($Symbol.prototype,$Object(it))}},{"../internals/get-built-in":66,"../internals/is-callable":85,"../internals/object-is-prototype-of":116,"../internals/use-symbol-as-uid":168}],94:[function(require,module,exports){function Result(stopped,result){this.stopped=stopped,this.result=result}var bind=require("../internals/function-bind-context"),call=require("../internals/function-call"),anObject=require("../internals/an-object"),tryToString=require("../internals/try-to-string"),isArrayIteratorMethod=require("../internals/is-array-iterator-method"),lengthOfArrayLike=require("../internals/length-of-array-like"),isPrototypeOf=require("../internals/object-is-prototype-of"),getIterator=require("../internals/get-iterator"),getIteratorMethod=require("../internals/get-iterator-method"),iteratorClose=require("../internals/iterator-close"),$TypeError=TypeError,ResultPrototype=Result.prototype;module.exports=function(iterable,unboundFunction,options){function stop(condition){return iterator&&iteratorClose(iterator,"normal"),new Result(!0,condition)}function callFn(value){return AS_ENTRIES?(anObject(value),INTERRUPTED?fn(value[0],value[1],stop):fn(value[0],value[1])):INTERRUPTED?fn(value,stop):fn(value)}var iterator,index,length,result,next,step,that=options&&options.that,AS_ENTRIES=!(!options||!options.AS_ENTRIES),IS_RECORD=!(!options||!options.IS_RECORD),IS_ITERATOR=!(!options||!options.IS_ITERATOR),INTERRUPTED=!(!options||!options.INTERRUPTED),fn=bind(unboundFunction,that);if(IS_RECORD)iterator=iterable.iterator;else if(IS_ITERATOR)iterator=iterable;else{if(!(options=getIteratorMethod(iterable)))throw new $TypeError(tryToString(iterable)+" is not iterable");if(isArrayIteratorMethod(options)){for(index=0,length=lengthOfArrayLike(iterable);index<length;index++)if((result=callFn(iterable[index]))&&isPrototypeOf(ResultPrototype,result))return result;return new Result(!1)}iterator=getIterator(iterable,options)}for(next=(IS_RECORD?iterable:iterator).next;!(step=call(next,iterator)).done;){try{result=callFn(step.value)}catch(error){iteratorClose(iterator,"throw",error)}if("object"==typeof result&&result&&isPrototypeOf(ResultPrototype,result))return result}return new Result(!1)}},{"../internals/an-object":8,"../internals/function-bind-context":58,"../internals/function-call":61,"../internals/get-iterator":68,"../internals/get-iterator-method":67,"../internals/is-array-iterator-method":83,"../internals/iterator-close":95,"../internals/length-of-array-like":100,"../internals/object-is-prototype-of":116,"../internals/try-to-string":166}],95:[function(require,module,exports){var call=require("../internals/function-call"),anObject=require("../internals/an-object"),getMethod=require("../internals/get-method");module.exports=function(iterator,kind,value){var innerResult,innerError;anObject(iterator);try{if(!(innerResult=getMethod(iterator,"return"))){if("throw"===kind)throw value;return value}innerResult=call(innerResult,iterator)}catch(error){innerError=!0,innerResult=error}if("throw"===kind)throw value;if(innerError)throw innerResult;return anObject(innerResult),value}},{"../internals/an-object":8,"../internals/function-call":61,"../internals/get-method":70}],96:[function(require,module,exports){function returnThis(){return this}var IteratorPrototype=require("../internals/iterators-core").IteratorPrototype,create=require("../internals/object-create"),createPropertyDescriptor=require("../internals/create-property-descriptor"),setToStringTag=require("../internals/set-to-string-tag"),Iterators=require("../internals/iterators");module.exports=function(IteratorConstructor,NAME,next,ENUMERABLE_NEXT){NAME+=" Iterator";return IteratorConstructor.prototype=create(IteratorPrototype,{next:createPropertyDescriptor(+!ENUMERABLE_NEXT,next)}),setToStringTag(IteratorConstructor,NAME,!1,!0),Iterators[NAME]=returnThis,IteratorConstructor}},{"../internals/create-property-descriptor":32,"../internals/iterators":99,"../internals/iterators-core":98,"../internals/object-create":107,"../internals/set-to-string-tag":144}],97:[function(require,module,exports){function returnThis(){return this}var $=require("../internals/export"),call=require("../internals/function-call"),IS_PURE=require("../internals/is-pure"),FunctionName=require("../internals/function-name"),isCallable=require("../internals/is-callable"),createIteratorConstructor=require("../internals/iterator-create-constructor"),getPrototypeOf=require("../internals/object-get-prototype-of"),setPrototypeOf=require("../internals/object-set-prototype-of"),setToStringTag=require("../internals/set-to-string-tag"),createNonEnumerableProperty=require("../internals/create-non-enumerable-property"),defineBuiltIn=require("../internals/define-built-in"),wellKnownSymbol=require("../internals/well-known-symbol"),Iterators=require("../internals/iterators"),require=require("../internals/iterators-core"),PROPER_FUNCTION_NAME=FunctionName.PROPER,CONFIGURABLE_FUNCTION_NAME=FunctionName.CONFIGURABLE,IteratorPrototype=require.IteratorPrototype,BUGGY_SAFARI_ITERATORS=require.BUGGY_SAFARI_ITERATORS,ITERATOR=wellKnownSymbol("iterator");module.exports=function(Iterable,NAME,IteratorConstructor,next,DEFAULT,IS_SET,FORCED){createIteratorConstructor(IteratorConstructor,NAME,next);function getIterationMethod(KIND){if(KIND===DEFAULT&&defaultIterator)return defaultIterator;if(!BUGGY_SAFARI_ITERATORS&&KIND&&KIND in IterablePrototype)return IterablePrototype[KIND];switch(KIND){case"keys":case"values":case"entries":return function(){return new IteratorConstructor(this,KIND)}}return function(){return new IteratorConstructor(this)}}var methods,KEY,next=NAME+" Iterator",INCORRECT_VALUES_NAME=!1,IterablePrototype=Iterable.prototype,nativeIterator=IterablePrototype[ITERATOR]||IterablePrototype["@@iterator"]||DEFAULT&&IterablePrototype[DEFAULT],defaultIterator=!BUGGY_SAFARI_ITERATORS&&nativeIterator||getIterationMethod(DEFAULT),anyNativeIterator="Array"===NAME&&IterablePrototype.entries||nativeIterator;if(anyNativeIterator&&(anyNativeIterator=getPrototypeOf(anyNativeIterator.call(new Iterable)))!==Object.prototype&&anyNativeIterator.next&&(IS_PURE||getPrototypeOf(anyNativeIterator)===IteratorPrototype||(setPrototypeOf?setPrototypeOf(anyNativeIterator,IteratorPrototype):isCallable(anyNativeIterator[ITERATOR])||defineBuiltIn(anyNativeIterator,ITERATOR,returnThis)),setToStringTag(anyNativeIterator,next,!0,!0),IS_PURE)&&(Iterators[next]=returnThis),PROPER_FUNCTION_NAME&&"values"===DEFAULT&&nativeIterator&&"values"!==nativeIterator.name&&(!IS_PURE&&CONFIGURABLE_FUNCTION_NAME?createNonEnumerableProperty(IterablePrototype,"name","values"):(INCORRECT_VALUES_NAME=!0,defaultIterator=function(){return call(nativeIterator,this)})),DEFAULT)if(methods={values:getIterationMethod("values"),keys:IS_SET?defaultIterator:getIterationMethod("keys"),entries:getIterationMethod("entries")},FORCED)for(KEY in methods)!BUGGY_SAFARI_ITERATORS&&!INCORRECT_VALUES_NAME&&KEY in IterablePrototype||defineBuiltIn(IterablePrototype,KEY,methods[KEY]);else $({target:NAME,proto:!0,forced:BUGGY_SAFARI_ITERATORS||INCORRECT_VALUES_NAME},methods);return IS_PURE&&!FORCED||IterablePrototype[ITERATOR]===defaultIterator||defineBuiltIn(IterablePrototype,ITERATOR,defaultIterator,{name:DEFAULT}),Iterators[NAME]=defaultIterator,methods}},{"../internals/create-non-enumerable-property":31,"../internals/define-built-in":36,"../internals/export":52,"../internals/function-call":61,"../internals/function-name":62,"../internals/is-callable":85,"../internals/is-pure":91,"../internals/iterator-create-constructor":96,"../internals/iterators":99,"../internals/iterators-core":98,"../internals/object-get-prototype-of":114,"../internals/object-set-prototype-of":120,"../internals/set-to-string-tag":144,"../internals/well-known-symbol":174}],98:[function(require,module,exports){var IteratorPrototype,arrayIterator,fails=require("../internals/fails"),isCallable=require("../internals/is-callable"),isObject=require("../internals/is-object"),create=require("../internals/object-create"),getPrototypeOf=require("../internals/object-get-prototype-of"),defineBuiltIn=require("../internals/define-built-in"),wellKnownSymbol=require("../internals/well-known-symbol"),require=require("../internals/is-pure"),ITERATOR=wellKnownSymbol("iterator"),wellKnownSymbol=!1;[].keys&&("next"in(arrayIterator=[].keys())?(getPrototypeOf=getPrototypeOf(getPrototypeOf(arrayIterator)))!==Object.prototype&&(IteratorPrototype=getPrototypeOf):wellKnownSymbol=!0),!isObject(IteratorPrototype)||fails(function(){var test={};return IteratorPrototype[ITERATOR].call(test)!==test})?IteratorPrototype={}:require&&(IteratorPrototype=create(IteratorPrototype)),isCallable(IteratorPrototype[ITERATOR])||defineBuiltIn(IteratorPrototype,ITERATOR,function(){return this}),module.exports={IteratorPrototype:IteratorPrototype,BUGGY_SAFARI_ITERATORS:wellKnownSymbol}},{"../internals/define-built-in":36,"../internals/fails":53,"../internals/is-callable":85,"../internals/is-object":89,"../internals/is-pure":91,"../internals/object-create":107,"../internals/well-known-symbol":174}],99:[function(require,module,exports){arguments[4][74][0].apply(exports,arguments)},{dup:74}],100:[function(require,module,exports){var toLength=require("../internals/to-length");module.exports=function(obj){return toLength(obj.length)}},{"../internals/to-length":160}],101:[function(require,module,exports){var uncurryThis=require("../internals/function-uncurry-this"),fails=require("../internals/fails"),isCallable=require("../internals/is-callable"),hasOwn=require("../internals/has-own-property"),DESCRIPTORS=require("../internals/descriptors"),CONFIGURABLE_FUNCTION_NAME=require("../internals/function-name").CONFIGURABLE,inspectSource=require("../internals/inspect-source"),require=require("../internals/internal-state"),enforceInternalState=require.enforce,getInternalState=require.get,$String=String,defineProperty=Object.defineProperty,stringSlice=uncurryThis("".slice),replace=uncurryThis("".replace),join=uncurryThis([].join),CONFIGURABLE_LENGTH=DESCRIPTORS&&!fails(function(){return 8!==defineProperty(function(){},"length",{value:8}).length}),TEMPLATE=String(String).split("String"),require=module.exports=function(value,name,options){"Symbol("===stringSlice($String(name),0,7)&&(name="["+replace($String(name),/^Symbol\(([^)]*)\).*$/,"$1")+"]"),options&&options.getter&&(name="get "+name),options&&options.setter&&(name="set "+name),(!hasOwn(value,"name")||CONFIGURABLE_FUNCTION_NAME&&value.name!==name)&&(DESCRIPTORS?defineProperty(value,"name",{value:name,configurable:!0}):value.name=name),CONFIGURABLE_LENGTH&&options&&hasOwn(options,"arity")&&value.length!==options.arity&&defineProperty(value,"length",{value:options.arity});try{options&&hasOwn(options,"constructor")&&options.constructor?DESCRIPTORS&&defineProperty(value,"prototype",{writable:!1}):value.prototype&&(value.prototype=void 0)}catch(error){}options=enforceInternalState(value);return hasOwn(options,"source")||(options.source=join(TEMPLATE,"string"==typeof name?name:"")),value};Function.prototype.toString=require(function(){return isCallable(this)&&getInternalState(this).source||inspectSource(this)},"toString")},{"../internals/descriptors":39,"../internals/fails":53,"../internals/function-name":62,"../internals/function-uncurry-this":65,"../internals/has-own-property":73,"../internals/inspect-source":80,"../internals/internal-state":82,"../internals/is-callable":85}],102:[function(require,module,exports){var ceil=Math.ceil,floor=Math.floor;module.exports=Math.trunc||function(x){x=+x;return(0<x?floor:ceil)(x)}},{}],103:[function(require,module,exports){var toggle,node,then,queue,flush,notify,globalThis=require("../internals/global-this"),safeGetBuiltIn=require("../internals/safe-get-built-in"),bind=require("../internals/function-bind-context"),macrotask=require("../internals/task").set,Queue=require("../internals/queue"),IS_IOS=require("../internals/environment-is-ios"),IS_IOS_PEBBLE=require("../internals/environment-is-ios-pebble"),IS_WEBOS_WEBKIT=require("../internals/environment-is-webos-webkit"),IS_NODE=require("../internals/environment-is-node"),require=globalThis.MutationObserver||globalThis.WebKitMutationObserver,document=globalThis.document,process=globalThis.process,Promise=globalThis.Promise,safeGetBuiltIn=safeGetBuiltIn("queueMicrotask");safeGetBuiltIn||(queue=new Queue,flush=function(){var parent,fn;for(IS_NODE&&(parent=process.domain)&&parent.exit();fn=queue.get();)try{fn()}catch(error){throw queue.head&¬ify(),error}parent&&parent.enter()},notify=IS_IOS||IS_NODE||IS_WEBOS_WEBKIT||!require||!document?!IS_IOS_PEBBLE&&Promise&&Promise.resolve?((Queue=Promise.resolve(void 0)).constructor=Promise,then=bind(Queue.then,Queue),function(){then(flush)}):IS_NODE?function(){process.nextTick(flush)}:(macrotask=bind(macrotask,globalThis),function(){macrotask(flush)}):(toggle=!0,node=document.createTextNode(""),new require(flush).observe(node,{characterData:!0}),function(){node.data=toggle=!toggle}),safeGetBuiltIn=function(fn){queue.head||notify(),queue.add(fn)}),module.exports=safeGetBuiltIn},{"../internals/environment-is-ios":46,"../internals/environment-is-ios-pebble":45,"../internals/environment-is-node":47,"../internals/environment-is-webos-webkit":48,"../internals/function-bind-context":58,"../internals/global-this":72,"../internals/queue":132,"../internals/safe-get-built-in":142,"../internals/task":155}],104:[function(require,module,exports){function PromiseCapability(C){var resolve,reject;this.promise=new C(function($$resolve,$$reject){if(void 0!==resolve||void 0!==reject)throw new $TypeError("Bad Promise constructor");resolve=$$resolve,reject=$$reject}),this.resolve=aCallable(resolve),this.reject=aCallable(reject)}var aCallable=require("../internals/a-callable"),$TypeError=TypeError;module.exports.f=function(C){return new PromiseCapability(C)}},{"../internals/a-callable":2}],105:[function(require,module,exports){var isRegExp=require("../internals/is-regexp"),$TypeError=TypeError;module.exports=function(it){if(isRegExp(it))throw new $TypeError("The method doesn't accept regular expressions");return it}},{"../internals/is-regexp":92}],106:[function(require,module,exports){var globalThis=require("../internals/global-this"),fails=require("../internals/fails"),uncurryThis=require("../internals/function-uncurry-this"),toString=require("../internals/to-string"),trim=require("../internals/string-trim").trim,require=require("../internals/whitespaces"),$parseInt=globalThis.parseInt,globalThis=globalThis.Symbol,ITERATOR=globalThis&&globalThis.iterator,hex=/^[+-]?0x/i,exec=uncurryThis(hex.exec),globalThis=8!==$parseInt(require+"08")||22!==$parseInt(require+"0x16")||ITERATOR&&!fails(function(){$parseInt(Object(ITERATOR))});module.exports=globalThis?function(string,radix){string=trim(toString(string));return $parseInt(string,radix>>>0||(exec(hex,string)?16:10))}:$parseInt},{"../internals/fails":53,"../internals/function-uncurry-this":65,"../internals/global-this":72,"../internals/string-trim":151,"../internals/to-string":165,"../internals/whitespaces":175}],107:[function(require,module,exports){function EmptyConstructor(){}function NullProtoObjectViaActiveX(activeXDocument){activeXDocument.write(scriptTag("")),activeXDocument.close();var temp=activeXDocument.parentWindow.Object;return activeXDocument=null,temp}var activeXDocument,anObject=require("../internals/an-object"),definePropertiesModule=require("../internals/object-define-properties"),enumBugKeys=require("../internals/enum-bug-keys"),hiddenKeys=require("../internals/hidden-keys"),html=require("../internals/html"),documentCreateElement=require("../internals/document-create-element"),require=require("../internals/shared-key"),GT=">",LT="<",SCRIPT="script",IE_PROTO=require("IE_PROTO"),scriptTag=function(content){return LT+SCRIPT+GT+content+LT+"/"+SCRIPT+GT},NullProtoObject=function(){try{activeXDocument=new ActiveXObject("htmlfile")}catch(error){}NullProtoObject="undefined"==typeof document||document.domain&&activeXDocument?NullProtoObjectViaActiveX(activeXDocument):(iframe=documentCreateElement("iframe"),JS="java"+SCRIPT+":",iframe.style.display="none",html.appendChild(iframe),iframe.src=String(JS),(JS=iframe.contentWindow.document).open(),JS.write(scriptTag("document.F=Object")),JS.close(),JS.F);for(var iframe,JS,length=enumBugKeys.length;length--;)delete NullProtoObject.prototype[enumBugKeys[length]];return NullProtoObject()};hiddenKeys[IE_PROTO]=!0,module.exports=Object.create||function(O,Properties){var result;return null!==O?(EmptyConstructor.prototype=anObject(O),result=new EmptyConstructor,EmptyConstructor.prototype=null,result[IE_PROTO]=O):result=NullProtoObject(),void 0===Properties?result:definePropertiesModule.f(result,Properties)}},{"../internals/an-object":8,"../internals/document-create-element":40,"../internals/enum-bug-keys":44,"../internals/hidden-keys":74,"../internals/html":76,"../internals/object-define-properties":108,"../internals/shared-key":145}],108:[function(require,module,exports){var DESCRIPTORS=require("../internals/descriptors"),V8_PROTOTYPE_DEFINE_BUG=require("../internals/v8-prototype-define-bug"),definePropertyModule=require("../internals/object-define-property"),anObject=require("../internals/an-object"),toIndexedObject=require("../internals/to-indexed-object"),objectKeys=require("../internals/object-keys");exports.f=DESCRIPTORS&&!V8_PROTOTYPE_DEFINE_BUG?Object.defineProperties:function(O,Properties){anObject(O);for(var key,props=toIndexedObject(Properties),keys=objectKeys(Properties),length=keys.length,index=0;index<length;)definePropertyModule.f(O,key=keys[index++],props[key]);return O}},{"../internals/an-object":8,"../internals/descriptors":39,"../internals/object-define-property":109,"../internals/object-keys":118,"../internals/to-indexed-object":158,"../internals/v8-prototype-define-bug":169}],109:[function(require,module,exports){var DESCRIPTORS=require("../internals/descriptors"),IE8_DOM_DEFINE=require("../internals/ie8-dom-define"),V8_PROTOTYPE_DEFINE_BUG=require("../internals/v8-prototype-define-bug"),anObject=require("../internals/an-object"),toPropertyKey=require("../internals/to-property-key"),$TypeError=TypeError,$defineProperty=Object.defineProperty,$getOwnPropertyDescriptor=Object.getOwnPropertyDescriptor;exports.f=DESCRIPTORS?V8_PROTOTYPE_DEFINE_BUG?function(O,P,Attributes){var current;return anObject(O),P=toPropertyKey(P),anObject(Attributes),"function"==typeof O&&"prototype"===P&&"value"in Attributes&&"writable"in Attributes&&!Attributes.writable&&(current=$getOwnPropertyDescriptor(O,P))&¤t.writable&&(O[P]=Attributes.value,Attributes={configurable:("configurable"in Attributes?Attributes:current).configurable,enumerable:("enumerable"in Attributes?Attributes:current).enumerable,writable:!1}),$defineProperty(O,P,Attributes)}:$defineProperty:function(O,P,Attributes){if(anObject(O),P=toPropertyKey(P),anObject(Attributes),IE8_DOM_DEFINE)try{return $defineProperty(O,P,Attributes)}catch(error){}if("get"in Attributes||"set"in Attributes)throw new $TypeError("Accessors not supported");return"value"in Attributes&&(O[P]=Attributes.value),O}},{"../internals/an-object":8,"../internals/descriptors":39,"../internals/ie8-dom-define":77,"../internals/to-property-key":163,"../internals/v8-prototype-define-bug":169}],110:[function(require,module,exports){var DESCRIPTORS=require("../internals/descriptors"),call=require("../internals/function-call"),propertyIsEnumerableModule=require("../internals/object-property-is-enumerable"),createPropertyDescriptor=require("../internals/create-property-descriptor"),toIndexedObject=require("../internals/to-indexed-object"),toPropertyKey=require("../internals/to-property-key"),hasOwn=require("../internals/has-own-property"),IE8_DOM_DEFINE=require("../internals/ie8-dom-define"),$getOwnPropertyDescriptor=Object.getOwnPropertyDescriptor;exports.f=DESCRIPTORS?$getOwnPropertyDescriptor:function(O,P){if(O=toIndexedObject(O),P=toPropertyKey(P),IE8_DOM_DEFINE)try{return $getOwnPropertyDescriptor(O,P)}catch(error){}if(hasOwn(O,P))return createPropertyDescriptor(!call(propertyIsEnumerableModule.f,O,P),O[P])}},{"../internals/create-property-descriptor":32,"../internals/descriptors":39,"../internals/function-call":61,"../internals/has-own-property":73,"../internals/ie8-dom-define":77,"../internals/object-property-is-enumerable":119,"../internals/to-indexed-object":158,"../internals/to-property-key":163}],111:[function(require,module,exports){var classof=require("../internals/classof-raw"),toIndexedObject=require("../internals/to-indexed-object"),$getOwnPropertyNames=require("../internals/object-get-own-property-names").f,arraySlice=require("../internals/array-slice"),windowNames="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];module.exports.f=function(it){return windowNames&&"Window"===classof(it)?(it=>{try{return $getOwnPropertyNames(it)}catch(error){return arraySlice(windowNames)}})(it):$getOwnPropertyNames(toIndexedObject(it))}},{"../internals/array-slice":18,"../internals/classof-raw":23,"../internals/object-get-own-property-names":112,"../internals/to-indexed-object":158}],112:[function(require,module,exports){var internalObjectKeys=require("../internals/object-keys-internal"),hiddenKeys=require("../internals/enum-bug-keys").concat("length","prototype");exports.f=Object.getOwnPropertyNames||function(O){return internalObjectKeys(O,hiddenKeys)}},{"../internals/enum-bug-keys":44,"../internals/object-keys-internal":117}],113:[function(require,module,exports){exports.f=Object.getOwnPropertySymbols},{}],114:[function(require,module,exports){var hasOwn=require("../internals/has-own-property"),isCallable=require("../internals/is-callable"),toObject=require("../internals/to-object"),sharedKey=require("../internals/shared-key"),require=require("../internals/correct-prototype-getter"),IE_PROTO=sharedKey("IE_PROTO"),$Object=Object,ObjectPrototype=$Object.prototype;module.exports=require?$Object.getPrototypeOf:function(O){var constructor,O=toObject(O);return hasOwn(O,IE_PROTO)?O[IE_PROTO]:(constructor=O.constructor,isCallable(constructor)&&O instanceof constructor?constructor.prototype:O instanceof $Object?ObjectPrototype:null)}},{"../internals/correct-prototype-getter":29,"../internals/has-own-property":73,"../internals/is-callable":85,"../internals/shared-key":145,"../internals/to-object":161}],115:[function(require,module,exports){var fails=require("../internals/fails"),isObject=require("../internals/is-object"),classof=require("../internals/classof-raw"),ARRAY_BUFFER_NON_EXTENSIBLE=require("../internals/array-buffer-non-extensible"),$isExtensible=Object.isExtensible,require=fails(function(){$isExtensible(1)});module.exports=require||ARRAY_BUFFER_NON_EXTENSIBLE?function(it){return!(!isObject(it)||ARRAY_BUFFER_NON_EXTENSIBLE&&"ArrayBuffer"===classof(it))&&(!$isExtensible||$isExtensible(it))}:$isExtensible},{"../internals/array-buffer-non-extensible":9,"../internals/classof-raw":23,"../internals/fails":53,"../internals/is-object":89}],116:[function(require,module,exports){require=require("../internals/function-uncurry-this");module.exports=require({}.isPrototypeOf)},{"../internals/function-uncurry-this":65}],117:[function(require,module,exports){var uncurryThis=require("../internals/function-uncurry-this"),hasOwn=require("../internals/has-own-property"),toIndexedObject=require("../internals/to-indexed-object"),indexOf=require("../internals/array-includes").indexOf,hiddenKeys=require("../internals/hidden-keys"),push=uncurryThis([].push);module.exports=function(object,names){var key,O=toIndexedObject(object),i=0,result=[];for(key in O)!hasOwn(hiddenKeys,key)&&hasOwn(O,key)&&push(result,key);for(;names.length>i;)!hasOwn(O,key=names[i++])||~indexOf(result,key)||push(result,key);return result}},{"../internals/array-includes":12,"../internals/function-uncurry-this":65,"../internals/has-own-property":73,"../internals/hidden-keys":74,"../internals/to-indexed-object":158}],118:[function(require,module,exports){var internalObjectKeys=require("../internals/object-keys-internal"),enumBugKeys=require("../internals/enum-bug-keys");module.exports=Object.keys||function(O){return internalObjectKeys(O,enumBugKeys)}},{"../internals/enum-bug-keys":44,"../internals/object-keys-internal":117}],119:[function(require,module,exports){var $propertyIsEnumerable={}.propertyIsEnumerable,getOwnPropertyDescriptor=Object.getOwnPropertyDescriptor,NASHORN_BUG=getOwnPropertyDescriptor&&!$propertyIsEnumerable.call({1:2},1);exports.f=NASHORN_BUG?function(V){V=getOwnPropertyDescriptor(this,V);return!!V&&V.enumerable}:$propertyIsEnumerable},{}],120:[function(require,module,exports){var uncurryThisAccessor=require("../internals/function-uncurry-this-accessor"),isObject=require("../internals/is-object"),requireObjectCoercible=require("../internals/require-object-coercible"),aPossiblePrototype=require("../internals/a-possible-prototype");module.exports=Object.setPrototypeOf||("__proto__"in{}?(()=>{var setter,CORRECT_SETTER=!1,test={};try{(setter=uncurryThisAccessor(Object.prototype,"__proto__","set"))(test,[]),CORRECT_SETTER=test instanceof Array}catch(error){}return function(O,proto){return requireObjectCoercible(O),aPossiblePrototype(proto),isObject(O)&&(CORRECT_SETTER?setter(O,proto):O.__proto__=proto),O}})():void 0)},{"../internals/a-possible-prototype":4,"../internals/function-uncurry-this-accessor":63,"../internals/is-object":89,"../internals/require-object-coercible":141}],121:[function(require,module,exports){function createMethod(TO_ENTRIES){return function(it){for(var key,O=toIndexedObject(it),keys=objectKeys(O),IE_WORKAROUND=IE_BUG&&null===objectGetPrototypeOf(O),length=keys.length,i=0,result=[];i<length;)key=keys[i++],DESCRIPTORS&&!(IE_WORKAROUND?key in O:propertyIsEnumerable(O,key))||push(result,TO_ENTRIES?[key,O[key]]:O[key]);return result}}var DESCRIPTORS=require("../internals/descriptors"),fails=require("../internals/fails"),uncurryThis=require("../internals/function-uncurry-this"),objectGetPrototypeOf=require("../internals/object-get-prototype-of"),objectKeys=require("../internals/object-keys"),toIndexedObject=require("../internals/to-indexed-object"),propertyIsEnumerable=uncurryThis(require("../internals/object-property-is-enumerable").f),push=uncurryThis([].push),IE_BUG=DESCRIPTORS&&fails(function(){var O=Object.create(null);return O[2]=2,!propertyIsEnumerable(O,2)});module.exports={entries:createMethod(!0),values:createMethod(!1)}},{"../internals/descriptors":39,"../internals/fails":53,"../internals/function-uncurry-this":65,"../internals/object-get-prototype-of":114,"../internals/object-keys":118,"../internals/object-property-is-enumerable":119,"../internals/to-indexed-object":158}],122:[function(require,module,exports){var TO_STRING_TAG_SUPPORT=require("../internals/to-string-tag-support"),classof=require("../internals/classof");module.exports=TO_STRING_TAG_SUPPORT?{}.toString:function(){return"[object "+classof(this)+"]"}},{"../internals/classof":24,"../internals/to-string-tag-support":164}],123:[function(require,module,exports){var call=require("../internals/function-call"),isCallable=require("../internals/is-callable"),isObject=require("../internals/is-object"),$TypeError=TypeError;module.exports=function(input,pref){var fn,val;if("string"===pref&&isCallable(fn=input.toString)&&!isObject(val=call(fn,input)))return val;if(isCallable(fn=input.valueOf)&&!isObject(val=call(fn,input)))return val;if("string"!==pref&&isCallable(fn=input.toString)&&!isObject(val=call(fn,input)))return val;throw new $TypeError("Can't convert object to primitive value")}},{"../internals/function-call":61,"../internals/is-callable":85,"../internals/is-object":89}],124:[function(require,module,exports){var getBuiltIn=require("../internals/get-built-in"),uncurryThis=require("../internals/function-uncurry-this"),getOwnPropertyNamesModule=require("../internals/object-get-own-property-names"),getOwnPropertySymbolsModule=require("../internals/object-get-own-property-symbols"),anObject=require("../internals/an-object"),concat=uncurryThis([].concat);module.exports=getBuiltIn("Reflect","ownKeys")||function(it){var keys=getOwnPropertyNamesModule.f(anObject(it)),getOwnPropertySymbols=getOwnPropertySymbolsModule.f;return getOwnPropertySymbols?concat(keys,getOwnPropertySymbols(it)):keys}},{"../internals/an-object":8,"../internals/function-uncurry-this":65,"../internals/get-built-in":66,"../internals/object-get-own-property-names":112,"../internals/object-get-own-property-symbols":113}],125:[function(require,module,exports){require=require("../internals/global-this");module.exports=require},{"../internals/global-this":72}],126:[function(require,module,exports){module.exports=function(exec){try{return{error:!1,value:exec()}}catch(error){return{error:!0,value:error}}}},{}],127:[function(require,module,exports){var globalThis=require("../internals/global-this"),NativePromiseConstructor=require("../internals/promise-native-constructor"),isCallable=require("../internals/is-callable"),isForced=require("../internals/is-forced"),inspectSource=require("../internals/inspect-source"),wellKnownSymbol=require("../internals/well-known-symbol"),ENVIRONMENT=require("../internals/environment"),IS_PURE=require("../internals/is-pure"),V8_VERSION=require("../internals/environment-v8-version"),NativePromisePrototype=NativePromiseConstructor&&NativePromiseConstructor.prototype,SPECIES=wellKnownSymbol("species"),SUBCLASSING=!1,NATIVE_PROMISE_REJECTION_EVENT=isCallable(globalThis.PromiseRejectionEvent),require=isForced("Promise",function(){var PROMISE_CONSTRUCTOR_SOURCE=inspectSource(NativePromiseConstructor),GLOBAL_CORE_JS_PROMISE=PROMISE_CONSTRUCTOR_SOURCE!==String(NativePromiseConstructor);if(!GLOBAL_CORE_JS_PROMISE&&66===V8_VERSION)return!0;if(IS_PURE&&(!NativePromisePrototype.catch||!NativePromisePrototype.finally))return!0;if(!V8_VERSION||V8_VERSION<51||!/native code/.test(PROMISE_CONSTRUCTOR_SOURCE)){var PROMISE_CONSTRUCTOR_SOURCE=new NativePromiseConstructor(function(resolve){resolve(1)}),FakePromise=function(exec){exec(function(){},function(){})};if((PROMISE_CONSTRUCTOR_SOURCE.constructor={})[SPECIES]=FakePromise,!(SUBCLASSING=PROMISE_CONSTRUCTOR_SOURCE.then(function(){})instanceof FakePromise))return!0}return!(GLOBAL_CORE_JS_PROMISE||"BROWSER"!==ENVIRONMENT&&"DENO"!==ENVIRONMENT||NATIVE_PROMISE_REJECTION_EVENT)});module.exports={CONSTRUCTOR:require,REJECTION_EVENT:NATIVE_PROMISE_REJECTION_EVENT,SUBCLASSING:SUBCLASSING}},{"../internals/environment":51,"../internals/environment-v8-version":50,"../internals/global-this":72,"../internals/inspect-source":80,"../internals/is-callable":85,"../internals/is-forced":87,"../internals/is-pure":91,"../internals/promise-native-constructor":128,"../internals/well-known-symbol":174}],128:[function(require,module,exports){require=require("../internals/global-this");module.exports=require.Promise},{"../internals/global-this":72}],129:[function(require,module,exports){var anObject=require("../internals/an-object"),isObject=require("../internals/is-object"),newPromiseCapability=require("../internals/new-promise-capability");module.exports=function(C,x){return anObject(C),isObject(x)&&x.constructor===C?x:((0,(C=newPromiseCapability.f(C)).resolve)(x),C.promise)}},{"../internals/an-object":8,"../internals/is-object":89,"../internals/new-promise-capability":104}],130:[function(require,module,exports){var NativePromiseConstructor=require("../internals/promise-native-constructor"),checkCorrectnessOfIteration=require("../internals/check-correctness-of-iteration"),require=require("../internals/promise-constructor-detection").CONSTRUCTOR;module.exports=require||!checkCorrectnessOfIteration(function(iterable){NativePromiseConstructor.all(iterable).then(void 0,function(){})})},{"../internals/check-correctness-of-iteration":22,"../internals/promise-constructor-detection":127,"../internals/promise-native-constructor":128}],131:[function(require,module,exports){var defineProperty=require("../internals/object-define-property").f;module.exports=function(Target,Source,key){key in Target||defineProperty(Target,key,{configurable:!0,get:function(){return Source[key]},set:function(it){Source[key]=it}})}},{"../internals/object-define-property":109}],132:[function(require,module,exports){function Queue(){this.head=null,this.tail=null}Queue.prototype={add:function(item){var item={item:item,next:null},tail=this.tail;tail?tail.next=item:this.head=item,this.tail=item},get:function(){var entry=this.head;if(entry)return null===(this.head=entry.next)&&(this.tail=null),entry.item}},module.exports=Queue},{}],133:[function(require,module,exports){var call=require("../internals/function-call"),anObject=require("../internals/an-object"),isCallable=require("../internals/is-callable"),classof=require("../internals/classof-raw"),regexpExec=require("../internals/regexp-exec"),$TypeError=TypeError;module.exports=function(R,S){var exec=R.exec;if(isCallable(exec))return null!==(exec=call(exec,R,S))&&anObject(exec),exec;if("RegExp"===classof(R))return call(regexpExec,R,S);throw new $TypeError("RegExp#exec called on incompatible receiver")}},{"../internals/an-object":8,"../internals/classof-raw":23,"../internals/function-call":61,"../internals/is-callable":85,"../internals/regexp-exec":134}],134:[function(require,module,exports){var call=require("../internals/function-call"),uncurryThis=require("../internals/function-uncurry-this"),toString=require("../internals/to-string"),regexpFlags=require("../internals/regexp-flags"),stickyHelpers=require("../internals/regexp-sticky-helpers"),shared=require("../internals/shared"),create=require("../internals/object-create"),getInternalState=require("../internals/internal-state").get,UNSUPPORTED_DOT_ALL=require("../internals/regexp-unsupported-dot-all"),require=require("../internals/regexp-unsupported-ncg"),nativeReplace=shared("native-string-replace",String.prototype.replace),nativeExec=RegExp.prototype.exec,patchedExec=nativeExec,charAt=uncurryThis("".charAt),indexOf=uncurryThis("".indexOf),replace=uncurryThis("".replace),stringSlice=uncurryThis("".slice),UPDATES_LAST_INDEX_WRONG=(shared=/b*/g,call(nativeExec,uncurryThis=/a/,"a"),call(nativeExec,shared,"a"),0!==uncurryThis.lastIndex||0!==shared.lastIndex),UNSUPPORTED_Y=stickyHelpers.BROKEN_CARET,NPCG_INCLUDED=void 0!==/()??/.exec("")[1];(UPDATES_LAST_INDEX_WRONG||NPCG_INCLUDED||UNSUPPORTED_Y||UNSUPPORTED_DOT_ALL||require)&&(patchedExec=function(string){var reCopy,lastIndex,match,i,object,group,re=this,state=getInternalState(re),string=toString(string),raw=state.raw;if(raw)return raw.lastIndex=re.lastIndex,result=call(patchedExec,raw,string),re.lastIndex=raw.lastIndex,result;var groups=state.groups,raw=UNSUPPORTED_Y&&re.sticky,result=call(regexpFlags,re),state=re.source,charsAdded=0,strCopy=string;if(raw&&(result=replace(result,"y",""),-1===indexOf(result,"g")&&(result+="g"),strCopy=stringSlice(string,re.lastIndex),0<re.lastIndex&&(!re.multiline||(re.multiline,"\n"!==charAt(string,re.lastIndex-1)))&&(state="(?: "+state+")",strCopy=" "+strCopy,charsAdded++),reCopy=new RegExp("^(?:"+state+")",result)),NPCG_INCLUDED&&(reCopy=new RegExp("^"+state+"$(?!\\s)",result)),UPDATES_LAST_INDEX_WRONG&&(lastIndex=re.lastIndex),match=call(nativeExec,raw?reCopy:re,strCopy),raw?match?(match.input=stringSlice(match.input,charsAdded),match[0]=stringSlice(match[0],charsAdded),match.index=re.lastIndex,re.lastIndex+=match[0].length):re.lastIndex=0:UPDATES_LAST_INDEX_WRONG&&match&&(re.lastIndex=re.global?match.index+match[0].length:lastIndex),NPCG_INCLUDED&&match&&1<match.length&&call(nativeReplace,match[0],reCopy,function(){for(i=1;i<arguments.length-2;i++)void 0===arguments[i]&&(match[i]=void 0)}),match&&groups)for(match.groups=object=create(null),i=0;i<groups.length;i++)object[(group=groups[i])[0]]=match[group[1]];return match}),module.exports=patchedExec},{"../internals/function-call":61,"../internals/function-uncurry-this":65,"../internals/internal-state":82,"../internals/object-create":107,"../internals/regexp-flags":136,"../internals/regexp-sticky-helpers":138,"../internals/regexp-unsupported-dot-all":139,"../internals/regexp-unsupported-ncg":140,"../internals/shared":147,"../internals/to-string":165}],135:[function(require,module,exports){var globalThis=require("../internals/global-this"),require=require("../internals/fails"),RegExp=globalThis.RegExp,globalThis=!require(function(){var INDICES_SUPPORT=!0;try{RegExp(".","d")}catch(error){INDICES_SUPPORT=!1}var key,O={},calls="",expected=INDICES_SUPPORT?"dgimsy":"gimsy",pairs={dotAll:"s",global:"g",ignoreCase:"i",multiline:"m",sticky:"y"};for(key in INDICES_SUPPORT&&(pairs.hasIndices="d"),pairs)((key,chr)=>{Object.defineProperty(O,key,{get:function(){return calls+=chr,!0}})})(key,pairs[key]);return Object.getOwnPropertyDescriptor(RegExp.prototype,"flags").get.call(O)!==expected||calls!==expected});module.exports={correct:globalThis}},{"../internals/fails":53,"../internals/global-this":72}],136:[function(require,module,exports){var anObject=require("../internals/an-object");module.exports=function(){var that=anObject(this),result="";return that.hasIndices&&(result+="d"),that.global&&(result+="g"),that.ignoreCase&&(result+="i"),that.multiline&&(result+="m"),that.dotAll&&(result+="s"),that.unicode&&(result+="u"),that.unicodeSets&&(result+="v"),that.sticky&&(result+="y"),result}},{"../internals/an-object":8}],137:[function(require,module,exports){var call=require("../internals/function-call"),hasOwn=require("../internals/has-own-property"),isPrototypeOf=require("../internals/object-is-prototype-of"),regExpFlagsDetection=require("../internals/regexp-flags-detection"),regExpFlagsGetterImplementation=require("../internals/regexp-flags"),RegExpPrototype=RegExp.prototype;module.exports=regExpFlagsDetection.correct?function(it){return it.flags}:function(it){return regExpFlagsDetection.correct||!isPrototypeOf(RegExpPrototype,it)||hasOwn(it,"flags")?it.flags:call(regExpFlagsGetterImplementation,it)}},{"../internals/function-call":61,"../internals/has-own-property":73,"../internals/object-is-prototype-of":116,"../internals/regexp-flags":136,"../internals/regexp-flags-detection":135}],138:[function(require,module,exports){var fails=require("../internals/fails"),$RegExp=require("../internals/global-this").RegExp,require=fails(function(){var re=$RegExp("a","y");return re.lastIndex=2,null!==re.exec("abcd")}),MISSED_STICKY=require||fails(function(){return!$RegExp("a","y").sticky}),fails=require||fails(function(){var re=$RegExp("^r","gy");return re.lastIndex=2,null!==re.exec("str")});module.exports={BROKEN_CARET:fails,MISSED_STICKY:MISSED_STICKY,UNSUPPORTED_Y:require}},{"../internals/fails":53,"../internals/global-this":72}],139:[function(require,module,exports){var fails=require("../internals/fails"),$RegExp=require("../internals/global-this").RegExp;module.exports=fails(function(){var re=$RegExp(".","s");return!(re.dotAll&&re.test("\n")&&"s"===re.flags)})},{"../internals/fails":53,"../internals/global-this":72}],140:[function(require,module,exports){var fails=require("../internals/fails"),$RegExp=require("../internals/global-this").RegExp;module.exports=fails(function(){var re=$RegExp("(?<a>b)","g");return"b"!==re.exec("b").groups.a||"bc"!=="b".replace(re,"$<a>c")})},{"../internals/fails":53,"../internals/global-this":72}],141:[function(require,module,exports){var isNullOrUndefined=require("../internals/is-null-or-undefined"),$TypeError=TypeError;module.exports=function(it){if(isNullOrUndefined(it))throw new $TypeError("Can't call method on "+it);return it}},{"../internals/is-null-or-undefined":88}],142:[function(require,module,exports){var globalThis=require("../internals/global-this"),DESCRIPTORS=require("../internals/descriptors"),getOwnPropertyDescriptor=Object.getOwnPropertyDescriptor;module.exports=function(name){var descriptor;return DESCRIPTORS?(descriptor=getOwnPropertyDescriptor(globalThis,name))&&descriptor.value:globalThis[name]}},{"../internals/descriptors":39,"../internals/global-this":72}],143:[function(require,module,exports){var getBuiltIn=require("../internals/get-built-in"),defineBuiltInAccessor=require("../internals/define-built-in-accessor"),wellKnownSymbol=require("../internals/well-known-symbol"),DESCRIPTORS=require("../internals/descriptors"),SPECIES=wellKnownSymbol("species");module.exports=function(CONSTRUCTOR_NAME){CONSTRUCTOR_NAME=getBuiltIn(CONSTRUCTOR_NAME);DESCRIPTORS&&CONSTRUCTOR_NAME&&!CONSTRUCTOR_NAME[SPECIES]&&defineBuiltInAccessor(CONSTRUCTOR_NAME,SPECIES,{configurable:!0,get:function(){return this}})}},{"../internals/define-built-in-accessor":35,"../internals/descriptors":39,"../internals/get-built-in":66,"../internals/well-known-symbol":174}],144:[function(require,module,exports){var defineProperty=require("../internals/object-define-property").f,hasOwn=require("../internals/has-own-property"),TO_STRING_TAG=require("../internals/well-known-symbol")("toStringTag");module.exports=function(target,TAG,STATIC){(target=target&&!STATIC?target.prototype:target)&&!hasOwn(target,TO_STRING_TAG)&&defineProperty(target,TO_STRING_TAG,{configurable:!0,value:TAG})}},{"../internals/has-own-property":73,"../internals/object-define-property":109,"../internals/well-known-symbol":174}],145:[function(require,module,exports){var shared=require("../internals/shared"),uid=require("../internals/uid"),keys=shared("keys");module.exports=function(key){return keys[key]||(keys[key]=uid(key))}},{"../internals/shared":147,"../internals/uid":167}],146:[function(require,module,exports){var IS_PURE=require("../internals/is-pure"),globalThis=require("../internals/global-this"),require=require("../internals/define-global-property"),module=module.exports=globalThis["__core-js_shared__"]||require("__core-js_shared__",{});(module.versions||(module.versions=[])).push({version:"3.43.0",mode:IS_PURE?"pure":"global",copyright:"\xa9 2014-2025 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.43.0/LICENSE",source:"https://github.com/zloirock/core-js"})},{"../internals/define-global-property":38,"../internals/global-this":72,"../internals/is-pure":91}],147:[function(require,module,exports){var store=require("../internals/shared-store");module.exports=function(key,value){return store[key]||(store[key]=value||{})}},{"../internals/shared-store":146}],148:[function(require,module,exports){var anObject=require("../internals/an-object"),aConstructor=require("../internals/a-constructor"),isNullOrUndefined=require("../internals/is-null-or-undefined"),SPECIES=require("../internals/well-known-symbol")("species");module.exports=function(O,defaultConstructor){var O=anObject(O).constructor;return void 0===O||isNullOrUndefined(O=anObject(O)[SPECIES])?defaultConstructor:aConstructor(O)}},{"../internals/a-constructor":3,"../internals/an-object":8,"../internals/is-null-or-undefined":88,"../internals/well-known-symbol":174}],149:[function(require,module,exports){function createMethod(CONVERT_TO_STRING){return function($this,pos){var first,$this=toString(requireObjectCoercible($this)),pos=toIntegerOrInfinity(pos),size=$this.length;return pos<0||size<=pos?CONVERT_TO_STRING?"":void 0:(first=charCodeAt($this,pos))<55296||56319<first||pos+1===size||(size=charCodeAt($this,pos+1))<56320||57343<size?CONVERT_TO_STRING?charAt($this,pos):first:CONVERT_TO_STRING?stringSlice($this,pos,pos+2):size-56320+(first-55296<<10)+65536}}var uncurryThis=require("../internals/function-uncurry-this"),toIntegerOrInfinity=require("../internals/to-integer-or-infinity"),toString=require("../internals/to-string"),requireObjectCoercible=require("../internals/require-object-coercible"),charAt=uncurryThis("".charAt),charCodeAt=uncurryThis("".charCodeAt),stringSlice=uncurryThis("".slice);module.exports={codeAt:createMethod(!1),charAt:createMethod(!0)}},{"../internals/function-uncurry-this":65,"../internals/require-object-coercible":141,"../internals/to-integer-or-infinity":159,"../internals/to-string":165}],150:[function(require,module,exports){var PROPER_FUNCTION_NAME=require("../internals/function-name").PROPER,fails=require("../internals/fails"),whitespaces=require("../internals/whitespaces");module.exports=function(METHOD_NAME){return fails(function(){return!!whitespaces[METHOD_NAME]()||"\u200b\x85\u180e"!=="\u200b\x85\u180e"[METHOD_NAME]()||PROPER_FUNCTION_NAME&&whitespaces[METHOD_NAME].name!==METHOD_NAME})}},{"../internals/fails":53,"../internals/function-name":62,"../internals/whitespaces":175}],151:[function(require,module,exports){function createMethod(TYPE){return function($this){$this=toString(requireObjectCoercible($this));return 1&TYPE&&($this=replace($this,ltrim,"")),$this=2&TYPE?replace($this,rtrim,"$1"):$this}}var uncurryThis=require("../internals/function-uncurry-this"),requireObjectCoercible=require("../internals/require-object-coercible"),toString=require("../internals/to-string"),require=require("../internals/whitespaces"),replace=uncurryThis("".replace),ltrim=RegExp("^["+require+"]+"),rtrim=RegExp("(^|[^"+require+"])["+require+"]+$");module.exports={start:createMethod(1),end:createMethod(2),trim:createMethod(3)}},{"../internals/function-uncurry-this":65,"../internals/require-object-coercible":141,"../internals/to-string":165,"../internals/whitespaces":175}],152:[function(require,module,exports){var V8_VERSION=require("../internals/environment-v8-version"),fails=require("../internals/fails"),$String=require("../internals/global-this").String;module.exports=!!Object.getOwnPropertySymbols&&!fails(function(){var symbol=Symbol("symbol detection");return!$String(symbol)||!(Object(symbol)instanceof Symbol)||!Symbol.sham&&V8_VERSION&&V8_VERSION<41})},{"../internals/environment-v8-version":50,"../internals/fails":53,"../internals/global-this":72}],153:[function(require,module,exports){var call=require("../internals/function-call"),getBuiltIn=require("../internals/get-built-in"),wellKnownSymbol=require("../internals/well-known-symbol"),defineBuiltIn=require("../internals/define-built-in");module.exports=function(){var Symbol=getBuiltIn("Symbol"),Symbol=Symbol&&Symbol.prototype,valueOf=Symbol&&Symbol.valueOf,TO_PRIMITIVE=wellKnownSymbol("toPrimitive");Symbol&&!Symbol[TO_PRIMITIVE]&&defineBuiltIn(Symbol,TO_PRIMITIVE,function(hint){return call(valueOf,this)},{arity:1})}},{"../internals/define-built-in":36,"../internals/function-call":61,"../internals/get-built-in":66,"../internals/well-known-symbol":174}],154:[function(require,module,exports){require=require("../internals/symbol-constructor-detection");module.exports=require&&!!Symbol.for&&!!Symbol.keyFor},{"../internals/symbol-constructor-detection":152}],155:[function(require,module,exports){function runner(id){return function(){run(id)}}function eventListener(event){run(event.data)}function globalPostMessageDefer(id){globalThis.postMessage(String(id),$location.protocol+"//"+$location.host)}var $location,defer,globalThis=require("../internals/global-this"),apply=require("../internals/function-apply"),bind=require("../internals/function-bind-context"),isCallable=require("../internals/is-callable"),hasOwn=require("../internals/has-own-property"),fails=require("../internals/fails"),html=require("../internals/html"),arraySlice=require("../internals/array-slice"),createElement=require("../internals/document-create-element"),validateArgumentsLength=require("../internals/validate-arguments-length"),IS_IOS=require("../internals/environment-is-ios"),require=require("../internals/environment-is-node"),set=globalThis.setImmediate,clear=globalThis.clearImmediate,process=globalThis.process,Dispatch=globalThis.Dispatch,Function=globalThis.Function,MessageChannel=globalThis.MessageChannel,String=globalThis.String,counter=0,queue={},run=(fails(function(){$location=globalThis.location}),function(id){var fn;hasOwn(queue,id)&&(fn=queue[id],delete queue[id],fn())});set&&clear||(set=function(handler){validateArgumentsLength(arguments.length,1);var fn=isCallable(handler)?handler:Function(handler),args=arraySlice(arguments,1);return queue[++counter]=function(){apply(fn,void 0,args)},defer(counter),counter},clear=function(id){delete queue[id]},require?defer=function(id){process.nextTick(runner(id))}:Dispatch&&Dispatch.now?defer=function(id){Dispatch.now(runner(id))}:MessageChannel&&!IS_IOS?(IS_IOS=(require=new MessageChannel).port2,require.port1.onmessage=eventListener,defer=bind(IS_IOS.postMessage,IS_IOS)):globalThis.addEventListener&&isCallable(globalThis.postMessage)&&!globalThis.importScripts&&$location&&"file:"!==$location.protocol&&!fails(globalPostMessageDefer)?(defer=globalPostMessageDefer,globalThis.addEventListener("message",eventListener,!1)):defer="onreadystatechange"in createElement("script")?function(id){html.appendChild(createElement("script")).onreadystatechange=function(){html.removeChild(this),run(id)}}:function(id){setTimeout(runner(id),0)}),module.exports={set:set,clear:clear}},{"../internals/array-slice":18,"../internals/document-create-element":40,"../internals/environment-is-ios":46,"../internals/environment-is-node":47,"../internals/fails":53,"../internals/function-apply":57,"../internals/function-bind-context":58,"../internals/global-this":72,"../internals/has-own-property":73,"../internals/html":76,"../internals/is-callable":85}],156:[function(require,module,exports){require=require("../internals/function-uncurry-this");module.exports=require(1.1.valueOf)},{"../internals/function-uncurry-this":65}],157:[function(require,module,exports){var toIntegerOrInfinity=require("../internals/to-integer-or-infinity"),max=Math.max,min=Math.min;module.exports=function(index,length){index=toIntegerOrInfinity(index);return index<0?max(index+length,0):min(index,length)}},{"../internals/to-integer-or-infinity":159}],158:[function(require,module,exports){var IndexedObject=require("../internals/indexed-object"),requireObjectCoercible=require("../internals/require-object-coercible");module.exports=function(it){return IndexedObject(requireObjectCoercible(it))}},{"../internals/indexed-object":78,"../internals/require-object-coercible":141}],159:[function(require,module,exports){var trunc=require("../internals/math-trunc");module.exports=function(argument){argument=+argument;return argument!=argument||0==argument?0:trunc(argument)}},{"../internals/math-trunc":102}],160:[function(require,module,exports){var toIntegerOrInfinity=require("../internals/to-integer-or-infinity"),min=Math.min;module.exports=function(argument){argument=toIntegerOrInfinity(argument);return 0<argument?min(argument,9007199254740991):0}},{"../internals/to-integer-or-infinity":159}],161:[function(require,module,exports){var requireObjectCoercible=require("../internals/require-object-coercible"),$Object=Object;module.exports=function(argument){return $Object(requireObjectCoercible(argument))}},{"../internals/require-object-coercible":141}],162:[function(require,module,exports){var call=require("../internals/function-call"),isObject=require("../internals/is-object"),isSymbol=require("../internals/is-symbol"),getMethod=require("../internals/get-method"),ordinaryToPrimitive=require("../internals/ordinary-to-primitive"),require=require("../internals/well-known-symbol"),$TypeError=TypeError,TO_PRIMITIVE=require("toPrimitive");module.exports=function(input,pref){if(!isObject(input)||isSymbol(input))return input;var exoticToPrim=getMethod(input,TO_PRIMITIVE);if(exoticToPrim){if(exoticToPrim=call(exoticToPrim,input,pref=void 0===pref?"default":pref),!isObject(exoticToPrim)||isSymbol(exoticToPrim))return exoticToPrim;throw new $TypeError("Can't convert object to primitive value")}return ordinaryToPrimitive(input,pref=void 0===pref?"number":pref)}},{"../internals/function-call":61,"../internals/get-method":70,"../internals/is-object":89,"../internals/is-symbol":93,"../internals/ordinary-to-primitive":123,"../internals/well-known-symbol":174}],163:[function(require,module,exports){var toPrimitive=require("../internals/to-primitive"),isSymbol=require("../internals/is-symbol");module.exports=function(argument){argument=toPrimitive(argument,"string");return isSymbol(argument)?argument:argument+""}},{"../internals/is-symbol":93,"../internals/to-primitive":162}],164:[function(require,module,exports){var test={};test[require("../internals/well-known-symbol")("toStringTag")]="z",module.exports="[object z]"===String(test)},{"../internals/well-known-symbol":174}],165:[function(require,module,exports){var classof=require("../internals/classof"),$String=String;module.exports=function(argument){if("Symbol"===classof(argument))throw new TypeError("Cannot convert a Symbol value to a string");return $String(argument)}},{"../internals/classof":24}],166:[function(require,module,exports){var $String=String;module.exports=function(argument){try{return $String(argument)}catch(error){return"Object"}}},{}],167:[function(require,module,exports){var require=require("../internals/function-uncurry-this"),id=0,postfix=Math.random(),toString=require(1.1.toString);module.exports=function(key){return"Symbol("+(void 0===key?"":key)+")_"+toString(++id+postfix,36)}},{"../internals/function-uncurry-this":65}],168:[function(require,module,exports){require=require("../internals/symbol-constructor-detection");module.exports=require&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},{"../internals/symbol-constructor-detection":152}],169:[function(require,module,exports){var DESCRIPTORS=require("../internals/descriptors"),require=require("../internals/fails");module.exports=DESCRIPTORS&&require(function(){return 42!==Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype})},{"../internals/descriptors":39,"../internals/fails":53}],170:[function(require,module,exports){var $TypeError=TypeError;module.exports=function(passed,required){if(passed<required)throw new $TypeError("Not enough arguments");return passed}},{}],171:[function(require,module,exports){var globalThis=require("../internals/global-this"),require=require("../internals/is-callable"),globalThis=globalThis.WeakMap;module.exports=require(globalThis)&&/native code/.test(String(globalThis))},{"../internals/global-this":72,"../internals/is-callable":85}],172:[function(require,module,exports){var path=require("../internals/path"),hasOwn=require("../internals/has-own-property"),wrappedWellKnownSymbolModule=require("../internals/well-known-symbol-wrapped"),defineProperty=require("../internals/object-define-property").f;module.exports=function(NAME){var Symbol=path.Symbol||(path.Symbol={});hasOwn(Symbol,NAME)||defineProperty(Symbol,NAME,{value:wrappedWellKnownSymbolModule.f(NAME)})}},{"../internals/has-own-property":73,"../internals/object-define-property":109,"../internals/path":125,"../internals/well-known-symbol-wrapped":173}],173:[function(require,module,exports){require=require("../internals/well-known-symbol");exports.f=require},{"../internals/well-known-symbol":174}],174:[function(require,module,exports){var globalThis=require("../internals/global-this"),shared=require("../internals/shared"),hasOwn=require("../internals/has-own-property"),uid=require("../internals/uid"),NATIVE_SYMBOL=require("../internals/symbol-constructor-detection"),require=require("../internals/use-symbol-as-uid"),Symbol=globalThis.Symbol,WellKnownSymbolsStore=shared("wks"),createWellKnownSymbol=require?Symbol.for||Symbol:Symbol&&Symbol.withoutSetter||uid;module.exports=function(name){return hasOwn(WellKnownSymbolsStore,name)||(WellKnownSymbolsStore[name]=NATIVE_SYMBOL&&hasOwn(Symbol,name)?Symbol[name]:createWellKnownSymbol("Symbol."+name)),WellKnownSymbolsStore[name]}},{"../internals/global-this":72,"../internals/has-own-property":73,"../internals/shared":147,"../internals/symbol-constructor-detection":152,"../internals/uid":167,"../internals/use-symbol-as-uid":168}],175:[function(require,module,exports){module.exports="\t\n\v\f\r \xa0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029\ufeff"},{}],176:[function(require,module,exports){var $=require("../internals/export"),fails=require("../internals/fails"),isArray=require("../internals/is-array"),isObject=require("../internals/is-object"),toObject=require("../internals/to-object"),lengthOfArrayLike=require("../internals/length-of-array-like"),doesNotExceedSafeInteger=require("../internals/does-not-exceed-safe-integer"),createProperty=require("../internals/create-property"),arraySpeciesCreate=require("../internals/array-species-create"),arrayMethodHasSpeciesSupport=require("../internals/array-method-has-species-support"),wellKnownSymbol=require("../internals/well-known-symbol"),require=require("../internals/environment-v8-version"),IS_CONCAT_SPREADABLE=wellKnownSymbol("isConcatSpreadable"),wellKnownSymbol=51<=require||!fails(function(){var array=[];return array[IS_CONCAT_SPREADABLE]=!1,array.concat()[0]!==array});$({target:"Array",proto:!0,arity:1,forced:!wellKnownSymbol||!arrayMethodHasSpeciesSupport("concat")},{concat:function(arg){for(var k,len,E,O=toObject(this),A=arraySpeciesCreate(O,0),n=0,i=-1,length=arguments.length;i<length;i++)if((O=>{var spreadable;return!!isObject(O)&&(void 0!==(spreadable=O[IS_CONCAT_SPREADABLE])?!!spreadable:isArray(O))})(E=-1===i?O:arguments[i]))for(len=lengthOfArrayLike(E),doesNotExceedSafeInteger(n+len),k=0;k<len;k++,n++)k in E&&createProperty(A,n,E[k]);else doesNotExceedSafeInteger(n+1),createProperty(A,n++,E);return A.length=n,A}})},{"../internals/array-method-has-species-support":15,"../internals/array-species-create":20,"../internals/create-property":33,"../internals/does-not-exceed-safe-integer":41,"../internals/environment-v8-version":50,"../internals/export":52,"../internals/fails":53,"../internals/is-array":84,"../internals/is-object":89,"../internals/length-of-array-like":100,"../internals/to-object":161,"../internals/well-known-symbol":174}],177:[function(require,module,exports){var $=require("../internals/export"),$filter=require("../internals/array-iteration").filter;$({target:"Array",proto:!0,forced:!require("../internals/array-method-has-species-support")("filter")},{filter:function(callbackfn){return $filter(this,callbackfn,1<arguments.length?arguments[1]:void 0)}})},{"../internals/array-iteration":13,"../internals/array-method-has-species-support":15,"../internals/export":52}],178:[function(require,module,exports){var $=require("../internals/export"),$findIndex=require("../internals/array-iteration").findIndex,require=require("../internals/add-to-unscopables"),SKIPS_HOLES=!0;"findIndex"in[]&&Array(1).findIndex(function(){SKIPS_HOLES=!1}),$({target:"Array",proto:!0,forced:SKIPS_HOLES},{findIndex:function(callbackfn){return $findIndex(this,callbackfn,1<arguments.length?arguments[1]:void 0)}}),require("findIndex")},{"../internals/add-to-unscopables":5,"../internals/array-iteration":13,"../internals/export":52}],179:[function(require,module,exports){var $=require("../internals/export"),$find=require("../internals/array-iteration").find,require=require("../internals/add-to-unscopables"),SKIPS_HOLES=!0;"find"in[]&&Array(1).find(function(){SKIPS_HOLES=!1}),$({target:"Array",proto:!0,forced:SKIPS_HOLES},{find:function(callbackfn){return $find(this,callbackfn,1<arguments.length?arguments[1]:void 0)}}),require("find")},{"../internals/add-to-unscopables":5,"../internals/array-iteration":13,"../internals/export":52}],180:[function(require,module,exports){var $=require("../internals/export"),flattenIntoArray=require("../internals/flatten-into-array"),aCallable=require("../internals/a-callable"),toObject=require("../internals/to-object"),lengthOfArrayLike=require("../internals/length-of-array-like"),arraySpeciesCreate=require("../internals/array-species-create");$({target:"Array",proto:!0},{flatMap:function(callbackfn){var A,O=toObject(this),sourceLen=lengthOfArrayLike(O);return aCallable(callbackfn),(A=arraySpeciesCreate(O,0)).length=flattenIntoArray(A,O,O,sourceLen,0,1,callbackfn,1<arguments.length?arguments[1]:void 0),A}})},{"../internals/a-callable":2,"../internals/array-species-create":20,"../internals/export":52,"../internals/flatten-into-array":55,"../internals/length-of-array-like":100,"../internals/to-object":161}],181:[function(require,module,exports){var $=require("../internals/export"),from=require("../internals/array-from");$({target:"Array",stat:!0,forced:!require("../internals/check-correctness-of-iteration")(function(iterable){Array.from(iterable)})},{from:from})},{"../internals/array-from":11,"../internals/check-correctness-of-iteration":22,"../internals/export":52}],182:[function(require,module,exports){var $=require("../internals/export"),$includes=require("../internals/array-includes").includes,fails=require("../internals/fails"),require=require("../internals/add-to-unscopables");$({target:"Array",proto:!0,forced:fails(function(){return!Array(1).includes()})},{includes:function(el){return $includes(this,el,1<arguments.length?arguments[1]:void 0)}}),require("includes")},{"../internals/add-to-unscopables":5,"../internals/array-includes":12,"../internals/export":52,"../internals/fails":53}],183:[function(require,module,exports){var $=require("../internals/export"),uncurryThis=require("../internals/function-uncurry-this-clause"),$indexOf=require("../internals/array-includes").indexOf,require=require("../internals/array-method-is-strict"),nativeIndexOf=uncurryThis([].indexOf),NEGATIVE_ZERO=!!nativeIndexOf&&1/nativeIndexOf([1],1,-0)<0;$({target:"Array",proto:!0,forced:NEGATIVE_ZERO||!require("indexOf")},{indexOf:function(searchElement){var fromIndex=1<arguments.length?arguments[1]:void 0;return NEGATIVE_ZERO?nativeIndexOf(this,searchElement,fromIndex)||0:$indexOf(this,searchElement,fromIndex)}})},{"../internals/array-includes":12,"../internals/array-method-is-strict":16,"../internals/export":52,"../internals/function-uncurry-this-clause":64}],184:[function(require,module,exports){var toIndexedObject=require("../internals/to-indexed-object"),addToUnscopables=require("../internals/add-to-unscopables"),Iterators=require("../internals/iterators"),InternalStateModule=require("../internals/internal-state"),defineProperty=require("../internals/object-define-property").f,defineIterator=require("../internals/iterator-define"),createIterResultObject=require("../internals/create-iter-result-object"),IS_PURE=require("../internals/is-pure"),require=require("../internals/descriptors"),setInternalState=InternalStateModule.set,getInternalState=InternalStateModule.getterFor("Array Iterator"),InternalStateModule=(module.exports=defineIterator(Array,"Array",function(iterated,kind){setInternalState(this,{type:"Array Iterator",target:toIndexedObject(iterated),index:0,kind:kind})},function(){var state=getInternalState(this),target=state.target,index=state.index++;if(!target||index>=target.length)return state.target=null,createIterResultObject(void 0,!0);switch(state.kind){case"keys":return createIterResultObject(index,!1);case"values":return createIterResultObject(target[index],!1)}return createIterResultObject([index,target[index]],!1)},"values"),Iterators.Arguments=Iterators.Array);if(addToUnscopables("keys"),addToUnscopables("values"),addToUnscopables("entries"),!IS_PURE&&require&&"values"!==InternalStateModule.name)try{defineProperty(InternalStateModule,"name",{value:"values"})}catch(error){}},{"../internals/add-to-unscopables":5,"../internals/create-iter-result-object":30,"../internals/descriptors":39,"../internals/internal-state":82,"../internals/is-pure":91,"../internals/iterator-define":97,"../internals/iterators":99,"../internals/object-define-property":109,"../internals/to-indexed-object":158}],185:[function(require,module,exports){var $=require("../internals/export"),require=require("../internals/array-last-index-of");$({target:"Array",proto:!0,forced:require!==[].lastIndexOf},{lastIndexOf:require})},{"../internals/array-last-index-of":14,"../internals/export":52}],186:[function(require,module,exports){var $=require("../internals/export"),$map=require("../internals/array-iteration").map;$({target:"Array",proto:!0,forced:!require("../internals/array-method-has-species-support")("map")},{map:function(callbackfn){return $map(this,callbackfn,1<arguments.length?arguments[1]:void 0)}})},{"../internals/array-iteration":13,"../internals/array-method-has-species-support":15,"../internals/export":52}],187:[function(require,module,exports){var $=require("../internals/export"),$reduce=require("../internals/array-reduce").left,arrayMethodIsStrict=require("../internals/array-method-is-strict"),CHROME_VERSION=require("../internals/environment-v8-version");$({target:"Array",proto:!0,forced:!require("../internals/environment-is-node")&&79<CHROME_VERSION&&CHROME_VERSION<83||!arrayMethodIsStrict("reduce")},{reduce:function(callbackfn){var length=arguments.length;return $reduce(this,callbackfn,length,1<length?arguments[1]:void 0)}})},{"../internals/array-method-is-strict":16,"../internals/array-reduce":17,"../internals/environment-is-node":47,"../internals/environment-v8-version":50,"../internals/export":52}],188:[function(require,module,exports){var $=require("../internals/export"),uncurryThis=require("../internals/function-uncurry-this"),isArray=require("../internals/is-array"),nativeReverse=uncurryThis([].reverse),require=[1,2];$({target:"Array",proto:!0,forced:String(require)===String(require.reverse())},{reverse:function(){return isArray(this)&&(this.length=this.length),nativeReverse(this)}})},{"../internals/export":52,"../internals/function-uncurry-this":65,"../internals/is-array":84}],189:[function(require,module,exports){var $=require("../internals/export"),isArray=require("../internals/is-array"),isConstructor=require("../internals/is-constructor"),isObject=require("../internals/is-object"),toAbsoluteIndex=require("../internals/to-absolute-index"),lengthOfArrayLike=require("../internals/length-of-array-like"),toIndexedObject=require("../internals/to-indexed-object"),createProperty=require("../internals/create-property"),wellKnownSymbol=require("../internals/well-known-symbol"),arrayMethodHasSpeciesSupport=require("../internals/array-method-has-species-support"),nativeSlice=require("../internals/array-slice"),require=arrayMethodHasSpeciesSupport("slice"),SPECIES=wellKnownSymbol("species"),$Array=Array,max=Math.max;$({target:"Array",proto:!0,forced:!require},{slice:function(start,end){var Constructor,result,n,O=toIndexedObject(this),length=lengthOfArrayLike(O),k=toAbsoluteIndex(start,length),fin=toAbsoluteIndex(void 0===end?length:end,length);if(isArray(O)&&(Constructor=O.constructor,(Constructor=isConstructor(Constructor)&&(Constructor===$Array||isArray(Constructor.prototype))||isObject(Constructor)&&null===(Constructor=Constructor[SPECIES]))?void 0:Constructor)===$Array||void 0===Constructor))return nativeSlice(O,k,fin);for(result=new(void 0===Constructor?$Array:Constructor)(max(fin-k,0)),n=0;k<fin;k++,n++)k in O&&createProperty(result,n,O[k]);return result.length=n,result}})},{"../internals/array-method-has-species-support":15,"../internals/array-slice":18,"../internals/create-property":33,"../internals/export":52,"../internals/is-array":84,"../internals/is-constructor":86,"../internals/is-object":89,"../internals/length-of-array-like":100,"../internals/to-absolute-index":157,"../internals/to-indexed-object":158,"../internals/well-known-symbol":174}],190:[function(require,module,exports){require("../internals/add-to-unscopables")("flatMap")},{"../internals/add-to-unscopables":5}],191:[function(require,module,exports){var hasOwn=require("../internals/has-own-property"),defineBuiltIn=require("../internals/define-built-in"),dateToPrimitive=require("../internals/date-to-primitive"),require=require("../internals/well-known-symbol")("toPrimitive"),DatePrototype=Date.prototype;hasOwn(DatePrototype,require)||defineBuiltIn(DatePrototype,require,dateToPrimitive)},{"../internals/date-to-primitive":34,"../internals/define-built-in":36,"../internals/has-own-property":73,"../internals/well-known-symbol":174}],192:[function(require,module,exports){function stringifyWithSymbolsFix(it,replacer){var args=arraySlice(arguments),$replacer=getReplacerFunction(replacer);if(isCallable($replacer)||void 0!==it&&!isSymbol(it))return args[1]=function(key,value){if(isCallable($replacer)&&(value=call($replacer,this,$String(key),value)),!isSymbol(value))return value},apply($stringify,null,args)}function fixIllFormed(match,offset,string){var prev=charAt(string,offset-1),string=charAt(string,offset+1);return exec(low,match)&&!exec(hi,string)||exec(hi,match)&&!exec(low,prev)?"\\u"+numberToString(charCodeAt(match,0),16):match}var $=require("../internals/export"),getBuiltIn=require("../internals/get-built-in"),apply=require("../internals/function-apply"),call=require("../internals/function-call"),uncurryThis=require("../internals/function-uncurry-this"),fails=require("../internals/fails"),isCallable=require("../internals/is-callable"),isSymbol=require("../internals/is-symbol"),arraySlice=require("../internals/array-slice"),getReplacerFunction=require("../internals/get-json-replacer-function"),require=require("../internals/symbol-constructor-detection"),$String=String,$stringify=getBuiltIn("JSON","stringify"),exec=uncurryThis(/./.exec),charAt=uncurryThis("".charAt),charCodeAt=uncurryThis("".charCodeAt),replace=uncurryThis("".replace),numberToString=uncurryThis(1.1.toString),tester=/[\uD800-\uDFFF]/g,low=/^[\uD800-\uDBFF]$/,hi=/^[\uDC00-\uDFFF]$/,WRONG_SYMBOLS_CONVERSION=!require||fails(function(){var symbol=getBuiltIn("Symbol")("stringify detection");return"[null]"!==$stringify([symbol])||"{}"!==$stringify({a:symbol})||"{}"!==$stringify(Object(symbol))}),ILL_FORMED_UNICODE=fails(function(){return'"\\udf06\\ud834"'!==$stringify("\udf06\ud834")||'"\\udead"'!==$stringify("\udead")});$stringify&&$({target:"JSON",stat:!0,arity:3,forced:WRONG_SYMBOLS_CONVERSION||ILL_FORMED_UNICODE},{stringify:function(it,replacer,space){var args=arraySlice(arguments),args=apply(WRONG_SYMBOLS_CONVERSION?stringifyWithSymbolsFix:$stringify,null,args);return ILL_FORMED_UNICODE&&"string"==typeof args?replace(args,tester,fixIllFormed):args}})},{"../internals/array-slice":18,"../internals/export":52,"../internals/fails":53,"../internals/function-apply":57,"../internals/function-call":61,"../internals/function-uncurry-this":65,"../internals/get-built-in":66,"../internals/get-json-replacer-function":69,"../internals/is-callable":85,"../internals/is-symbol":93,"../internals/symbol-constructor-detection":152}],193:[function(require,module,exports){function NumberWrapper(value){var dummy,value=arguments.length<1?0:NativeNumber((value=>"bigint"==typeof(value=toPrimitive(value,"number"))?value:toNumber(value))(value));return isPrototypeOf(NumberPrototype,dummy=this)&&fails(function(){thisNumberValue(dummy)})?inheritIfRequired(Object(value),this,NumberWrapper):value}function copyConstructorProperties(target,source){for(var key,keys=DESCRIPTORS?getOwnPropertyNames(source):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(","),j=0;keys.length>j;j++)hasOwn(source,key=keys[j])&&!hasOwn(target,key)&&defineProperty(target,key,getOwnPropertyDescriptor(source,key))}var $=require("../internals/export"),IS_PURE=require("../internals/is-pure"),DESCRIPTORS=require("../internals/descriptors"),globalThis=require("../internals/global-this"),path=require("../internals/path"),uncurryThis=require("../internals/function-uncurry-this"),isForced=require("../internals/is-forced"),hasOwn=require("../internals/has-own-property"),inheritIfRequired=require("../internals/inherit-if-required"),isPrototypeOf=require("../internals/object-is-prototype-of"),isSymbol=require("../internals/is-symbol"),toPrimitive=require("../internals/to-primitive"),fails=require("../internals/fails"),getOwnPropertyNames=require("../internals/object-get-own-property-names").f,getOwnPropertyDescriptor=require("../internals/object-get-own-property-descriptor").f,defineProperty=require("../internals/object-define-property").f,thisNumberValue=require("../internals/this-number-value"),trim=require("../internals/string-trim").trim,NativeNumber=globalThis.Number,require=path.Number,NumberPrototype=NativeNumber.prototype,TypeError=globalThis.TypeError,stringSlice=uncurryThis("".slice),charCodeAt=uncurryThis("".charCodeAt),toNumber=function(argument){var third,radix,maxCode,digits,length,index,code,it=toPrimitive(argument,"number");if(isSymbol(it))throw new TypeError("Cannot convert a Symbol value to a number");if("string"==typeof it&&2<it.length)if(it=trim(it),43===(argument=charCodeAt(it,0))||45===argument){if(88===(third=charCodeAt(it,2))||120===third)return NaN}else if(48===argument){switch(charCodeAt(it,1)){case 66:case 98:radix=2,maxCode=49;break;case 79:case 111:radix=8,maxCode=55;break;default:return+it}for(length=(digits=stringSlice(it,2)).length,index=0;index<length;index++)if((code=charCodeAt(digits,index))<48||maxCode<code)return NaN;return parseInt(digits,radix)}return+it},globalThis=isForced("Number",!NativeNumber(" 0o1")||!NativeNumber("0b1")||NativeNumber("+0x1"));NumberWrapper.prototype=NumberPrototype,globalThis&&!IS_PURE&&(NumberPrototype.constructor=NumberWrapper),$({global:!0,constructor:!0,wrap:!0,forced:globalThis},{Number:NumberWrapper});IS_PURE&&require&©ConstructorProperties(path.Number,require),(globalThis||IS_PURE)&©ConstructorProperties(path.Number,NativeNumber)},{"../internals/descriptors":39,"../internals/export":52,"../internals/fails":53,"../internals/function-uncurry-this":65,"../internals/global-this":72,"../internals/has-own-property":73,"../internals/inherit-if-required":79,"../internals/is-forced":87,"../internals/is-pure":91,"../internals/is-symbol":93,"../internals/object-define-property":109,"../internals/object-get-own-property-descriptor":110,"../internals/object-get-own-property-names":112,"../internals/object-is-prototype-of":116,"../internals/path":125,"../internals/string-trim":151,"../internals/this-number-value":156,"../internals/to-primitive":162}],194:[function(require,module,exports){var $=require("../internals/export"),DESCRIPTORS=require("../internals/descriptors"),require=require("../internals/object-define-properties").f;$({target:"Object",stat:!0,forced:Object.defineProperties!==require,sham:!DESCRIPTORS},{defineProperties:require})},{"../internals/descriptors":39,"../internals/export":52,"../internals/object-define-properties":108}],195:[function(require,module,exports){var $=require("../internals/export"),DESCRIPTORS=require("../internals/descriptors"),require=require("../internals/object-define-property").f;$({target:"Object",stat:!0,forced:Object.defineProperty!==require,sham:!DESCRIPTORS},{defineProperty:require})},{"../internals/descriptors":39,"../internals/export":52,"../internals/object-define-property":109}],196:[function(require,module,exports){var $=require("../internals/export"),fails=require("../internals/fails"),toIndexedObject=require("../internals/to-indexed-object"),nativeGetOwnPropertyDescriptor=require("../internals/object-get-own-property-descriptor").f,require=require("../internals/descriptors");$({target:"Object",stat:!0,forced:!require||fails(function(){nativeGetOwnPropertyDescriptor(1)}),sham:!require},{getOwnPropertyDescriptor:function(it,key){return nativeGetOwnPropertyDescriptor(toIndexedObject(it),key)}})},{"../internals/descriptors":39,"../internals/export":52,"../internals/fails":53,"../internals/object-get-own-property-descriptor":110,"../internals/to-indexed-object":158}],197:[function(require,module,exports){var $=require("../internals/export"),DESCRIPTORS=require("../internals/descriptors"),ownKeys=require("../internals/own-keys"),toIndexedObject=require("../internals/to-indexed-object"),getOwnPropertyDescriptorModule=require("../internals/object-get-own-property-descriptor"),createProperty=require("../internals/create-property");$({target:"Object",stat:!0,sham:!DESCRIPTORS},{getOwnPropertyDescriptors:function(object){for(var key,descriptor,O=toIndexedObject(object),getOwnPropertyDescriptor=getOwnPropertyDescriptorModule.f,keys=ownKeys(O),result={},index=0;keys.length>index;)void 0!==(descriptor=getOwnPropertyDescriptor(O,key=keys[index++]))&&createProperty(result,key,descriptor);return result}})},{"../internals/create-property":33,"../internals/descriptors":39,"../internals/export":52,"../internals/object-get-own-property-descriptor":110,"../internals/own-keys":124,"../internals/to-indexed-object":158}],198:[function(require,module,exports){var $=require("../internals/export"),NATIVE_SYMBOL=require("../internals/symbol-constructor-detection"),fails=require("../internals/fails"),getOwnPropertySymbolsModule=require("../internals/object-get-own-property-symbols"),toObject=require("../internals/to-object");$({target:"Object",stat:!0,forced:!NATIVE_SYMBOL||fails(function(){getOwnPropertySymbolsModule.f(1)})},{getOwnPropertySymbols:function(it){var $getOwnPropertySymbols=getOwnPropertySymbolsModule.f;return $getOwnPropertySymbols?$getOwnPropertySymbols(toObject(it)):[]}})},{"../internals/export":52,"../internals/fails":53,"../internals/object-get-own-property-symbols":113,"../internals/symbol-constructor-detection":152,"../internals/to-object":161}],199:[function(require,module,exports){var $=require("../internals/export"),fails=require("../internals/fails"),toObject=require("../internals/to-object"),nativeGetPrototypeOf=require("../internals/object-get-prototype-of"),require=require("../internals/correct-prototype-getter");$({target:"Object",stat:!0,forced:fails(function(){nativeGetPrototypeOf(1)}),sham:!require},{getPrototypeOf:function(it){return nativeGetPrototypeOf(toObject(it))}})},{"../internals/correct-prototype-getter":29,"../internals/export":52,"../internals/fails":53,"../internals/object-get-prototype-of":114,"../internals/to-object":161}],200:[function(require,module,exports){var $=require("../internals/export"),toObject=require("../internals/to-object"),nativeKeys=require("../internals/object-keys");$({target:"Object",stat:!0,forced:require("../internals/fails")(function(){nativeKeys(1)})},{keys:function(it){return nativeKeys(toObject(it))}})},{"../internals/export":52,"../internals/fails":53,"../internals/object-keys":118,"../internals/to-object":161}],201:[function(require,module,exports){require("../internals/export")({target:"Object",stat:!0},{setPrototypeOf:require("../internals/object-set-prototype-of")})},{"../internals/export":52,"../internals/object-set-prototype-of":120}],202:[function(require,module,exports){var TO_STRING_TAG_SUPPORT=require("../internals/to-string-tag-support"),defineBuiltIn=require("../internals/define-built-in"),require=require("../internals/object-to-string");TO_STRING_TAG_SUPPORT||defineBuiltIn(Object.prototype,"toString",require,{unsafe:!0})},{"../internals/define-built-in":36,"../internals/object-to-string":122,"../internals/to-string-tag-support":164}],203:[function(require,module,exports){var $=require("../internals/export"),$values=require("../internals/object-to-array").values;$({target:"Object",stat:!0},{values:function(O){return $values(O)}})},{"../internals/export":52,"../internals/object-to-array":121}],204:[function(require,module,exports){var $=require("../internals/export"),require=require("../internals/number-parse-int");$({global:!0,forced:parseInt!==require},{parseInt:require})},{"../internals/export":52,"../internals/number-parse-int":106}],205:[function(require,module,exports){var $=require("../internals/export"),call=require("../internals/function-call"),aCallable=require("../internals/a-callable"),newPromiseCapabilityModule=require("../internals/new-promise-capability"),perform=require("../internals/perform"),iterate=require("../internals/iterate");$({target:"Promise",stat:!0,forced:require("../internals/promise-statics-incorrect-iteration")},{all:function(iterable){var C=this,capability=newPromiseCapabilityModule.f(C),resolve=capability.resolve,reject=capability.reject,result=perform(function(){var $promiseResolve=aCallable(C.resolve),values=[],counter=0,remaining=1;iterate(iterable,function(promise){var index=counter++,alreadyCalled=!1;remaining++,call($promiseResolve,C,promise).then(function(value){alreadyCalled||(alreadyCalled=!0,values[index]=value,--remaining)||resolve(values)},reject)}),--remaining||resolve(values)});return result.error&&reject(result.value),capability.promise}})},{"../internals/a-callable":2,"../internals/export":52,"../internals/function-call":61,"../internals/iterate":94,"../internals/new-promise-capability":104,"../internals/perform":126,"../internals/promise-statics-incorrect-iteration":130}],206:[function(require,module,exports){var $=require("../internals/export"),IS_PURE=require("../internals/is-pure"),FORCED_PROMISE_CONSTRUCTOR=require("../internals/promise-constructor-detection").CONSTRUCTOR,NativePromiseConstructor=require("../internals/promise-native-constructor"),getBuiltIn=require("../internals/get-built-in"),isCallable=require("../internals/is-callable"),require=require("../internals/define-built-in"),NativePromisePrototype=NativePromiseConstructor&&NativePromiseConstructor.prototype;$({target:"Promise",proto:!0,forced:FORCED_PROMISE_CONSTRUCTOR,real:!0},{catch:function(onRejected){return this.then(void 0,onRejected)}}),!IS_PURE&&isCallable(NativePromiseConstructor)&&($=getBuiltIn("Promise").prototype.catch,NativePromisePrototype.catch!==$)&&require(NativePromisePrototype,"catch",$,{unsafe:!0})},{"../internals/define-built-in":36,"../internals/export":52,"../internals/get-built-in":66,"../internals/is-callable":85,"../internals/is-pure":91,"../internals/promise-constructor-detection":127,"../internals/promise-native-constructor":128}],207:[function(require,module,exports){function onHandleUnhandled(state){call(task,globalThis,function(){var promise=state.facade;IS_NODE?process.emit("rejectionHandled",promise):dispatchEvent(REJECTION_HANDLED,promise,state.value)})}var Internal,OwnPromiseCapability,PromiseWrapper,nativeThen,$=require("../internals/export"),IS_PURE=require("../internals/is-pure"),IS_NODE=require("../internals/environment-is-node"),globalThis=require("../internals/global-this"),path=require("../internals/path"),call=require("../internals/function-call"),defineBuiltIn=require("../internals/define-built-in"),setPrototypeOf=require("../internals/object-set-prototype-of"),setToStringTag=require("../internals/set-to-string-tag"),setSpecies=require("../internals/set-species"),aCallable=require("../internals/a-callable"),isCallable=require("../internals/is-callable"),isObject=require("../internals/is-object"),anInstance=require("../internals/an-instance"),speciesConstructor=require("../internals/species-constructor"),task=require("../internals/task").set,microtask=require("../internals/microtask"),hostReportErrors=require("../internals/host-report-errors"),perform=require("../internals/perform"),Queue=require("../internals/queue"),InternalStateModule=require("../internals/internal-state"),NativePromiseConstructor=require("../internals/promise-native-constructor"),PromiseConstructorDetection=require("../internals/promise-constructor-detection"),require=require("../internals/new-promise-capability"),FORCED_PROMISE_CONSTRUCTOR=PromiseConstructorDetection.CONSTRUCTOR,NATIVE_PROMISE_REJECTION_EVENT=PromiseConstructorDetection.REJECTION_EVENT,PromiseConstructorDetection=PromiseConstructorDetection.SUBCLASSING,getInternalPromiseState=InternalStateModule.getterFor("Promise"),setInternalState=InternalStateModule.set,InternalStateModule=NativePromiseConstructor&&NativePromiseConstructor.prototype,PromiseConstructor=NativePromiseConstructor,PromisePrototype=InternalStateModule,TypeError=globalThis.TypeError,document=globalThis.document,process=globalThis.process,newPromiseCapability=require.f,newGenericPromiseCapability=newPromiseCapability,DISPATCH_EVENT=!!(document&&document.createEvent&&globalThis.dispatchEvent),UNHANDLED_REJECTION="unhandledrejection",REJECTION_HANDLED="rejectionhandled",FULFILLED=1,REJECTED=2,HANDLED=1,UNHANDLED=2,isThenable=function(it){var then;return!(!isObject(it)||!isCallable(then=it.then))&&then},callReaction=function(reaction,state){var result,then,exited,value=state.value,ok=state.state===FULFILLED,handler=ok?reaction.ok:reaction.fail,resolve=reaction.resolve,reject=reaction.reject,domain=reaction.domain;try{handler?(ok||(state.rejection===UNHANDLED&&onHandleUnhandled(state),state.rejection=HANDLED),!0===handler?result=value:(domain&&domain.enter(),result=handler(value),domain&&(domain.exit(),exited=!0)),result===reaction.promise?reject(new TypeError("Promise-chain cycle")):(then=isThenable(result))?call(then,result,resolve,reject):resolve(result)):reject(value)}catch(error){domain&&!exited&&domain.exit(),reject(error)}},notify=function(state,isReject){state.notified||(state.notified=!0,microtask(function(){for(var reaction,reactions=state.reactions;reaction=reactions.get();)callReaction(reaction,state);state.notified=!1,isReject&&!state.rejection&&onUnhandled(state)}))},dispatchEvent=function(name,promise,reason){var event;DISPATCH_EVENT?((event=document.createEvent("Event")).promise=promise,event.reason=reason,event.initEvent(name,!1,!0),globalThis.dispatchEvent(event)):event={promise:promise,reason:reason},!NATIVE_PROMISE_REJECTION_EVENT&&(promise=globalThis["on"+name])?promise(event):name===UNHANDLED_REJECTION&&hostReportErrors("Unhandled promise rejection",reason)},onUnhandled=function(state){call(task,globalThis,function(){var promise=state.facade,value=state.value,IS_UNHANDLED=isUnhandled(state);if(IS_UNHANDLED&&(IS_UNHANDLED=perform(function(){IS_NODE?process.emit("unhandledRejection",value,promise):dispatchEvent(UNHANDLED_REJECTION,promise,value)}),state.rejection=IS_NODE||isUnhandled(state)?UNHANDLED:HANDLED,IS_UNHANDLED.error))throw IS_UNHANDLED.value})},isUnhandled=function(state){return state.rejection!==HANDLED&&!state.parent},bind=function(fn,state,unwrap){return function(value){fn(state,value,unwrap)}},internalReject=function(state,value,unwrap){state.done||(state.done=!0,(state=unwrap?unwrap:state).value=value,state.state=REJECTED,notify(state,!0))},internalResolve=function(state,value,unwrap){if(!state.done){state.done=!0,unwrap&&(state=unwrap);try{if(state.facade===value)throw new TypeError("Promise can't be resolved itself");var then=isThenable(value);then?microtask(function(){var wrapper={done:!1};try{call(then,value,bind(internalResolve,wrapper,state),bind(internalReject,wrapper,state))}catch(error){internalReject(wrapper,error,state)}}):(state.value=value,state.state=FULFILLED,notify(state,!1))}catch(error){internalReject({done:!1},error,state)}}};if(FORCED_PROMISE_CONSTRUCTOR&&(PromisePrototype=(PromiseConstructor=function(executor){anInstance(this,PromisePrototype),aCallable(executor),call(Internal,this);var state=getInternalPromiseState(this);try{executor(bind(internalResolve,state),bind(internalReject,state))}catch(error){internalReject(state,error)}}).prototype,(Internal=function(executor){setInternalState(this,{type:"Promise",done:!1,notified:!1,parent:!1,reactions:new Queue,rejection:!1,state:0,value:null})}).prototype=defineBuiltIn(PromisePrototype,"then",function(onFulfilled,onRejected){var state=getInternalPromiseState(this),reaction=newPromiseCapability(speciesConstructor(this,PromiseConstructor));return state.parent=!0,reaction.ok=!isCallable(onFulfilled)||onFulfilled,reaction.fail=isCallable(onRejected)&&onRejected,reaction.domain=IS_NODE?process.domain:void 0,0===state.state?state.reactions.add(reaction):microtask(function(){callReaction(reaction,state)}),reaction.promise}),OwnPromiseCapability=function(){var promise=new Internal,state=getInternalPromiseState(promise);this.promise=promise,this.resolve=bind(internalResolve,state),this.reject=bind(internalReject,state)},require.f=newPromiseCapability=function(C){return C===PromiseConstructor||C===PromiseWrapper?new OwnPromiseCapability:newGenericPromiseCapability(C)},!IS_PURE)&&isCallable(NativePromiseConstructor)&&InternalStateModule!==Object.prototype){nativeThen=InternalStateModule.then,PromiseConstructorDetection||defineBuiltIn(InternalStateModule,"then",function(onFulfilled,onRejected){var that=this;return new PromiseConstructor(function(resolve,reject){call(nativeThen,that,resolve,reject)}).then(onFulfilled,onRejected)},{unsafe:!0});try{delete InternalStateModule.constructor}catch(error){}setPrototypeOf&&setPrototypeOf(InternalStateModule,PromisePrototype)}$({global:!0,constructor:!0,wrap:!0,forced:FORCED_PROMISE_CONSTRUCTOR},{Promise:PromiseConstructor}),PromiseWrapper=path.Promise,setToStringTag(PromiseConstructor,"Promise",!1,!0),setSpecies("Promise")},{"../internals/a-callable":2,"../internals/an-instance":7,"../internals/define-built-in":36,"../internals/environment-is-node":47,"../internals/export":52,"../internals/function-call":61,"../internals/global-this":72,"../internals/host-report-errors":75,"../internals/internal-state":82,"../internals/is-callable":85,"../internals/is-object":89,"../internals/is-pure":91,"../internals/microtask":103,"../internals/new-promise-capability":104,"../internals/object-set-prototype-of":120,"../internals/path":125,"../internals/perform":126,"../internals/promise-constructor-detection":127,"../internals/promise-native-constructor":128,"../internals/queue":132,"../internals/set-species":143,"../internals/set-to-string-tag":144,"../internals/species-constructor":148,"../internals/task":155}],208:[function(require,module,exports){require("../modules/es.promise.constructor"),require("../modules/es.promise.all"),require("../modules/es.promise.catch"),require("../modules/es.promise.race"),require("../modules/es.promise.reject"),require("../modules/es.promise.resolve")},{"../modules/es.promise.all":205,"../modules/es.promise.catch":206,"../modules/es.promise.constructor":207,"../modules/es.promise.race":209,"../modules/es.promise.reject":210,"../modules/es.promise.resolve":211}],209:[function(require,module,exports){var $=require("../internals/export"),call=require("../internals/function-call"),aCallable=require("../internals/a-callable"),newPromiseCapabilityModule=require("../internals/new-promise-capability"),perform=require("../internals/perform"),iterate=require("../internals/iterate");$({target:"Promise",stat:!0,forced:require("../internals/promise-statics-incorrect-iteration")},{race:function(iterable){var C=this,capability=newPromiseCapabilityModule.f(C),reject=capability.reject,result=perform(function(){var $promiseResolve=aCallable(C.resolve);iterate(iterable,function(promise){call($promiseResolve,C,promise).then(capability.resolve,reject)})});return result.error&&reject(result.value),capability.promise}})},{"../internals/a-callable":2,"../internals/export":52,"../internals/function-call":61,"../internals/iterate":94,"../internals/new-promise-capability":104,"../internals/perform":126,"../internals/promise-statics-incorrect-iteration":130}],210:[function(require,module,exports){var $=require("../internals/export"),newPromiseCapabilityModule=require("../internals/new-promise-capability");$({target:"Promise",stat:!0,forced:require("../internals/promise-constructor-detection").CONSTRUCTOR},{reject:function(r){var capability=newPromiseCapabilityModule.f(this);return(0,capability.reject)(r),capability.promise}})},{"../internals/export":52,"../internals/new-promise-capability":104,"../internals/promise-constructor-detection":127}],211:[function(require,module,exports){var $=require("../internals/export"),getBuiltIn=require("../internals/get-built-in"),IS_PURE=require("../internals/is-pure"),NativePromiseConstructor=require("../internals/promise-native-constructor"),FORCED_PROMISE_CONSTRUCTOR=require("../internals/promise-constructor-detection").CONSTRUCTOR,promiseResolve=require("../internals/promise-resolve"),PromiseConstructorWrapper=getBuiltIn("Promise"),CHECK_WRAPPER=IS_PURE&&!FORCED_PROMISE_CONSTRUCTOR;$({target:"Promise",stat:!0,forced:IS_PURE||FORCED_PROMISE_CONSTRUCTOR},{resolve:function(x){return promiseResolve(CHECK_WRAPPER&&this===PromiseConstructorWrapper?NativePromiseConstructor:this,x)}})},{"../internals/export":52,"../internals/get-built-in":66,"../internals/is-pure":91,"../internals/promise-constructor-detection":127,"../internals/promise-native-constructor":128,"../internals/promise-resolve":129}],212:[function(require,module,exports){var $=require("../internals/export"),getBuiltIn=require("../internals/get-built-in"),apply=require("../internals/function-apply"),bind=require("../internals/function-bind"),aConstructor=require("../internals/a-constructor"),anObject=require("../internals/an-object"),isObject=require("../internals/is-object"),create=require("../internals/object-create"),require=require("../internals/fails"),nativeConstruct=getBuiltIn("Reflect","construct"),ObjectPrototype=Object.prototype,push=[].push,NEW_TARGET_BUG=require(function(){function F(){}return!(nativeConstruct(function(){},[],F)instanceof F)}),ARGS_BUG=!require(function(){nativeConstruct(function(){})}),getBuiltIn=NEW_TARGET_BUG||ARGS_BUG;$({target:"Reflect",stat:!0,forced:getBuiltIn,sham:getBuiltIn},{construct:function(Target,args){aConstructor(Target),anObject(args);var newTarget=arguments.length<3?Target:aConstructor(arguments[2]);if(ARGS_BUG&&!NEW_TARGET_BUG)return nativeConstruct(Target,args,newTarget);if(Target===newTarget){switch(args.length){case 0:return new Target;case 1:return new Target(args[0]);case 2:return new Target(args[0],args[1]);case 3:return new Target(args[0],args[1],args[2]);case 4:return new Target(args[0],args[1],args[2],args[3])}var $args=[null];return apply(push,$args,args),new(apply(bind,Target,$args))}$args=newTarget.prototype,newTarget=create(isObject($args)?$args:ObjectPrototype),$args=apply(Target,newTarget,args);return isObject($args)?$args:newTarget}})},{"../internals/a-constructor":3,"../internals/an-object":8,"../internals/export":52,"../internals/fails":53,"../internals/function-apply":57,"../internals/function-bind":60,"../internals/get-built-in":66,"../internals/is-object":89,"../internals/object-create":107}],213:[function(require,module,exports){var DESCRIPTORS=require("../internals/descriptors"),globalThis=require("../internals/global-this"),uncurryThis=require("../internals/function-uncurry-this"),isForced=require("../internals/is-forced"),inheritIfRequired=require("../internals/inherit-if-required"),createNonEnumerableProperty=require("../internals/create-non-enumerable-property"),create=require("../internals/object-create"),getOwnPropertyNames=require("../internals/object-get-own-property-names").f,isPrototypeOf=require("../internals/object-is-prototype-of"),isRegExp=require("../internals/is-regexp"),toString=require("../internals/to-string"),getRegExpFlags=require("../internals/regexp-get-flags"),stickyHelpers=require("../internals/regexp-sticky-helpers"),proxyAccessor=require("../internals/proxy-accessor"),defineBuiltIn=require("../internals/define-built-in"),fails=require("../internals/fails"),hasOwn=require("../internals/has-own-property"),enforceInternalState=require("../internals/internal-state").enforce,setSpecies=require("../internals/set-species"),wellKnownSymbol=require("../internals/well-known-symbol"),UNSUPPORTED_DOT_ALL=require("../internals/regexp-unsupported-dot-all"),UNSUPPORTED_NCG=require("../internals/regexp-unsupported-ncg"),MATCH=wellKnownSymbol("match"),NativeRegExp=globalThis.RegExp,RegExpPrototype=NativeRegExp.prototype,SyntaxError=globalThis.SyntaxError,exec=uncurryThis(RegExpPrototype.exec),charAt=uncurryThis("".charAt),replace=uncurryThis("".replace),stringIndexOf=uncurryThis("".indexOf),stringSlice=uncurryThis("".slice),IS_NCG=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,re1=/a/g,re2=/a/g,require=new NativeRegExp(re1)!==re1,MISSED_STICKY=stickyHelpers.MISSED_STICKY,UNSUPPORTED_Y=stickyHelpers.UNSUPPORTED_Y,wellKnownSymbol=DESCRIPTORS&&(!require||MISSED_STICKY||UNSUPPORTED_DOT_ALL||UNSUPPORTED_NCG||fails(function(){return re2[MATCH]=!1,NativeRegExp(re1)!==re1||NativeRegExp(re2)===re2||"/a/i"!==String(NativeRegExp(re1,"i"))}));if(isForced("RegExp",wellKnownSymbol)){for(var RegExpWrapper=function(pattern,flags){var dotAll,sticky,thisIsRegExp=isPrototypeOf(RegExpPrototype,this),patternIsRegExp=isRegExp(pattern),flagsAreUndefined=void 0===flags,groups=[],rawPattern=pattern;if(!thisIsRegExp&&patternIsRegExp&&flagsAreUndefined&&pattern.constructor===RegExpWrapper)return pattern;if((patternIsRegExp||isPrototypeOf(RegExpPrototype,pattern))&&(pattern=pattern.source,flagsAreUndefined)&&(flags=getRegExpFlags(rawPattern)),pattern=void 0===pattern?"":toString(pattern),flags=void 0===flags?"":toString(flags),rawPattern=pattern,patternIsRegExp=flags=UNSUPPORTED_DOT_ALL&&"dotAll"in re1&&(dotAll=!!flags&&-1<stringIndexOf(flags,"s"))?replace(flags,/s/g,""):flags,MISSED_STICKY&&"sticky"in re1&&(sticky=!!flags&&-1<stringIndexOf(flags,"y"))&&UNSUPPORTED_Y&&(flags=replace(flags,/y/g,"")),UNSUPPORTED_NCG&&(pattern=(flagsAreUndefined=(string=>{for(var chr,length=string.length,index=0,result="",named=[],names=create(null),brackets=!1,ncg=!1,groupid=0,groupname="";index<=length;index++){if("\\"===(chr=charAt(string,index)))chr+=charAt(string,++index);else if("]"===chr)brackets=!1;else if(!brackets)switch(!0){case"["===chr:brackets=!0;break;case"("===chr:if(result+=chr,"?:"===stringSlice(string,index+1,index+3))continue;exec(IS_NCG,stringSlice(string,index+1))&&(index+=2,ncg=!0),groupid++;continue;case">"===chr&&ncg:if(""===groupname||hasOwn(names,groupname))throw new SyntaxError("Invalid capture group name");names[groupname]=!0,ncg=!(named[named.length]=[groupname,groupid]),groupname="";continue}ncg?groupname+=chr:result+=chr}return[result,named]})(pattern))[0],groups=flagsAreUndefined[1]),flagsAreUndefined=inheritIfRequired(NativeRegExp(pattern,flags),thisIsRegExp?this:RegExpPrototype,RegExpWrapper),(dotAll||sticky||groups.length)&&(flags=enforceInternalState(flagsAreUndefined),dotAll&&(flags.dotAll=!0,flags.raw=RegExpWrapper((string=>{for(var chr,length=string.length,index=0,result="",brackets=!1;index<=length;index++)"\\"===(chr=charAt(string,index))?result+=chr+charAt(string,++index):brackets||"."!==chr?("["===chr?brackets=!0:"]"===chr&&(brackets=!1),result+=chr):result+="[\\s\\S]";return result})(pattern),patternIsRegExp)),sticky&&(flags.sticky=!0),groups.length)&&(flags.groups=groups),pattern!==rawPattern)try{createNonEnumerableProperty(flagsAreUndefined,"source",""===rawPattern?"(?:)":rawPattern)}catch(error){}return flagsAreUndefined},keys=getOwnPropertyNames(NativeRegExp),index=0;keys.length>index;)proxyAccessor(RegExpWrapper,NativeRegExp,keys[index++]);(RegExpPrototype.constructor=RegExpWrapper).prototype=RegExpPrototype,defineBuiltIn(globalThis,"RegExp",RegExpWrapper,{constructor:!0})}setSpecies("RegExp")},{"../internals/create-non-enumerable-property":31,"../internals/define-built-in":36,"../internals/descriptors":39,"../internals/fails":53,"../internals/function-uncurry-this":65,"../internals/global-this":72,"../internals/has-own-property":73,"../internals/inherit-if-required":79,"../internals/internal-state":82,"../internals/is-forced":87,"../internals/is-regexp":92,"../internals/object-create":107,"../internals/object-get-own-property-names":112,"../internals/object-is-prototype-of":116,"../internals/proxy-accessor":131,"../internals/regexp-get-flags":137,"../internals/regexp-sticky-helpers":138,"../internals/regexp-unsupported-dot-all":139,"../internals/regexp-unsupported-ncg":140,"../internals/set-species":143,"../internals/to-string":165,"../internals/well-known-symbol":174}],214:[function(require,module,exports){var $=require("../internals/export"),require=require("../internals/regexp-exec");$({target:"RegExp",proto:!0,forced:/./.exec!==require},{exec:require})},{"../internals/export":52,"../internals/regexp-exec":134}],215:[function(require,module,exports){var PROPER_FUNCTION_NAME=require("../internals/function-name").PROPER,defineBuiltIn=require("../internals/define-built-in"),anObject=require("../internals/an-object"),$toString=require("../internals/to-string"),fails=require("../internals/fails"),getRegExpFlags=require("../internals/regexp-get-flags"),require=RegExp.prototype,nativeToString=require.toString,fails=fails(function(){return"/a/b"!==nativeToString.call({source:"a",flags:"b"})}),PROPER_FUNCTION_NAME=PROPER_FUNCTION_NAME&&"toString"!==nativeToString.name;(fails||PROPER_FUNCTION_NAME)&&defineBuiltIn(require,"toString",function(){var R=anObject(this);return"/"+$toString(R.source)+"/"+$toString(getRegExpFlags(R))},{unsafe:!0})},{"../internals/an-object":8,"../internals/define-built-in":36,"../internals/fails":53,"../internals/function-name":62,"../internals/regexp-get-flags":137,"../internals/to-string":165}],216:[function(require,module,exports){var $=require("../internals/export"),uncurryThis=require("../internals/function-uncurry-this-clause"),getOwnPropertyDescriptor=require("../internals/object-get-own-property-descriptor").f,toLength=require("../internals/to-length"),toString=require("../internals/to-string"),notARegExp=require("../internals/not-a-regexp"),requireObjectCoercible=require("../internals/require-object-coercible"),correctIsRegExpLogic=require("../internals/correct-is-regexp-logic"),require=require("../internals/is-pure"),slice=uncurryThis("".slice),min=Math.min,uncurryThis=correctIsRegExpLogic("endsWith");$({target:"String",proto:!0,forced:!!(require||uncurryThis||!(correctIsRegExpLogic=getOwnPropertyDescriptor(String.prototype,"endsWith"))||correctIsRegExpLogic.writable)&&!uncurryThis},{endsWith:function(searchString){var that=toString(requireObjectCoercible(this)),endPosition=(notARegExp(searchString),1<arguments.length?arguments[1]:void 0),len=that.length,endPosition=void 0===endPosition?len:min(toLength(endPosition),len),len=toString(searchString);return slice(that,endPosition-len.length,endPosition)===len}})},{"../internals/correct-is-regexp-logic":28,"../internals/export":52,"../internals/function-uncurry-this-clause":64,"../internals/is-pure":91,"../internals/not-a-regexp":105,"../internals/object-get-own-property-descriptor":110,"../internals/require-object-coercible":141,"../internals/to-length":160,"../internals/to-string":165}],217:[function(require,module,exports){var $=require("../internals/export"),uncurryThis=require("../internals/function-uncurry-this"),notARegExp=require("../internals/not-a-regexp"),requireObjectCoercible=require("../internals/require-object-coercible"),toString=require("../internals/to-string"),require=require("../internals/correct-is-regexp-logic"),stringIndexOf=uncurryThis("".indexOf);$({target:"String",proto:!0,forced:!require("includes")},{includes:function(searchString){return!!~stringIndexOf(toString(requireObjectCoercible(this)),toString(notARegExp(searchString)),1<arguments.length?arguments[1]:void 0)}})},{"../internals/correct-is-regexp-logic":28,"../internals/export":52,"../internals/function-uncurry-this":65,"../internals/not-a-regexp":105,"../internals/require-object-coercible":141,"../internals/to-string":165}],218:[function(require,module,exports){var charAt=require("../internals/string-multibyte").charAt,toString=require("../internals/to-string"),InternalStateModule=require("../internals/internal-state"),defineIterator=require("../internals/iterator-define"),createIterResultObject=require("../internals/create-iter-result-object"),setInternalState=InternalStateModule.set,getInternalState=InternalStateModule.getterFor("String Iterator");defineIterator(String,"String",function(iterated){setInternalState(this,{type:"String Iterator",string:toString(iterated),index:0})},function(){var state=getInternalState(this),string=state.string,index=state.index;return index>=string.length?createIterResultObject(void 0,!0):(string=charAt(string,index),state.index+=string.length,createIterResultObject(string,!1))})},{"../internals/create-iter-result-object":30,"../internals/internal-state":82,"../internals/iterator-define":97,"../internals/string-multibyte":149,"../internals/to-string":165}],219:[function(require,module,exports){var call=require("../internals/function-call"),uncurryThis=require("../internals/function-uncurry-this"),fixRegExpWellKnownSymbolLogic=require("../internals/fix-regexp-well-known-symbol-logic"),anObject=require("../internals/an-object"),isObject=require("../internals/is-object"),toLength=require("../internals/to-length"),toString=require("../internals/to-string"),requireObjectCoercible=require("../internals/require-object-coercible"),getMethod=require("../internals/get-method"),advanceStringIndex=require("../internals/advance-string-index"),getRegExpFlags=require("../internals/regexp-get-flags"),regExpExec=require("../internals/regexp-exec-abstract"),stringIndexOf=uncurryThis("".indexOf);fixRegExpWellKnownSymbolLogic("match",function(MATCH,nativeMatch,maybeCallNative){return[function(regexp){var O=requireObjectCoercible(this),matcher=isObject(regexp)?getMethod(regexp,MATCH):void 0;return matcher?call(matcher,regexp,O):new RegExp(regexp)[MATCH](toString(O))},function(string){var rx=anObject(this),S=toString(string),string=maybeCallNative(nativeMatch,rx,S);if(string.done)return string.value;string=toString(getRegExpFlags(rx));if(-1===stringIndexOf(string,"g"))return regExpExec(rx,S);for(var fullUnicode=-1!==stringIndexOf(string,"u"),A=[],n=rx.lastIndex=0;null!==(result=regExpExec(rx,S));){var result=toString(result[0]);""===(A[n]=result)&&(rx.lastIndex=advanceStringIndex(S,toLength(rx.lastIndex),fullUnicode)),n++}return 0===n?null:A}]})},{"../internals/advance-string-index":6,"../internals/an-object":8,"../internals/fix-regexp-well-known-symbol-logic":54,"../internals/function-call":61,"../internals/function-uncurry-this":65,"../internals/get-method":70,"../internals/is-object":89,"../internals/regexp-exec-abstract":133,"../internals/regexp-get-flags":137,"../internals/require-object-coercible":141,"../internals/to-length":160,"../internals/to-string":165}],220:[function(require,module,exports){var apply=require("../internals/function-apply"),call=require("../internals/function-call"),uncurryThis=require("../internals/function-uncurry-this"),fixRegExpWellKnownSymbolLogic=require("../internals/fix-regexp-well-known-symbol-logic"),fails=require("../internals/fails"),anObject=require("../internals/an-object"),isCallable=require("../internals/is-callable"),isObject=require("../internals/is-object"),toIntegerOrInfinity=require("../internals/to-integer-or-infinity"),toLength=require("../internals/to-length"),toString=require("../internals/to-string"),requireObjectCoercible=require("../internals/require-object-coercible"),advanceStringIndex=require("../internals/advance-string-index"),getMethod=require("../internals/get-method"),getSubstitution=require("../internals/get-substitution"),getRegExpFlags=require("../internals/regexp-get-flags"),regExpExec=require("../internals/regexp-exec-abstract"),REPLACE=require("../internals/well-known-symbol")("replace"),max=Math.max,min=Math.min,concat=uncurryThis([].concat),push=uncurryThis([].push),stringIndexOf=uncurryThis("".indexOf),stringSlice=uncurryThis("".slice),require="$0"==="a".replace(/./,"$0"),REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE=!!/./[REPLACE]&&""===/./[REPLACE]("a","$0");fixRegExpWellKnownSymbolLogic("replace",function(_,nativeReplace,maybeCallNative){var UNSAFE_SUBSTITUTE=REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE?"$":"$0";return[function(searchValue,replaceValue){var O=requireObjectCoercible(this),replacer=isObject(searchValue)?getMethod(searchValue,REPLACE):void 0;return replacer?call(replacer,searchValue,O,replaceValue):call(nativeReplace,toString(O),searchValue,replaceValue)},function(string,replaceValue){var rx=anObject(this),S=toString(string);if("string"==typeof replaceValue&&-1===stringIndexOf(replaceValue,UNSAFE_SUBSTITUTE)&&-1===stringIndexOf(replaceValue,"$<")){string=maybeCallNative(nativeReplace,rx,S,replaceValue);if(string.done)return string.value}for(var fullUnicode,functionalReplace=isCallable(replaceValue),string=(functionalReplace||(replaceValue=toString(replaceValue)),toString(getRegExpFlags(rx))),global=-1!==stringIndexOf(string,"g"),results=(global&&(fullUnicode=-1!==stringIndexOf(string,"u"),rx.lastIndex=0),[]);null!==(result=regExpExec(rx,S))&&(push(results,result),global);)""===toString(result[0])&&(rx.lastIndex=advanceStringIndex(S,toLength(rx.lastIndex),fullUnicode));for(var it,accumulatedResult="",nextSourcePosition=0,i=0;i<results.length;i++){for(var result,matched=toString((result=results[i])[0]),position=max(min(toIntegerOrInfinity(result.index),S.length),0),captures=[],j=1;j<result.length;j++)push(captures,void 0===(it=result[j])?it:String(it));var namedCaptures=result.groups,replacerArgs=functionalReplace?(replacerArgs=concat([matched],captures,position,S),void 0!==namedCaptures&&push(replacerArgs,namedCaptures),toString(apply(replaceValue,void 0,replacerArgs))):getSubstitution(matched,S,position,captures,namedCaptures,replaceValue);nextSourcePosition<=position&&(accumulatedResult+=stringSlice(S,nextSourcePosition,position)+replacerArgs,nextSourcePosition=position+matched.length)}return accumulatedResult+stringSlice(S,nextSourcePosition)}]},!!fails(function(){var re=/./;return re.exec=function(){var result=[];return result.groups={a:"7"},result},"7"!=="".replace(re,"$<a>")})||!require||REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE)},{"../internals/advance-string-index":6,"../internals/an-object":8,"../internals/fails":53,"../internals/fix-regexp-well-known-symbol-logic":54,"../internals/function-apply":57,"../internals/function-call":61,"../internals/function-uncurry-this":65,"../internals/get-method":70,"../internals/get-substitution":71,"../internals/is-callable":85,"../internals/is-object":89,"../internals/regexp-exec-abstract":133,"../internals/regexp-get-flags":137,"../internals/require-object-coercible":141,"../internals/to-integer-or-infinity":159,"../internals/to-length":160,"../internals/to-string":165,"../internals/well-known-symbol":174}],221:[function(require,module,exports){var call=require("../internals/function-call"),uncurryThis=require("../internals/function-uncurry-this"),fixRegExpWellKnownSymbolLogic=require("../internals/fix-regexp-well-known-symbol-logic"),anObject=require("../internals/an-object"),isObject=require("../internals/is-object"),requireObjectCoercible=require("../internals/require-object-coercible"),speciesConstructor=require("../internals/species-constructor"),advanceStringIndex=require("../internals/advance-string-index"),toLength=require("../internals/to-length"),toString=require("../internals/to-string"),getMethod=require("../internals/get-method"),regExpExec=require("../internals/regexp-exec-abstract"),stickyHelpers=require("../internals/regexp-sticky-helpers"),require=require("../internals/fails"),UNSUPPORTED_Y=stickyHelpers.UNSUPPORTED_Y,min=Math.min,push=uncurryThis([].push),stringSlice=uncurryThis("".slice),stickyHelpers=!require(function(){var re=/(?:)/,originalExec=re.exec,re=(re.exec=function(){return originalExec.apply(this,arguments)},"ab".split(re));return 2!==re.length||"a"!==re[0]||"b"!==re[1]}),BUGGY="c"==="abbc".split(/(b)*/)[1]||4!=="test".split(/(?:)/,-1).length||2!=="ab".split(/(?:ab)*/).length||4!==".".split(/(.?)(.?)/).length||1<".".split(/()()/).length||"".split(/.?/).length;fixRegExpWellKnownSymbolLogic("split",function(SPLIT,nativeSplit,maybeCallNative){var internalSplit="0".split(void 0,0).length?function(separator,limit){return void 0===separator&&0===limit?[]:call(nativeSplit,this,separator,limit)}:nativeSplit;return[function(separator,limit){var O=requireObjectCoercible(this),splitter=isObject(separator)?getMethod(separator,SPLIT):void 0;return splitter?call(splitter,separator,O,limit):call(internalSplit,toString(O),separator,limit)},function(string,limit){var rx=anObject(this),S=toString(string);if(!BUGGY){string=maybeCallNative(internalSplit,rx,S,limit,internalSplit!==nativeSplit);if(string.done)return string.value}var string=speciesConstructor(rx,RegExp),unicodeMatching=rx.unicode,flags=(rx.ignoreCase?"i":"")+(rx.multiline?"m":"")+(rx.unicode?"u":"")+(UNSUPPORTED_Y?"g":"y"),splitter=new string(UNSUPPORTED_Y?"^(?:"+rx.source+")":rx,flags),lim=void 0===limit?4294967295:limit>>>0;if(0==lim)return[];if(0===S.length)return null===regExpExec(splitter,S)?[S]:[];for(var p=0,q=0,A=[];q<S.length;){splitter.lastIndex=UNSUPPORTED_Y?0:q;var e,z=regExpExec(splitter,UNSUPPORTED_Y?stringSlice(S,q):S);if(null===z||(e=min(toLength(splitter.lastIndex+(UNSUPPORTED_Y?q:0)),S.length))===p)q=advanceStringIndex(S,q,unicodeMatching);else{if(push(A,stringSlice(S,p,q)),A.length===lim)return A;for(var i=1;i<=z.length-1;i++)if(push(A,z[i]),A.length===lim)return A;q=p=e}}return push(A,stringSlice(S,p)),A}]},BUGGY||!stickyHelpers,UNSUPPORTED_Y)},{"../internals/advance-string-index":6,"../internals/an-object":8,"../internals/fails":53,"../internals/fix-regexp-well-known-symbol-logic":54,"../internals/function-call":61,"../internals/function-uncurry-this":65,"../internals/get-method":70,"../internals/is-object":89,"../internals/regexp-exec-abstract":133,"../internals/regexp-sticky-helpers":138,"../internals/require-object-coercible":141,"../internals/species-constructor":148,"../internals/to-length":160,"../internals/to-string":165}],222:[function(require,module,exports){var $=require("../internals/export"),uncurryThis=require("../internals/function-uncurry-this-clause"),getOwnPropertyDescriptor=require("../internals/object-get-own-property-descriptor").f,toLength=require("../internals/to-length"),toString=require("../internals/to-string"),notARegExp=require("../internals/not-a-regexp"),requireObjectCoercible=require("../internals/require-object-coercible"),correctIsRegExpLogic=require("../internals/correct-is-regexp-logic"),require=require("../internals/is-pure"),stringSlice=uncurryThis("".slice),min=Math.min,uncurryThis=correctIsRegExpLogic("startsWith");$({target:"String",proto:!0,forced:!!(require||uncurryThis||!(correctIsRegExpLogic=getOwnPropertyDescriptor(String.prototype,"startsWith"))||correctIsRegExpLogic.writable)&&!uncurryThis},{startsWith:function(searchString){var that=toString(requireObjectCoercible(this)),index=(notARegExp(searchString),toLength(min(1<arguments.length?arguments[1]:void 0,that.length))),searchString=toString(searchString);return stringSlice(that,index,index+searchString.length)===searchString}})},{"../internals/correct-is-regexp-logic":28,"../internals/export":52,"../internals/function-uncurry-this-clause":64,"../internals/is-pure":91,"../internals/not-a-regexp":105,"../internals/object-get-own-property-descriptor":110,"../internals/require-object-coercible":141,"../internals/to-length":160,"../internals/to-string":165}],223:[function(require,module,exports){var $=require("../internals/export"),$trim=require("../internals/string-trim").trim;$({target:"String",proto:!0,forced:require("../internals/string-trim-forced")("trim")},{trim:function(){return $trim(this)}})},{"../internals/export":52,"../internals/string-trim":151,"../internals/string-trim-forced":150}],224:[function(require,module,exports){function fallbackDefineProperty(O,P,Attributes){var ObjectPrototypeDescriptor=nativeGetOwnPropertyDescriptor(ObjectPrototype,P);ObjectPrototypeDescriptor&&delete ObjectPrototype[P],nativeDefineProperty(O,P,Attributes),ObjectPrototypeDescriptor&&O!==ObjectPrototype&&nativeDefineProperty(ObjectPrototype,P,ObjectPrototypeDescriptor)}function wrap(tag,description){var symbol=AllSymbols[tag]=nativeObjectCreate(SymbolPrototype);return setInternalState(symbol,{type:SYMBOL,tag:tag,description:description}),DESCRIPTORS||(symbol.description=description),symbol}function $defineProperty(O,P,Attributes){return O===ObjectPrototype&&$defineProperty(ObjectPrototypeSymbols,P,Attributes),anObject(O),P=toPropertyKey(P),anObject(Attributes),(hasOwn(AllSymbols,P)?(Attributes.enumerable?(hasOwn(O,HIDDEN)&&O[HIDDEN][P]&&(O[HIDDEN][P]=!1),Attributes=nativeObjectCreate(Attributes,{enumerable:createPropertyDescriptor(0,!1)})):(hasOwn(O,HIDDEN)||nativeDefineProperty(O,HIDDEN,createPropertyDescriptor(1,nativeObjectCreate(null))),O[HIDDEN][P]=!0),setSymbolDescriptor):nativeDefineProperty)(O,P,Attributes)}function $defineProperties(O,Properties){anObject(O);var properties=toIndexedObject(Properties),Properties=objectKeys(properties).concat($getOwnPropertySymbols(properties));return $forEach(Properties,function(key){DESCRIPTORS&&!call($propertyIsEnumerable,properties,key)||$defineProperty(O,key,properties[key])}),O}function $propertyIsEnumerable(V){var V=toPropertyKey(V),enumerable=call(nativePropertyIsEnumerable,this,V);return!(this===ObjectPrototype&&hasOwn(AllSymbols,V)&&!hasOwn(ObjectPrototypeSymbols,V))&&(!(enumerable||!hasOwn(this,V)||!hasOwn(AllSymbols,V)||hasOwn(this,HIDDEN)&&this[HIDDEN][V])||enumerable)}function $getOwnPropertyDescriptor(O,P){var descriptor,O=toIndexedObject(O),P=toPropertyKey(P);if(O!==ObjectPrototype||!hasOwn(AllSymbols,P)||hasOwn(ObjectPrototypeSymbols,P))return!(descriptor=nativeGetOwnPropertyDescriptor(O,P))||!hasOwn(AllSymbols,P)||hasOwn(O,HIDDEN)&&O[HIDDEN][P]||(descriptor.enumerable=!0),descriptor}function $getOwnPropertyNames(O){var O=nativeGetOwnPropertyNames(toIndexedObject(O)),result=[];return $forEach(O,function(key){hasOwn(AllSymbols,key)||hasOwn(hiddenKeys,key)||push(result,key)}),result}function $getOwnPropertySymbols(O){var IS_OBJECT_PROTOTYPE=O===ObjectPrototype,O=nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE?ObjectPrototypeSymbols:toIndexedObject(O)),result=[];return $forEach(O,function(key){!hasOwn(AllSymbols,key)||IS_OBJECT_PROTOTYPE&&!hasOwn(ObjectPrototype,key)||push(result,AllSymbols[key])}),result}var $=require("../internals/export"),globalThis=require("../internals/global-this"),call=require("../internals/function-call"),uncurryThis=require("../internals/function-uncurry-this"),IS_PURE=require("../internals/is-pure"),DESCRIPTORS=require("../internals/descriptors"),NATIVE_SYMBOL=require("../internals/symbol-constructor-detection"),fails=require("../internals/fails"),hasOwn=require("../internals/has-own-property"),isPrototypeOf=require("../internals/object-is-prototype-of"),anObject=require("../internals/an-object"),toIndexedObject=require("../internals/to-indexed-object"),toPropertyKey=require("../internals/to-property-key"),$toString=require("../internals/to-string"),createPropertyDescriptor=require("../internals/create-property-descriptor"),nativeObjectCreate=require("../internals/object-create"),objectKeys=require("../internals/object-keys"),getOwnPropertyNamesModule=require("../internals/object-get-own-property-names"),getOwnPropertyNamesExternal=require("../internals/object-get-own-property-names-external"),getOwnPropertySymbolsModule=require("../internals/object-get-own-property-symbols"),getOwnPropertyDescriptorModule=require("../internals/object-get-own-property-descriptor"),definePropertyModule=require("../internals/object-define-property"),definePropertiesModule=require("../internals/object-define-properties"),propertyIsEnumerableModule=require("../internals/object-property-is-enumerable"),defineBuiltIn=require("../internals/define-built-in"),defineBuiltInAccessor=require("../internals/define-built-in-accessor"),shared=require("../internals/shared"),sharedKey=require("../internals/shared-key"),hiddenKeys=require("../internals/hidden-keys"),uid=require("../internals/uid"),wellKnownSymbol=require("../internals/well-known-symbol"),wrappedWellKnownSymbolModule=require("../internals/well-known-symbol-wrapped"),defineWellKnownSymbol=require("../internals/well-known-symbol-define"),defineSymbolToPrimitive=require("../internals/symbol-define-to-primitive"),setToStringTag=require("../internals/set-to-string-tag"),InternalStateModule=require("../internals/internal-state"),$forEach=require("../internals/array-iteration").forEach,HIDDEN=sharedKey("hidden"),SYMBOL="Symbol",setInternalState=InternalStateModule.set,getInternalState=InternalStateModule.getterFor(SYMBOL),ObjectPrototype=Object.prototype,require=globalThis.Symbol,SymbolPrototype=require&&require.prototype,RangeError=globalThis.RangeError,TypeError=globalThis.TypeError,sharedKey=globalThis.QObject,nativeGetOwnPropertyDescriptor=getOwnPropertyDescriptorModule.f,nativeDefineProperty=definePropertyModule.f,nativeGetOwnPropertyNames=getOwnPropertyNamesExternal.f,nativePropertyIsEnumerable=propertyIsEnumerableModule.f,push=uncurryThis([].push),AllSymbols=shared("symbols"),ObjectPrototypeSymbols=shared("op-symbols"),InternalStateModule=shared("wks"),USE_SETTER=!sharedKey||!sharedKey.prototype||!sharedKey.prototype.findChild,setSymbolDescriptor=DESCRIPTORS&&fails(function(){return 7!==nativeObjectCreate(nativeDefineProperty({},"a",{get:function(){return nativeDefineProperty(this,"a",{value:7}).a}})).a})?fallbackDefineProperty:nativeDefineProperty;NATIVE_SYMBOL||(defineBuiltIn(SymbolPrototype=(require=function(){if(isPrototypeOf(SymbolPrototype,this))throw new TypeError("Symbol is not a constructor");var description=arguments.length&&void 0!==arguments[0]?$toString(arguments[0]):void 0,tag=uid(description),setter=function(value){var $this=void 0===this?globalThis:this,value=($this===ObjectPrototype&&call(setter,ObjectPrototypeSymbols,value),hasOwn($this,HIDDEN)&&hasOwn($this[HIDDEN],tag)&&($this[HIDDEN][tag]=!1),createPropertyDescriptor(1,value));try{setSymbolDescriptor($this,tag,value)}catch(error){if(!(error instanceof RangeError))throw error;fallbackDefineProperty($this,tag,value)}};return DESCRIPTORS&&USE_SETTER&&setSymbolDescriptor(ObjectPrototype,tag,{configurable:!0,set:setter}),wrap(tag,description)}).prototype,"toString",function(){return getInternalState(this).tag}),defineBuiltIn(require,"withoutSetter",function(description){return wrap(uid(description),description)}),propertyIsEnumerableModule.f=$propertyIsEnumerable,definePropertyModule.f=$defineProperty,definePropertiesModule.f=$defineProperties,getOwnPropertyDescriptorModule.f=$getOwnPropertyDescriptor,getOwnPropertyNamesModule.f=getOwnPropertyNamesExternal.f=$getOwnPropertyNames,getOwnPropertySymbolsModule.f=$getOwnPropertySymbols,wrappedWellKnownSymbolModule.f=function(name){return wrap(wellKnownSymbol(name),name)},DESCRIPTORS&&(defineBuiltInAccessor(SymbolPrototype,"description",{configurable:!0,get:function(){return getInternalState(this).description}}),IS_PURE||defineBuiltIn(ObjectPrototype,"propertyIsEnumerable",$propertyIsEnumerable,{unsafe:!0}))),$({global:!0,constructor:!0,wrap:!0,forced:!NATIVE_SYMBOL,sham:!NATIVE_SYMBOL},{Symbol:require}),$forEach(objectKeys(InternalStateModule),function(name){defineWellKnownSymbol(name)}),$({target:SYMBOL,stat:!0,forced:!NATIVE_SYMBOL},{useSetter:function(){USE_SETTER=!0},useSimple:function(){USE_SETTER=!1}}),$({target:"Object",stat:!0,forced:!NATIVE_SYMBOL,sham:!DESCRIPTORS},{create:function(O,Properties){return void 0===Properties?nativeObjectCreate(O):$defineProperties(nativeObjectCreate(O),Properties)},defineProperty:$defineProperty,defineProperties:$defineProperties,getOwnPropertyDescriptor:$getOwnPropertyDescriptor}),$({target:"Object",stat:!0,forced:!NATIVE_SYMBOL},{getOwnPropertyNames:$getOwnPropertyNames}),defineSymbolToPrimitive(),setToStringTag(require,SYMBOL),hiddenKeys[HIDDEN]=!0},{"../internals/an-object":8,"../internals/array-iteration":13,"../internals/create-property-descriptor":32,"../internals/define-built-in":36,"../internals/define-built-in-accessor":35,"../internals/descriptors":39,"../internals/export":52,"../internals/fails":53,"../internals/function-call":61,"../internals/function-uncurry-this":65,"../internals/global-this":72,"../internals/has-own-property":73,"../internals/hidden-keys":74,"../internals/internal-state":82,"../internals/is-pure":91,"../internals/object-create":107,"../internals/object-define-properties":108,"../internals/object-define-property":109,"../internals/object-get-own-property-descriptor":110,"../internals/object-get-own-property-names":112,"../internals/object-get-own-property-names-external":111,"../internals/object-get-own-property-symbols":113,"../internals/object-is-prototype-of":116,"../internals/object-keys":118,"../internals/object-property-is-enumerable":119,"../internals/set-to-string-tag":144,"../internals/shared":147,"../internals/shared-key":145,"../internals/symbol-constructor-detection":152,"../internals/to-indexed-object":158,"../internals/to-property-key":163,"../internals/to-string":165,"../internals/uid":167,"../internals/well-known-symbol":174,"../internals/well-known-symbol-define":172,"../internals/well-known-symbol-wrapped":173}],225:[function(require,module,exports){var EmptyStringDescriptionStore,NATIVE_SYMBOL,thisSymbolValue,symbolDescriptiveString,regexp,replace,stringSlice,$=require("../internals/export"),DESCRIPTORS=require("../internals/descriptors"),globalThis=require("../internals/global-this"),uncurryThis=require("../internals/function-uncurry-this"),hasOwn=require("../internals/has-own-property"),isCallable=require("../internals/is-callable"),isPrototypeOf=require("../internals/object-is-prototype-of"),toString=require("../internals/to-string"),defineBuiltInAccessor=require("../internals/define-built-in-accessor"),require=require("../internals/copy-constructor-properties"),NativeSymbol=globalThis.Symbol,SymbolPrototype=NativeSymbol&&NativeSymbol.prototype;!DESCRIPTORS||!isCallable(NativeSymbol)||"description"in SymbolPrototype&&void 0===NativeSymbol().description||(EmptyStringDescriptionStore={},require(globalThis=function(){var description=arguments.length<1||void 0===arguments[0]?void 0:toString(arguments[0]),result=isPrototypeOf(SymbolPrototype,this)?new NativeSymbol(description):void 0===description?NativeSymbol():NativeSymbol(description);return""===description&&(EmptyStringDescriptionStore[result]=!0),result},NativeSymbol),(globalThis.prototype=SymbolPrototype).constructor=globalThis,NATIVE_SYMBOL="Symbol(description detection)"===String(NativeSymbol("description detection")),thisSymbolValue=uncurryThis(SymbolPrototype.valueOf),symbolDescriptiveString=uncurryThis(SymbolPrototype.toString),regexp=/^Symbol\((.*)\)[^)]+$/,replace=uncurryThis("".replace),stringSlice=uncurryThis("".slice),defineBuiltInAccessor(SymbolPrototype,"description",{configurable:!0,get:function(){var symbol=thisSymbolValue(this);return hasOwn(EmptyStringDescriptionStore,symbol)?"":(symbol=symbolDescriptiveString(symbol),""===(symbol=NATIVE_SYMBOL?stringSlice(symbol,7,-1):replace(symbol,regexp,"$1"))?void 0:symbol)}}),$({global:!0,constructor:!0,forced:!0},{Symbol:globalThis}))},{"../internals/copy-constructor-properties":27,"../internals/define-built-in-accessor":35,"../internals/descriptors":39,"../internals/export":52,"../internals/function-uncurry-this":65,"../internals/global-this":72,"../internals/has-own-property":73,"../internals/is-callable":85,"../internals/object-is-prototype-of":116,"../internals/to-string":165}],226:[function(require,module,exports){var $=require("../internals/export"),getBuiltIn=require("../internals/get-built-in"),hasOwn=require("../internals/has-own-property"),toString=require("../internals/to-string"),shared=require("../internals/shared"),require=require("../internals/symbol-registry-detection"),StringToSymbolRegistry=shared("string-to-symbol-registry"),SymbolToStringRegistry=shared("symbol-to-string-registry");$({target:"Symbol",stat:!0,forced:!require},{for:function(key){var symbol,key=toString(key);return hasOwn(StringToSymbolRegistry,key)?StringToSymbolRegistry[key]:(symbol=getBuiltIn("Symbol")(key),StringToSymbolRegistry[key]=symbol,SymbolToStringRegistry[symbol]=key,symbol)}})},{"../internals/export":52,"../internals/get-built-in":66,"../internals/has-own-property":73,"../internals/shared":147,"../internals/symbol-registry-detection":154,"../internals/to-string":165}],227:[function(require,module,exports){require("../internals/well-known-symbol-define")("iterator")},{"../internals/well-known-symbol-define":172}],228:[function(require,module,exports){require("../modules/es.symbol.constructor"),require("../modules/es.symbol.for"),require("../modules/es.symbol.key-for"),require("../modules/es.json.stringify"),require("../modules/es.object.get-own-property-symbols")},{"../modules/es.json.stringify":192,"../modules/es.object.get-own-property-symbols":198,"../modules/es.symbol.constructor":224,"../modules/es.symbol.for":226}],229:[function(require,module,exports){var $=require("../internals/export"),hasOwn=require("../internals/has-own-property"),isSymbol=require("../internals/is-symbol"),tryToString=require("../internals/try-to-string"),shared=require("../internals/shared"),require=require("../internals/symbol-registry-detection"),SymbolToStringRegistry=shared("symbol-to-string-registry");$({target:"Symbol",stat:!0,forced:!require},{keyFor:function(sym){if(!isSymbol(sym))throw new TypeError(tryToString(sym)+" is not a symbol");if(hasOwn(SymbolToStringRegistry,sym))return SymbolToStringRegistry[sym]}})},{"../internals/export":52,"../internals/has-own-property":73,"../internals/is-symbol":93,"../internals/shared":147,"../internals/symbol-registry-detection":154,"../internals/try-to-string":166}],230:[function(require,module,exports){var defineWellKnownSymbol=require("../internals/well-known-symbol-define"),require=require("../internals/symbol-define-to-primitive");defineWellKnownSymbol("toPrimitive"),require()},{"../internals/symbol-define-to-primitive":153,"../internals/well-known-symbol-define":172}],231:[function(require,module,exports){function wrapper(init){return function(){return init(this,arguments.length?arguments[0]:void 0)}}var InternalWeakMap,nativeDelete,nativeHas,nativeGet,FREEZING=require("../internals/freezing"),globalThis=require("../internals/global-this"),uncurryThis=require("../internals/function-uncurry-this"),defineBuiltIns=require("../internals/define-built-ins"),InternalMetadataModule=require("../internals/internal-metadata"),collection=require("../internals/collection"),collectionWeak=require("../internals/collection-weak"),isObject=require("../internals/is-object"),enforceInternalState=require("../internals/internal-state").enforce,fails=require("../internals/fails"),require=require("../internals/weak-map-basic-detection"),$Object=Object,isArray=Array.isArray,isExtensible=$Object.isExtensible,isFrozen=$Object.isFrozen,isSealed=$Object.isSealed,freeze=$Object.freeze,seal=$Object.seal,$Object=!globalThis.ActiveXObject&&"ActiveXObject"in globalThis,$WeakMap=collection("WeakMap",wrapper,collectionWeak),globalThis=$WeakMap.prototype,nativeSet=uncurryThis(globalThis.set);require&&($Object?(InternalWeakMap=collectionWeak.getConstructor(wrapper,"WeakMap",!0),InternalMetadataModule.enable(),nativeDelete=uncurryThis(globalThis.delete),nativeHas=uncurryThis(globalThis.has),nativeGet=uncurryThis(globalThis.get),defineBuiltIns(globalThis,{delete:function(key){var state;return isObject(key)&&!isExtensible(key)?((state=enforceInternalState(this)).frozen||(state.frozen=new InternalWeakMap),nativeDelete(this,key)||state.frozen.delete(key)):nativeDelete(this,key)},has:function(key){var state;return isObject(key)&&!isExtensible(key)?((state=enforceInternalState(this)).frozen||(state.frozen=new InternalWeakMap),nativeHas(this,key)||state.frozen.has(key)):nativeHas(this,key)},get:function(key){var state;return!isObject(key)||isExtensible(key)||((state=enforceInternalState(this)).frozen||(state.frozen=new InternalWeakMap),nativeHas(this,key))?nativeGet(this,key):state.frozen.get(key)},set:function(key,value){var state;return!isObject(key)||isExtensible(key)||((state=enforceInternalState(this)).frozen||(state.frozen=new InternalWeakMap),nativeHas(this,key))?nativeSet(this,key,value):state.frozen.set(key,value),this}})):FREEZING&&fails(function(){var frozenArray=freeze([]);return nativeSet(new $WeakMap,frozenArray,1),!isFrozen(frozenArray)})&&defineBuiltIns(globalThis,{set:function(key,value){var arrayIntegrityLevel;return isArray(key)&&(isFrozen(key)?arrayIntegrityLevel=freeze:isSealed(key)&&(arrayIntegrityLevel=seal)),nativeSet(this,key,value),arrayIntegrityLevel&&arrayIntegrityLevel(key),this}}))},{"../internals/collection":26,"../internals/collection-weak":25,"../internals/define-built-ins":37,"../internals/fails":53,"../internals/freezing":56,"../internals/function-uncurry-this":65,"../internals/global-this":72,"../internals/internal-metadata":81,"../internals/internal-state":82,"../internals/is-object":89,"../internals/weak-map-basic-detection":171}],232:[function(require,module,exports){require("../modules/es.weak-map.constructor")},{"../modules/es.weak-map.constructor":231}],233:[function(require,module,exports){function handlePrototype(CollectionPrototype){if(CollectionPrototype&&CollectionPrototype.forEach!==forEach)try{createNonEnumerableProperty(CollectionPrototype,"forEach",forEach)}catch(error){CollectionPrototype.forEach=forEach}}var COLLECTION_NAME,globalThis=require("../internals/global-this"),DOMIterables=require("../internals/dom-iterables"),DOMTokenListPrototype=require("../internals/dom-token-list-prototype"),forEach=require("../internals/array-for-each"),createNonEnumerableProperty=require("../internals/create-non-enumerable-property");for(COLLECTION_NAME in DOMIterables)DOMIterables[COLLECTION_NAME]&&handlePrototype(globalThis[COLLECTION_NAME]&&globalThis[COLLECTION_NAME].prototype);handlePrototype(DOMTokenListPrototype)},{"../internals/array-for-each":10,"../internals/create-non-enumerable-property":31,"../internals/dom-iterables":42,"../internals/dom-token-list-prototype":43,"../internals/global-this":72}],234:[function(require,module,exports){function handlePrototype(CollectionPrototype,COLLECTION_NAME){if(CollectionPrototype){if(CollectionPrototype[ITERATOR]!==ArrayValues)try{createNonEnumerableProperty(CollectionPrototype,ITERATOR,ArrayValues)}catch(error){CollectionPrototype[ITERATOR]=ArrayValues}if(setToStringTag(CollectionPrototype,COLLECTION_NAME,!0),DOMIterables[COLLECTION_NAME])for(var METHOD_NAME in ArrayIteratorMethods)if(CollectionPrototype[METHOD_NAME]!==ArrayIteratorMethods[METHOD_NAME])try{createNonEnumerableProperty(CollectionPrototype,METHOD_NAME,ArrayIteratorMethods[METHOD_NAME])}catch(error){CollectionPrototype[METHOD_NAME]=ArrayIteratorMethods[METHOD_NAME]}}}var COLLECTION_NAME,globalThis=require("../internals/global-this"),DOMIterables=require("../internals/dom-iterables"),DOMTokenListPrototype=require("../internals/dom-token-list-prototype"),ArrayIteratorMethods=require("../modules/es.array.iterator"),createNonEnumerableProperty=require("../internals/create-non-enumerable-property"),setToStringTag=require("../internals/set-to-string-tag"),ITERATOR=require("../internals/well-known-symbol")("iterator"),ArrayValues=ArrayIteratorMethods.values;for(COLLECTION_NAME in DOMIterables)handlePrototype(globalThis[COLLECTION_NAME]&&globalThis[COLLECTION_NAME].prototype,COLLECTION_NAME);handlePrototype(DOMTokenListPrototype,"DOMTokenList")},{"../internals/create-non-enumerable-property":31,"../internals/dom-iterables":42,"../internals/dom-token-list-prototype":43,"../internals/global-this":72,"../internals/set-to-string-tag":144,"../internals/well-known-symbol":174,"../modules/es.array.iterator":184}],235:[function(require,module,exports){module.exports={name:"xfdcloser",version:"4.0.16",description:"Wikipedia userscript that helps assess pages for WikiProjects",homepage:"https://github.com/wikimedia-gadgets/xfdcloser",browser:"index.js",scripts:{"build:bundle":"npm run mkdir-dist && browserify xfdcloser-src/App.js --debug -t babelify --outfile dist/core.js","build:concat":'npm run mkdir-dist && concat-cli -f "core-comment-top.js" dist/core.min.js "core-comment-bottom.js" -o dist/core-gadget.js',"build:css":"npm run mkdir-dist && node bin/concatCss","build:dev":"npm run globals:window && npm run build:loader:dev && npm run build:css && npm run build:bundle","build:loader:dev":'npm run mkdir-dist && concat-cli -f "loader-src/loader-dev-top.js.txt" "loader-src/loader-core.js.txt" "loader-src/loader-dev-bottom.js.txt" -o dist/loader-dev.js',"build:loader:gadget":'npm run mkdir-dist && concat-cli -f "core-comment-top.js" "loader-src/loader-gadget-top.js.txt" "loader-src/loader-core.js.txt" "loader-src/loader-gadget-bottom.js.txt" "core-comment-bottom.js" -o dist/loader-gadget.js',"build:loader":"npm run build:loader:dev && npm run build:loader:gadget","build:minify":"npm run mkdir-dist && uglifyjs dist/core.js --compress -b ascii_only=true,beautify=false --output dist/core.min.js","build:quickdev":"npm run globals:window && npm run build:loader:dev && npm run build:bundle ",build:"npm run globals:window && npm run build:loader && npm run lint && npm run test:all && npm run build:css && npm run build:bundle && npm run build:minify && npm run build:concat",deploy:"npm run build && node bin/deploy.js --quick","globals:node":'concat-cli -f "globals-src/comment.js" "globals-src/node.js" -o "globals.js"',"globals:window":'concat-cli -f "globals-src/comment.js" "globals-src/window.js" -o "globals.js"',"lint:bin:fix":'eslint "bin/*.js" --fix --env node',"lint:bin":'eslint "bin/*.js" --env node',"lint:css:fix":'stylelint "styles-src/**/*.css" --fix',"lint:css":'stylelint "styles-src/**/*.css"',"lint:dev":"npm run lint:es6 && npm run lint:es5:dev && npm run lint:css","lint:es5:dev":'jshint "dist/loader-dev.js"',"lint:es5":'jshint "dist/loader-dev.js" "dist/loader-gadget.js"',"lint:es6:fix":'eslint "xfdcloser-src/**/*.js" "test/*" --fix',"lint:es6":'eslint "xfdcloser-src/**/*.js" "test/*"',"lint:fix":"npm run lint:es6:fix && npm run lint:bin:fix && npm run lint:css:fix",lint:"npm run lint:es6&& npm run lint:es5 && npm run lint:css","mkdir-dist":"node -e \"require('fs').mkdirSync('dist',{recursive:true})\"",start:"npm run build:dev && node bin/server","test:all":"node bin/testall && npm run test","test:delay":"mocha --delay --require @babel/register --reporter list",test:"npm run globals:node && mocha --require @babel/register --reporter list && npm run globals:window"},author:{name:"Evad37",url:"https://en.wikipedia.org/wiki/User:Evad37"},repository:{type:"git",url:"https://github.com/wikimedia-gadgets/xfdcloser.git"},license:"(MIT OR CC-BY-4.0)",devDependencies:{"@babel/core":"^7.11.0","@babel/eslint-parser":"^7.17.0","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/preset-env":"^7.9.0","@babel/register":"^7.9.0",babelify:"^10.0.0",browserify:"^16.5.0",concat:"^1.0.3","concat-cli":"^4.0.0","core-js":"^3.8.3",eslint:"^8.9.0",jsdom:"^16.2.2",jshint:"^2.13.4","mediawiki-title":"^0.7.2",mocha:"^9.2.0",mwn:"^0.9.0",oojs:"^5.0.0","prompt-sync":"^4.2.0","replace-in-file":"^6.0.0",stylelint:"^14.5.0","stylelint-config-standard":"^25.0.0","uglify-js":"^3.8.0"}}},{}],236:[function(require,module,exports){require("core-js/modules/es.symbol.js"),require("core-js/modules/es.symbol.description.js"),require("core-js/modules/es.symbol.iterator.js"),require("core-js/modules/es.array.from.js"),require("core-js/modules/es.array.iterator.js"),require("core-js/modules/es.regexp.to-string.js"),require("core-js/modules/es.string.iterator.js"),require("core-js/modules/web.dom-collections.iterator.js"),require("core-js/modules/es.array.concat.js"),require("core-js/modules/es.array.find.js"),require("core-js/modules/es.array.includes.js"),require("core-js/modules/es.array.slice.js"),require("core-js/modules/es.object.to-string.js"),require("core-js/modules/es.regexp.exec.js"),require("core-js/modules/es.string.ends-with.js"),require("core-js/modules/es.string.includes.js"),require("core-js/modules/es.string.replace.js"),require("core-js/modules/es.string.starts-with.js");var _globals=require("../globals"),_config=_interopRequireDefault(require("./config")),_ShowHideTag=_interopRequireDefault(require("./ShowHideTag")),_windowSetManager=_interopRequireDefault(require("./windowSetManager")),_DiscussionView=_interopRequireDefault(require("./Views/DiscussionView"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _createForOfIteratorHelper(r,e){var o,a,u,_n,t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(t)return u=!(a=!0),{s:function(){t=t.call(r)},n:function(){var r=t.next();return a=r.done,r},e:function(r){u=!0,o=r},f:function(){try{a||null==t.return||t.return()}finally{if(u)throw o}}};if(Array.isArray(r)||(t=((r,a)=>{var t;if(r)return"string"==typeof r?_arrayLikeToArray(r,a):"Map"===(t="Object"===(t={}.toString.call(r).slice(8,-1))&&r.constructor?r.constructor.name:t)||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0})(r))&&e&&r&&"number"==typeof r.length)return t&&(r=t),_n=0,{s:e=function(){},n:function(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function(r){throw r},f:e};throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}(_config.default.mw.wgUserGroups.includes("extendedconfirmed")||_config.default.mw.wgUserGroups.includes("sysop")||"testwiki"===_config.default.mw.wgDBname)&&((0,_globals.$)(window).on("beforeunload",function(e){if(_windowSetManager.default.hasOpenWindows())return e.returnValue=""}),_globals.mw.util.addPortletLink("p-cactions","#","XFDC Prefs","p-xfdc-prefs","XFDcloser preferences"),(0,_globals.$)("#p-xfdc-prefs").click(function(e){e.preventDefault(),_windowSetManager.default.openWindow("prefs",{userIsSysop:_config.default.user.isSysop})}),0===_config.default.mw.wgArticleId?(_globals.mw.util.addPortletLink("p-cactions","#","XFDC Unlink","p-xfdc-unlink","Unlink backlinks using XFDcloser"),(0,_globals.$)("#p-xfdc-unlink").click(function(e){e.preventDefault();var comment="",e=(0,_globals.$)(".mw-logline-delete").first().find(".comment").first();if(e.length){var _step,_iterator=_createForOfIteratorHelper(e.get()[0].childNodes);try{for(_iterator.s();!(_step=_iterator.n()).done;){var target,label,child=_step.value;"A"==child.nodeName?comment+=((target=child.href.replace(/^.*?\/wiki\//,"").replace(/_/g," "))===(label=child.textContent)?"[[":"[[".concat(target,"|")).concat(label,"]]"):comment+=child.nodeValue}}catch(err){_iterator.e(err)}finally{_iterator.f()}(comment=comment.replace(/ \(\[\[(?:Wikipedia:XFDC(?:#[\d.]+)?)\|XFDcloser\]\]\)/,"")).startsWith("(")&&comment.endsWith(")")&&(comment=comment.slice(1,-1))}_windowSetManager.default.openWindow("unlink",{summary:comment,pageName:_config.default.mw.wgPageName})})):(require=_config.default.xfd.html.headlineinner,_ShowHideTag=1<(0,_globals.$)("#mw-content-text "+require).length&&_ShowHideTag.default.initialiseNewTag(),(0,_globals.$)(require).not(".XFDcloser-ignore").each(function(index){try{var discussionView=_DiscussionView.default.newFromHeadline({headingIndex:index,context:this,venue:_config.default.venue,currentPageName:_config.default.mw.wgPageName,userIsSysop:_config.default.user.isSysop});discussionView&&_config.default.isMobileSite?(0,_globals.$)(this).parent().next().prepend(discussionView.$element):discussionView&&(0,_globals.$)(this).after(discussionView.$element)}catch(e){console.warn("[XFDcloser] Could not retrieve page info for "+(0,_globals.$)(this).text(),e)}}),_ShowHideTag&&_ShowHideTag.isHidden&&_ShowHideTag.hideClosed()))},{"../globals":1,"./ShowHideTag":294,"./Views/DiscussionView":297,"./config":314,"./windowSetManager":319,"core-js/modules/es.array.concat.js":176,"core-js/modules/es.array.find.js":179,"core-js/modules/es.array.from.js":181,"core-js/modules/es.array.includes.js":182,"core-js/modules/es.array.iterator.js":184,"core-js/modules/es.array.slice.js":189,"core-js/modules/es.object.to-string.js":202,"core-js/modules/es.regexp.exec.js":214,"core-js/modules/es.regexp.to-string.js":215,"core-js/modules/es.string.ends-with.js":216,"core-js/modules/es.string.includes.js":217,"core-js/modules/es.string.iterator.js":218,"core-js/modules/es.string.replace.js":220,"core-js/modules/es.symbol.description.js":225,"core-js/modules/es.symbol.iterator.js":227,"core-js/modules/es.symbol.js":228,"core-js/modules/web.dom-collections.iterator.js":234}],237:[function(require,module,exports){require("core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,require("core-js/modules/es.regexp.constructor.js"),require("core-js/modules/es.regexp.exec.js"),require("core-js/modules/es.regexp.to-string.js"),require("core-js/modules/es.string.replace.js"),require("core-js/modules/es.string.trim.js");require=require("../../globals");function LookupMenuSelectWidget(config){LookupMenuSelectWidget.super.call(this,config=config||{})}require.OO.inheritClass(LookupMenuSelectWidget,require.OO.ui.MenuSelectWidget),LookupMenuSelectWidget.prototype.getItemMatcher=function(s,exact){var re;return s.normalize&&(s=s.normalize()),s=exact?s.trim():s.replace(/^\s+/,""),re=s.replace(/([\\{}()|.?*+\-^$[\]])/g,"\\$1").replace(/\s+/g,"\\s+"),exact&&(re="^\\s*"+re+"\\s*$"),re=new RegExp(re,"i"),function(item){item=item.getMatchText();return item.normalize&&(item=item.normalize()),re.test(item)}};exports.default=LookupMenuSelectWidget},{"../../globals":1,"core-js/modules/es.object.define-property.js":195,"core-js/modules/es.regexp.constructor.js":213,"core-js/modules/es.regexp.exec.js":214,"core-js/modules/es.regexp.to-string.js":215,"core-js/modules/es.string.replace.js":220,"core-js/modules/es.string.trim.js":223}],238:[function(require,module,exports){require("core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _globals=require("../../globals"),_LookupMenuSelectWidget=(require=require("./LookupMenuSelectWidget"))&&require.__esModule?require:{default:require};function LookupMenuTagMultiselectWidget(config){LookupMenuTagMultiselectWidget.super.call(this,config=config||{}),this.menu=new _LookupMenuSelectWidget.default(_globals.$.extend({widget:this,input:this.hasInput?this.input:null,$input:this.hasInput?this.input.$input:null,filterFromInput:!!this.hasInput,$autoCloseIgnore:this.hasInput?this.input.$element:(0,_globals.$)([]),$floatableContainer:(this.hasInput&&"outline"===this.inputPosition?this.input:this).$element,$overlay:this.$overlay,disabled:this.isDisabled(),multiselect:!0},config.menu)),this.menu.connect(this,{choose:"onMenuChoose",toggle:"onMenuToggle"}),this.hasInput&&this.input.connect(this,{change:"onInputChange"}),this.$input&&(this.$input.prop("disabled",this.isDisabled()),this.$input.attr({role:"combobox","aria-owns":this.menu.getElementId(),"aria-autocomplete":"list"})),this.popup||(this.$content.append(this.$input),this.$overlay.append(this.menu.$element))}_globals.OO.inheritClass(LookupMenuTagMultiselectWidget,_globals.OO.ui.MenuTagMultiselectWidget);exports.default=LookupMenuTagMultiselectWidget},{"../../globals":1,"./LookupMenuSelectWidget":237,"core-js/modules/es.object.define-property.js":195}],239:[function(require,module,exports){require("core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,require("core-js/modules/es.array.find.js"),require("core-js/modules/es.object.to-string.js");var _globals=require("../../globals");function NoteWidget(config){NoteWidget.super.call(this,config),this.title=new _globals.OO.ui.LabelWidget({label:(0,_globals.$)("<strong>").text(config.title)}),this.noteContent=new _globals.OO.ui.LabelWidget({label:(0,_globals.$)("<div>").append(config.noteContent),$element:(0,_globals.$)("<label style='display:block'>")}),this.noteContent.toggle(!1),this.showButton=new _globals.OO.ui.ButtonWidget({label:"[show]",framed:!1}),this.showButton.$element.find("a").css("font-weight","normal"),this.hideButton=new _globals.OO.ui.ButtonWidget({label:"[hide]",framed:!1}),this.hideButton.$element.find("a").css("font-weight","normal"),this.hideButton.toggle(!1),this.showHideButtonGroup=new _globals.OO.ui.ButtonGroupWidget({items:[this.showButton,this.hideButton],$element:(0,_globals.$)("<div style='margin-left:2em;'>")}),this.$element.css({border:"1px dashed #888"}).append(this.title.$element,this.showHideButtonGroup.$element,this.noteContent.$element),this.showButton.connect(this,{click:["emit","expand"]}),this.hideButton.connect(this,{click:["emit","unexpand"]})}_globals.OO.inheritClass(NoteWidget,_globals.OO.ui.Widget),NoteWidget.prototype.setExpanded=function(expand){this.showButton.toggle(!expand),this.hideButton.toggle(!!expand),this.noteContent.toggle(!!expand)};exports.default=NoteWidget},{"../../globals":1,"core-js/modules/es.array.find.js":179,"core-js/modules/es.object.define-property.js":195,"core-js/modules/es.object.to-string.js":202}],240:[function(require,module,exports){require("core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,require("core-js/modules/es.array.find.js"),require("core-js/modules/es.object.to-string.js");require=require("../../globals");function ScrolledMessageDialog(config){ScrolledMessageDialog.super.call(this,config)}require.OO.inheritClass(ScrolledMessageDialog,require.OO.ui.MessageDialog),ScrolledMessageDialog.prototype.getReadyProcess=function(data){data=data||{};var $frameEl=this.$element.find(".oo-ui-window-frame");return ScrolledMessageDialog.super.prototype.getReadyProcess.call(this,data).next(function(){var scrollBy=data.scrollBy||0;$frameEl.css("transform","translate(0px, ".concat(scrollBy,"px)")),window.scrollTo(0,scrollBy)})};exports.default=ScrolledMessageDialog},{"../../globals":1,"core-js/modules/es.array.find.js":179,"core-js/modules/es.object.define-property.js":195,"core-js/modules/es.object.to-string.js":202}],241:[function(require,module,exports){require("core-js/modules/es.symbol.js"),require("core-js/modules/es.symbol.description.js"),require("core-js/modules/es.symbol.iterator.js"),require("core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,require("core-js/modules/es.symbol.to-primitive.js"),require("core-js/modules/es.array.index-of.js"),require("core-js/modules/es.array.iterator.js"),require("core-js/modules/es.array.map.js"),require("core-js/modules/es.array.slice.js"),require("core-js/modules/es.date.to-primitive.js"),require("core-js/modules/es.number.constructor.js"),require("core-js/modules/es.object.to-string.js"),require("core-js/modules/es.promise.js"),require("core-js/modules/es.regexp.exec.js"),require("core-js/modules/es.string.iterator.js"),require("core-js/modules/es.string.replace.js"),require("core-js/modules/web.dom-collections.for-each.js"),require("core-js/modules/web.dom-collections.iterator.js");var _globals=require("../../globals"),_api=_interopRequireDefault(require("../api")),_util=require("../util"),_MainWindowModel=_interopRequireDefault(require("../Models/MainWindowModel")),_windowSetManager=_interopRequireDefault(require("../windowSetManager"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _typeof(o){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o})(o)}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,(t=>(t=((t,r)=>{if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0===e)return("string"===r?String:Number)(t);if("object"!=_typeof(e=e.call(t,r||"default")))return e;throw new TypeError("@@toPrimitive must return a primitive value.")})(t,"string"),"symbol"==_typeof(t)?t:t+""))(o.key),o)}}require=(()=>{function DiscussionViewController(model,widget){if(!(this instanceof DiscussionViewController))throw new TypeError("Cannot call a class as a function");this.model=model,this.statusLabel=widget.statusLabel,this.buttonGroup=widget.buttonGroup,this.closeButton=widget.closeButton,this.relistButton=widget.relistButton,this.quickCloseButton=widget.quickCloseButtonMenu,this.quickCloseMenu=widget.quickCloseButtonMenu.getMenu(),this.model.connect(this,{update:"updateFromModel"}),this.closeButton.connect(this,{click:["onButtonClick","close"]}),this.relistButton.connect(this,{click:["onButtonClick","relist"]}),this.quickCloseMenu.connect(this,{choose:"onQuickCloseChoose"}),this.model.pages.length&&this.fetchInfoFromApi()}return e=DiscussionViewController,(r=[{key:"fetchInfoFromApi",value:function(){var _this=this,pageNames=this.model.pagesNames;_globals.mw.user.getRights().then(function(rights){for(var chunkSize=0<=rights.indexOf("apihighlimits")?500:50,chunks=[],i=0;i<pageNames.length;i+=chunkSize)chunks.push(pageNames.slice(i,i+chunkSize));var rights=chunks.map(function(chunk){return(chunk=>_api.default.get({action:"query",format:"json",formatversion:2,titles:chunk.join("|"),prop:"info",inprop:"talkid"}).then(function(response){response.query&&response.query.pages&&response.query.pages.forEach(function(page){var pageTitle=_globals.mw.Title.newFromText(page.title),talkpageTitle=pageTitle.getTalkPage();_globals.mw.Title.exist.set(pageTitle.getPrefixedDb(),!page.missing),talkpageTitle&&_globals.mw.Title.exist.set(talkpageTitle.getPrefixedDb(),!!page.talkid)})}))(chunk)}),rights=Promise.all(rights),nominationDatePromise="afd"!==_this.model.venue.type&&"mfd"!==_this.model.venue.type?_globals.$.Deferred().resolve((0,_util.dateFromSubpageName)(_this.model.discussionSubpageName)):_api.default.get({action:"query",format:"json",formatversion:2,titles:_this.model.discussionPageName,prop:"revisions",rvprop:"timestamp",rvdir:"newer",rvlimit:"1"}).then(function(response){response=response.query.pages[0].revisions[0].timestamp;return new Date(response)});nominationDatePromise.then(function(nominationDate){_this.model.setNominationDate(nominationDate)}),_globals.$.when(rights,nominationDatePromise).then(function(){_this.model.setStatusReady()}).catch(function(code,error){_this.model.setStatusError(code,error)})})}},{key:"updateFromModel",value:function(){this.statusLabel.setLabel(new _globals.OO.ui.HtmlSnippet(this.model.status)).toggle(this.model.showStatus),this.buttonGroup.toggle(this.model.showButtons),this.quickCloseButton.toggle(this.model.showQuickClose),this.model.actioned&&(this.model.$headlineSpan.addClass("xfdc-actioned-heading"),(0,_globals.$)(".".concat(this.model.id,"-discussion-node")).addClass("xfdc-actioned-discussion"))}},{key:"onButtonClick",value:function(type){var _this2=this;_windowSetManager.default.openWindow("main",{model:new _MainWindowModel.default({type:type,discussion:this.model}),offsetTop:(0,_util.windowOffsetTop)()}).closed.then(function(winData){_this2.model.setClosedWindowData(winData)}),this.model.setWindowOpened(type)}},{key:"onQuickCloseChoose",value:function(menuOption){var _this3=this,menuOption=menuOption.getData(),windowModel=new _MainWindowModel.default({type:"close",quick:!0,result:menuOption,discussion:this.model});_windowSetManager.default.openWindow("main",{model:windowModel,offsetTop:(0,_util.windowOffsetTop)()}).closed.then(function(winData){_this3.model.setClosedWindowData(winData)}),this.model.setWindowOpened("close"),windowModel.result.singleModeResult.setSelectedResultName(menuOption.replace("quick","").toLowerCase()),windowModel.options.isValid?(windowModel.taskList.resetItems(),windowModel.taskList.startTasks()):windowModel.showOptions()}}])&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,r,t})();exports.default=require},{"../../globals":1,"../Models/MainWindowModel":278,"../api":313,"../util":318,"../windowSetManager":319,"core-js/modules/es.array.index-of.js":183,"core-js/modules/es.array.iterator.js":184,"core-js/modules/es.array.map.js":186,"core-js/modules/es.array.slice.js":189,"core-js/modules/es.date.to-primitive.js":191,"core-js/modules/es.number.constructor.js":193,"core-js/modules/es.object.define-property.js":195,"core-js/modules/es.object.to-string.js":202,"core-js/modules/es.promise.js":208,"core-js/modules/es.regexp.exec.js":214,"core-js/modules/es.string.iterator.js":218,"core-js/modules/es.string.replace.js":220,"core-js/modules/es.symbol.description.js":225,"core-js/modules/es.symbol.iterator.js":227,"core-js/modules/es.symbol.js":228,"core-js/modules/es.symbol.to-primitive.js":230,"core-js/modules/web.dom-collections.for-each.js":233,"core-js/modules/web.dom-collections.iterator.js":234
l4l6afu1w5f6z42qx2z8vuojr7o2ogu
MediaWiki:Gadget-XFDcloser-core.css
8
53748
310943
2026-10-25T13:35:15Z
Isma4l
41797
Abuuray
310943
css
text/css
/* _______________________________________________________________________________
* | |
* | === WARNING: GLOBAL GADGET FILE === |
* | Changes to this page affect many users. |
* | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. |
* |_______________________________________________________________________________|
*
* Built from source code at GitHub repository [https://github.com/wikimedia-gadgets/xfdcloser]
* All changes should be made in the repository, otherwise they will be lost.
*
* To update this script from github, you must have a local repository set up. Then
* follow the instructions at [https://github.com/wikimedia-gadgets/xfdcloser/blob/master/README.md]
*
* XFDcloser: close deletion discussions at XfD venues, including actions to implement closes; see [[WP:XFDC]]
* Author: Evad37
* Licencing and attribution: [[WP:XFDC#Licencing and attribution]]
*/
/* jshint esversion: 5, esnext:false, laxbreak: true, undef: true, eqnull: true, maxerr: 3000 */
/* globals console, document, window, $, mw, OO */
/* <nowiki> */
/* Inline links */
.xfdc-status {
font-size: small;
margin-left: 13px;
font-weight: normal;
}
.skin-timeless .xfdc-status {
font-size: 0.98rem;
}
.skin-minerva .xfdc-status {
font-size: 0.98rem;
display: block;
}
.xfdc-action {
font-weight: normal;
}
.xfdc-action a { cursor: pointer; }
.xfdc-qc-cancel {
cursor: pointer;
border: 1px solid #777;
border-radius: 10px;
font-weight: bold;
font-size: 90%;
color: #777;
padding: 0;
margin: 0 1px;
}
/* Style actions based on detected age */
.xfdc-old .xfdc-action { background-color: #c6ffc6; }
.xfdc-notOld .xfdc-action { background-color: #ffc6c6; }
.xfdc-unknownAge .xfdc-action { background-color: #ffffc6; }
.xfdc-notOld.xfdc-relisted .xfdc-action { background-color: #ffe9c6; }
/* Styles for actioned (closed/relisted) discussions */
.xfdc-actioned-heading {
text-decoration: line-through double black;
opacity: 0.75;
}
.xfdc-actioned-discussion { opacity: 0.5; }
/* == draggbleWindow styles == */
html body.ooui-draggbleWindow-open {
position: unset;
overflow: unset;
margin-right: unset !important; /* phab:T231138 */
}
html body.ooui-draggbleWindow-open .oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-active {
position: static;
padding: 0;
}
/* Increase z-index, to be above skin menus etc; smooth transition for dragging (transform:translate) */
html body.ooui-draggbleWindow-open .oo-ui-dialog.oo-ui-window-active > div {
z-index: 110;
transition: all 0.25s ease-out 0s, transform 0s !important;
}
/* == OOUI overrides == */
/* Fix left padding when labelPosition:before is used on a TextInputWidget.
* Is otherwise set to 0px via inline style on the <input> element.
*/
.oo-ui-textInputWidget.oo-ui-textInputWidget-labelPosition-before.padLeft2em .oo-ui-inputWidget-input {
padding-left: 2em !important;
}
.oo-ui-textInputWidget.oo-ui-textInputWidget-labelPosition-before.padLeft4em .oo-ui-inputWidget-input {
padding-left: 4em !important;
}
/* Consistent padding for menu option widgets (is inexplicably different in skins using Apex theme
instead of MediaWikiUi theme) */
.xfdc-menuOptionWidget.oo-ui-decoratedOptionWidget {
padding: 7px 12px;
}
/* Force task notices, warnings, and errors to all be shown on their own line */
.xfdc-taskItemWidget > .oo-ui-fieldLayout-messages {
clear: both;
}
/* == Show/hide box == */
#XFDcloser-showhide {
bottom: 0;
display: block;
position: fixed;
right: 0;
z-index: 100;
padding: 5px;
box-shadow: 0 2px 4px rgb(0 0 0 / 50%);
background-color: var(--background-color-warning-subtle, #fdf2d5);
color: inherit;
border: 1px solid #aaa;
border-radius: 5px;
font-size: 85%;
}
/* </nowiki> */
j32go7xzetrwnwpp7vmzqj3hne37gh1
MediaWiki:Gadget-XFDcloser-core
8
53749
310944
2026-10-25T13:36:45Z
Isma4l
41797
/* */
310944
wikitext
text/x-wiki
Qaybaha aaladda XFDcloser
41sogs85n5as2cfj0iqkmm0gsg31vlk
MediaWiki:Gadget-XFDcloser-core-beta.js
8
53750
310945
2026-10-25T13:43:02Z
Isma4l
41797
Abuuray
310945
javascript
text/javascript
/* _______________________________________________________________________________
* | |
* | === DIGNIIN: FAYLKA GOOBTA GUUD === |
* | Isbedelka boggan wuxuu saameeyaa isticmaalayaasha badan. |
* | Fadlan kala hadal isbedelada bogga wadahadalka ama ku saabsan [[WT:Gadget]] |
* |_______________________________________________________________________________|
*
* Laga dhisay koodhka isha ee kaydka GitHub [https://github.com/wikimedia-gadgets/xfdcloser]
* Dhammaan isbedelada waa in lagu sameeyaa kaydka, haddii kale waa la lumiyaa.
*
* Si aad uga cusboonaysiiso qoraalkan github, waa inaad haysataa kayd maxalli ah oo la habeeyey. Kadib
* raac tilmaamaha ku jira [https://github.com/wikimedia-gadgets/xfdcloser/blob/master/README.md]
*
* XFDcloser: xidh wadahadalada tirtiridda ee goobaha XfD, oo ay ku jiraan tillaabooyinka lagu hirgelinayo xidhitaanka; eeg [[WP:XFDC]]
* Qoraaga: Evad37
* Shatiga iyo sifaynta: [[WP:XFDC#Licencing and attribution]]
*/
/* jshint esversion: 5, esnext:false, laxbreak: true, undef: true, eqnull: true, maxerr: 3000 */
/* globals console, document, window, $, mw, OO */
/* <nowiki> */
!function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);throw(f=new Error("Lama heli karo module '"+i+"'")).code="MODULE_NOT_FOUND",f}c=n[i]={exports:{}},e[i][0].call(c.exports,function(r){return o(e[i][1][r]||r)},c,c.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}({1:[function(require,module,exports){require("core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.mw=exports.OO=exports.$=void 0;exports.$=window.$,exports.mw=window.mw,exports.OO=window.OO},{"core-js/modules/es.object.define-property.js":195}],2:[function(require,module,exports){var isCallable=require("../internals/is-callable"),tryToString=require("../internals/try-to-string"),$TypeError=TypeError;module.exports=function(argument){if(isCallable(argument))return argument;throw new $TypeError(tryToString(argument)+" ma aha shaqo (function)")}},{"../internals/is-callable":85,"../internals/try-to-string":166}],3:[function(require,module,exports){var isConstructor=require("../internals/is-constructor"),tryToString=require("../internals/try-to-string"),$TypeError=TypeError;module.exports=function(argument){if(isConstructor(argument))return argument;throw new $TypeError(tryToString(argument)+" ma aha wax dhisa (constructor)")}},{"../internals/is-constructor":86,"../internals/try-to-string":166}],4:[function(require,module,exports){var isPossiblePrototype=require("../internals/is-possible-prototype"),$String=String,$TypeError=TypeError;module.exports=function(argument){if(isPossiblePrototype(argument))return argument;throw new $TypeError("Lama dhigi karo "+$String(argument)+" tusaale ahaan (prototype)")}},{"../internals/is-possible-prototype":90}],5:[function(require,module,exports){var wellKnownSymbol=require("../internals/well-known-symbol"),create=require("../internals/object-create"),require=require("../internals/object-define-property").f,UNSCOPABLES=wellKnownSymbol("unscopables"),ArrayPrototype=Array.prototype;void 0===ArrayPrototype[UNSCOPABLES]&&require(ArrayPrototype,UNSCOPABLES,{configurable:!0,value:create(null)}),module.exports=function(key){ArrayPrototype[UNSCOPABLES][key]=!0}},{"../internals/object-create":107,"../internals/object-define-property":109,"../internals/well-known-symbol":174}],6:[function(require,module,exports){var charAt=require("../internals/string-multibyte").charAt;module.exports=function(S,index,unicode){return index+(unicode?charAt(S,index).length:1)}},{"../internals/string-multibyte":149}],7:[function(require,module,exports){var isPrototypeOf=require("../internals/object-is-prototype-of"),$TypeError=TypeError;module.exports=function(it,Prototype){if(isPrototypeOf(Prototype,it))return it;throw new $TypeError("Yeermis khaldan")}},{"../internals/object-is-prototype-of":116}],8:[function(require,module,exports){var isObject=require("../internals/is-object"),$String=String,$TypeError=TypeError;module.exports=function(argument){if(isObject(argument))return argument;throw new $TypeError($String(argument)+" ma aha shay (object)")}},{"../internals/is-object":89}],9:[function(require,module,exports){require=require("../internals/fails");module.exports=require(function(){var buffer;"function"==typeof ArrayBuffer&&(buffer=new ArrayBuffer(8),Object.isExtensible(buffer))&&Object.defineProperty(buffer,"a",{value:8})})},{"../internals/fails":53}],10:[function(require,module,exports){var $forEach=require("../internals/array-iteration").forEach,require=require("../internals/array-method-is-strict")("forEach");module.exports=require?[].forEach:function(callbackfn){return $forEach(this,callbackfn,1<arguments.length?arguments[1]:void 0)}},{"../internals/array-iteration":13,"../internals/array-method-is-strict":16}],11:[function(require,module,exports){var bind=require("../internals/function-bind-context"),call=require("../internals/function-call"),toObject=require("../internals/to-object"),callWithSafeIterationClosing=require("../internals/call-with-safe-iteration-closing"),isArrayIteratorMethod=require("../internals/is-array-iterator-method"),isConstructor=require("../internals/is-constructor"),lengthOfArrayLike=require("../internals/length-of-array-like"),createProperty=require("../internals/create-property"),getIterator=require("../internals/get-iterator"),getIteratorMethod=require("../internals/get-iterator-method"),$Array=Array;module.exports=function(arrayLike){var length,result,step,iterator,next,value,O=toObject(arrayLike),arrayLike=isConstructor(this),argumentsLength=arguments.length,mapfn=1<argumentsLength?arguments[1]:void 0,mapping=void 0!==mapfn,argumentsLength=(mapping&&(mapfn=bind(mapfn,2<argumentsLength?arguments[2]:void 0)),getIteratorMethod(O)),index=0;if(!argumentsLength||this===$Array&&isArrayIteratorMethod(argumentsLength))for(length=lengthOfArrayLike(O),result=arrayLike?new this(length):$Array(length);index<length;index++)value=mapping?mapfn(O[index],index):O[index],createProperty(result,index,value);else for(result=arrayLike?new this:[],next=(iterator=getIterator(O,argumentsLength)).next;!(step=call(next,iterator)).done;index++)value=mapping?callWithSafeIterationClosing(iterator,mapfn,[step.value,index],!0):step.value,createProperty(result,index,value);return result.length=index,result}},{"../internals/call-with-safe-iteration-closing":21,"../internals/create-property":33,"../internals/function-bind-context":58,"../internals/function-call":61,"../internals/get-iterator":68,"../internals/get-iterator-method":67,"../internals/is-array-iterator-method":83,"../internals/is-constructor":86,"../internals/length-of-array-like":100,"../internals/to-object":161}],12:[function(require,module,exports){function createMethod(IS_INCLUDES){return function($this,el,fromIndex){var O=toIndexedObject($this),length=lengthOfArrayLike(O);if(0!==length){var value,index=toAbsoluteIndex(fromIndex,length);if(IS_INCLUDES&&el!=el){for(;index<length;)if((value=O[index++])!=value)return!0}else for(;index<length;index++)if((IS_INCLUDES||index in O)&&O[index]===el)return IS_INCLUDES||index||0}return!IS_INCLUDES&&-1}}var toIndexedObject=require("../internals/to-indexed-object"),toAbsoluteIndex=require("../internals/to-absolute-index"),lengthOfArrayLike=require("../internals/length-of-array-like");module.exports={includes:createMethod(!0),indexOf:createMethod(!1)}},{"../internals/length-of-array-like":100,"../internals/to-absolute-index":157,"../internals/to-indexed-object":158}],13:[function(require,module,exports){var bind=require("../internals/function-bind-context"),uncurryThis=require("../internals/function-uncurry-this"),IndexedObject=require("../internals/indexed-object"),toObject=require("../internals/to-object"),lengthOfArrayLike=require("../internals/length-of-array-like"),arraySpeciesCreate=require("../internals/array-species-create"),push=uncurryThis([].push);module.exports={forEach:createMethod(0),map:createMethod(1),filter:createMethod(2),some:createMethod(3),every:createMethod(4),find:createMethod(5),findIndex:createMethod(6),filterReject:createMethod(7)}},{"../internals/array-species-create":20,"../internals/function-bind-context":58,"../internals/function-uncurry-this":65,"../internals/indexed-object":78,"../internals/length-of-array-like":100,"../internals/to-object":161}],14:[function(require,module,exports){var apply=require("../internals/function-apply"),toIndexedObject=require("../internals/to-indexed-object"),toIntegerOrInfinity=require("../internals/to-integer-or-infinity"),lengthOfArrayLike=require("../internals/length-of-array-like"),require=require("../internals/array-method-is-strict"),min=Math.min,$lastIndexOf=[].lastIndexOf,NEGATIVE_ZERO=!!$lastIndexOf&&1/[1].lastIndexOf(1,-0)<0,require=require("lastIndexOf");module.exports=NEGATIVE_ZERO||!require?function(searchElement){if(NEGATIVE_ZERO)return apply($lastIndexOf,this,arguments)||0;var O=toIndexedObject(this),length=lengthOfArrayLike(O);if(0!==length){var index=length-1;for((index=1<arguments.length?min(index,toIntegerOrInfinity(arguments[1])):index)<0&&(index=length+index);0<=index;index--)if(index in O&&O[index]===searchElement)return index||0}return-1}:$lastIndexOf},{"../internals/array-method-is-strict":16,"../internals/function-apply":57,"../internals/length-of-array-like":100,"../internals/to-indexed-object":158,"../internals/to-integer-or-infinity":159}],15:[function(require,module,exports){var fails=require("../internals/fails"),wellKnownSymbol=require("../internals/well-known-symbol"),V8_VERSION=require("../internals/environment-v8-version"),SPECIES=wellKnownSymbol("species");module.exports=function(METHOD_NAME){return 51<=V8_VERSION||!fails(function(){var array=[];return(array.constructor={})[SPECIES]=function(){return{foo:1}},1!==array[METHOD_NAME](Boolean).foo})}},{"../internals/environment-v8-version":50,"../internals/fails":53,"../internals/well-known-symbol":174}],16:[function(require,module,exports){var fails=require("../internals/fails");module.exports=function(METHOD_NAME,argument){var method=[][METHOD_NAME];return!!method&&fails(function(){method.call(null,argument||function(){return 1},1)})}},{"../internals/fails":53}],17:[function(require,module,exports){var aCallable=require("../internals/a-callable"),toObject=require("../internals/to-object"),IndexedObject=require("../internals/indexed-object"),lengthOfArrayLike=require("../internals/length-of-array-like"),$TypeError=TypeError,REDUCE_EMPTY="Loo-dhimashada (reduce) safafka madhan ee aan lahayn qiime bilow ah";module.exports={left:createMethod(!1),right:createMethod(!0)}},{"../internals/a-callable":2,"../internals/indexed-object":78,"../internals/length-of-array-like":100,"../internals/to-object":161}],18:[function(require,module,exports){var require=require("../internals/function-uncurry-this");module.exports=require([].slice)},{"../internals/function-uncurry-this":65}],19:[function(require,module,exports){var isArray=require("../internals/is-array"),isConstructor=require("../internals/is-constructor"),isObject=require("../internals/is-object"),SPECIES=require("../internals/well-known-symbol")("species"),$Array=Array;module.exports=function(originalArray){var C;return void 0===(C=isArray(originalArray)&&(C=originalArray.constructor,isConstructor(C)&&(C===$Array||isArray(C.prototype))||isObject(C)&&null===(C=C[SPECIES]))?void 0:C)?$Array:C}},{"../internals/is-array":84,"../internals/is-constructor":86,"../internals/is-object":89,"../internals/well-known-symbol":174}],20:[function(require,module,exports){var arraySpeciesConstructor=require("../internals/array-species-constructor");module.exports=function(originalArray,length){return new(arraySpeciesConstructor(originalArray))(0===length?0:length)}},{"../internals/array-species-constructor":19}],21:[function(require,module,exports){var anObject=require("../internals/an-object"),iteratorClose=require("../internals/iterator-close");module.exports=function(iterator,fn,value,ENTRIES){try{return ENTRIES?fn(anObject(value)[0],value[1]):fn(value)}catch(error){iteratorClose(iterator,"throw",error)}}},{"../internals/an-object":8,"../internals/iterator-close":95}],22:[function(require,module,exports){var ITERATOR=require("../internals/well-known-symbol")("iterator"),SAFE_CLOSING=!1;try{var called=0,iteratorWithReturn={next:function(){return{done:!!called++}},return:function(){SAFE_CLOSING=!0}};iteratorWithReturn[ITERATOR]=function(){return this},Array.from(iteratorWithReturn,function(){throw 2})}catch(error){}module.exports=function(exec,SKIP_CLOSING){try{if(!SKIP_CLOSING&&!SAFE_CLOSING)return!1}catch(error){return!1}var ITERATION_SUPPORT=!1;try{var object={};object[ITERATOR]=function(){return{next:function(){return{done:ITERATION_SUPPORT=!0}}}},exec(object)}catch(error){}return ITERATION_SUPPORT}},{"../internals/well-known-symbol":174}],23:[function(require,module,exports){var require=require("../internals/function-uncurry-this"),toString=require({}.toString),stringSlice=require("".slice);module.exports=function(it){return stringSlice(toString(it),8,-1)}},{"../internals/function-uncurry-this":65}],24:[function(require,module,exports){var TO_STRING_TAG_SUPPORT=require("../internals/to-string-tag-support"),isCallable=require("../internals/is-callable"),classofRaw=require("../internals/classof-raw"),TO_STRING_TAG=require("../internals/well-known-symbol")("toStringTag"),$Object=Object,CORRECT_ARGUMENTS="Arguments"===classofRaw(function(){return arguments}());module.exports=TO_STRING_TAG_SUPPORT?classofRaw:function(it){var tag;return void 0===it?"Undefined":null===it?"Null":"string"==typeof(tag=((it,key)=>{try{return it[key]}catch(error){}})(it=$Object(it),TO_STRING_TAG))?tag:CORRECT_ARGUMENTS?classofRaw(it):"Object"===(tag=classofRaw(it))&&isCallable(it.callee)?"Arguments":tag}},{"../internals/classof-raw":23,"../internals/is-callable":85,"../internals/to-string-tag-support":164,"../internals/well-known-symbol":174}],25:[function(require,module,exports){function uncaughtFrozenStore(state){return state.frozen||(state.frozen=new UncaughtFrozenStore)}function UncaughtFrozenStore(){this.entries=[]}function findUncaughtFrozen(store,key){return find(store.entries,function(it){return it[0]===key})}var uncurryThis=require("../internals/function-uncurry-this"),defineBuiltIns=require("../internals/define-built-ins"),getWeakData=require("../internals/internal-metadata").getWeakData,anInstance=require("../internals/an-instance"),anObject=require("../internals/an-object"),isNullOrUndefined=require("../internals/is-null-or-undefined"),isObject=require("../internals/is-object"),iterate=require("../internals/iterate"),ArrayIterationModule=require("../internals/array-iteration"),hasOwn=require("../internals/has-own-property"),require=require("../internals/internal-state"),setInternalState=require.set,internalStateGetterFor=require.getterFor,find=ArrayIterationModule.find,findIndex=ArrayIterationModule.findIndex,splice=uncurryThis([].splice),id=0;UncaughtFrozenStore.prototype={get:function(key){key=findUncaughtFrozen(this,key);if(key)return key[1]},has:function(key){return!!findUncaughtFrozen(this,key)},set:function(key,value){var entry=findUncaughtFrozen(this,key);entry?entry[1]=value:this.entries.push([key,value])},delete:function(key){var index=findIndex(this.entries,function(it){return it[0]===key});return~index&&splice(this.entries,index,1),!!~index}},module.exports={getConstructor:function(wrapper,CONSTRUCTOR_NAME,IS_MAP,ADDER){function define(that,key,value){var state=getInternalState(that),data=getWeakData(anObject(key),!0);return!0===data?uncaughtFrozenStore(state).set(key,value):data[state.id]=value,that}var wrapper=wrapper(function(that,iterable){anInstance(that,Prototype),setInternalState(that,{type:CONSTRUCTOR_NAME,id:id++,frozen:null}),isNullOrUndefined(iterable)||iterate(iterable,that[ADDER],{that:that,AS_ENTRIES:IS_MAP})}),Prototype=wrapper.prototype,getInternalState=internalStateGetterFor(CONSTRUCTOR_NAME);return defineBuiltIns(Prototype,{delete:function(key){var data,state=getInternalState(this);return!!isObject(key)&&(!0===(data=getWeakData(key))?uncaughtFrozenStore(state).delete(key):data&&hasOwn(data,state.id)&&delete data[state.id])},has:function(key){var data,state=getInternalState(this);return!!isObject(key)&&(!0===(data=getWeakData(key))?uncaughtFrozenStore(state).has(key):data&&hasOwn(data,state.id))}}),defineBuiltIns(Prototype,IS_MAP?{get:function(key){var data,state=getInternalState(this);if(isObject(key))return!0===(data=getWeakData(key))?uncaughtFrozenStore(state).get(key):data?data[state.id]:void 0},set:function(key,value){return define(this,key,value)}}:{add:function(value){return define(this,value,!0)}}),wrapper}}},{"../internals/an-instance":7,"../internals/an-object":8,"../internals/array-iteration":13,"../internals/define-built-ins":37,"../internals/function-uncurry-this":65,"../internals/has-own-property":73,"../internals/internal-metadata":81,"../internals/internal-state":82,"../internals/is-null-or-undefined":88,"../internals/is-object":89,"../internals/iterate":94}],26:[function(require,module,exports){var $=require("../internals/export"),globalThis=require("../internals/global-this"),uncurryThis=require("../internals/function-uncurry-this"),isForced=require("../internals/is-forced"),defineBuiltIn=require("../internals/define-built-in"),InternalMetadataModule=require("../internals/internal-metadata"),iterate=require("../internals/iterate"),anInstance=require("../internals/an-instance"),isCallable=require("../internals/is-callable"),isNullOrUndefined=require("../internals/is-null-or-undefined"),isObject=require("../internals/is-object"),fails=require("../internals/fails"),checkCorrectnessOfIteration=require("../internals/check-correctness-of-iteration"),setToStringTag=require("../internals/set-to-string-tag"),inheritIfRequired=require("../internals/inherit-if-required");module.exports=function(CONSTRUCTOR_NAME,wrapper,common){function fixMethod(KEY){var uncurriedNativeMethod=uncurryThis(NativePrototype[KEY]);defineBuiltIn(NativePrototype,KEY,"add"===KEY?function(value){return uncurriedNativeMethod(this,0===value?0:value),this}:"delete"===KEY?function(key){return!(IS_WEAK&&!isObject(key))&&uncurriedNativeMethod(this,0===key?0:key)}:"get"===KEY?function(key){return IS_WEAK&&!isObject(key)?void 0:uncurriedNativeMethod(this,0===key?0:key)}:"has"===KEY?function(key){return!(IS_WEAK&&!isObject(key))&&uncurriedNativeMethod(this,0===key?0:key)}:function(key,value){return uncurriedNativeMethod(this,0===key?0:key,value),this})}var instance,HASNT_CHAINING,THROWS_ON_PRIMITIVES,ACCEPT_ITERABLES,BUGGY_ZERO,IS_MAP=-1!==CONSTRUCTOR_NAME.indexOf("Map"),IS_WEAK=-1!==CONSTRUCTOR_NAME.indexOf("Weak"),ADDER=IS_MAP?"set":"add",NativeConstructor=globalThis[CONSTRUCTOR_NAME],NativePrototype=NativeConstructor&&NativeConstructor.prototype,Constructor=NativeConstructor,exported={};return isForced(CONSTRUCTOR_NAME,!isCallable(NativeConstructor)||!(IS_WEAK||NativePrototype.forEach&&!fails(function(){(new NativeConstructor).entries().next()})))?(Constructor=common.getConstructor(wrapper,CONSTRUCTOR_NAME,IS_MAP,ADDER),InternalMetadataModule.enable()):isForced(CONSTRUCTOR_NAME,!0)&&(HASNT_CHAINING=(instance=new Constructor)[ADDER](IS_WEAK?{}:-0,1)!==instance,THROWS_ON_PRIMITIVES=fails(function(){instance.has(1)}),ACCEPT_ITERABLES=checkCorrectnessOfIteration(function(iterable){new NativeConstructor(iterable)}),BUGGY_ZERO=!IS_WEAK&&fails(function(){for(var $instance=new NativeConstructor,index=5;index--;)$instance[ADDER](index,index);return!$instance.has(-0)}),ACCEPT_ITERABLES||(((Constructor=wrapper(function(dummy,iterable){anInstance(dummy,NativePrototype);dummy=inheritIfRequired(new NativeConstructor,dummy,Constructor);return isNullOrUndefined(iterable)||iterate(iterable,dummy[ADDER],{that:dummy,AS_ENTRIES:IS_MAP}),dummy})).prototype=NativePrototype).constructor=Constructor),(THROWS_ON_PRIMITIVES||BUGGY_ZERO)&&(fixMethod("delete"),fixMethod("has"),IS_MAP)&&fixMethod("get"),(BUGGY_ZERO||HASNT_CHAINING)&&fixMethod(ADDER),IS_WEAK)&&NativePrototype.clear&&delete NativePrototype.clear,$({global:!0,constructor:!0,forced:(exported[CONSTRUCTOR_NAME]=Constructor)!==NativeConstructor},exported),setToStringTag(Constructor,CONSTRUCTOR_NAME),IS_WEAK||common.setStrong(Constructor,CONSTRUCTOR_NAME,IS_MAP),Constructor}},{"../internals/an-instance":7,"../internals/check-correctness-of-iteration":22,"../internals/define-built-in":36,"../internals/export":52,"../internals/fails":53,"../internals/function-uncurry-this":65,"../internals/global-this":72,"../internals/inherit-if-required":79,"../internals/internal-metadata":81,"../internals/is-callable":85,"../internals/is-forced":87,"../internals/is-null-or-undefined":88,"../internals/is-object":89,"../internals/iterate":94,"../internals/set-to-string-tag":144}],27:[function(require,module,exports){var hasOwn=require("../internals/has-own-property"),ownKeys=require("../internals/own-keys"),getOwnPropertyDescriptorModule=require("../internals/object-get-own-property-descriptor"),definePropertyModule=require("../internals/object-define-property");module.exports=function(target,source,exceptions){for(var keys=ownKeys(source),defineProperty=definePropertyModule.f,getOwnPropertyDescriptor=getOwnPropertyDescriptorModule.f,i=0;i<keys.length;i++){var key=keys[i];hasOwn(target,key)||exceptions&&hasOwn(exceptions,key)||defineProperty(target,key,getOwnPropertyDescriptor(source,key))}}},{"../internals/has-own-property":73,"../internals/object-define-property":109,"../internals/object-get-own-property-descriptor":110,"../internals/own-keys":124}],28:[function(require,module,exports){var MATCH=require("../internals/well-known-symbol")("match");module.exports=function(METHOD_NAME){var regexp=/./;try{"/./"[METHOD_NAME](regexp)}catch(error1){try{return regexp[MATCH]=!1,"/./"[METHOD_NAME](regexp)}catch(error2){}}return!1}},{"../internals/well-known-symbol":174}],29:[function(require,module,exports){require=require("../internals/fails");module.exports=!require(function(){function F(){}return F.prototype.constructor=null,Object.getPrototypeOf(new F)!==F.prototype})},{"../internals/fails":53}],30:[function(require,module,exports){module.exports=function(value,done){return{value:value,done:done}}},{}],31:[function(require,module,exports){var DESCRIPTORS=require("../internals/descriptors"),definePropertyModule=require("../internals/object-define-property"),createPropertyDescriptor=require("../internals/create-property-descriptor");module.exports=DESCRIPTORS?function(object,key,value){return definePropertyModule.f(object,key,createPropertyDescriptor(1,value))}:function(object,key,value){return object[key]=value,object}},{"../internals/create-property-descriptor":32,"../internals/descriptors":39,"../internals/object-define-property":109}],32:[function(require,module,exports){module.exports=function(bitmap,value){return{enumerable:!(1&bitmap),configurable:!(2&bitmap),writable:!(4&bitmap),value:value}}},{}],33:[function(require,module,exports){var DESCRIPTORS=require("../internals/descriptors"),definePropertyModule=require("../internals/object-define-property"),createPropertyDescriptor=require("../internals/create-property-descriptor");module.exports=function(object,key,value){DESCRIPTORS?definePropertyModule.f(object,key,createPropertyDescriptor(0,value)):object[key]=value}},{"../internals/create-property-descriptor":32,"../internals/descriptors":39,"../internals/object-define-property":109}],34:[function(require,module,exports){var anObject=require("../internals/an-object"),ordinaryToPrimitive=require("../internals/ordinary-to-primitive"),$TypeError=TypeError;module.exports=function(hint){if(anObject(this),"string"===hint||"default"===hint)hint="string";else if("number"!==hint)throw new $TypeError("Tilmaame khaldan");return ordinaryToPrimitive(this,hint)}},{"../internals/an-object":8,"../internals/ordinary-to-primitive":123}],35:[function(require,module,exports){var makeBuiltIn=require("../internals/make-built-in"),defineProperty=require("../internals/object-define-property");module.exports=function(target,name,descriptor){return descriptor.get&&makeBuiltIn(descriptor.get,name,{getter:!0}),descriptor.set&&makeBuiltIn(descriptor.set,name,{setter:!0}),defineProperty.f(target,name,descriptor)}},{"../internals/make-built-in":101,"../internals/object-define-property":109}],36:[function(require,module,exports){var isCallable=require("../internals/is-callable"),definePropertyModule=require("../internals/object-define-property"),makeBuiltIn=require("../internals/make-built-in"),defineGlobalProperty=require("../internals/define-global-property");module.exports=function(O,key,value,options){var simple=(options=options||{}).enumerable,name=void 0!==options.name?options.name:key;if(isCallable(value)&&makeBuiltIn(value,name,options),options.global)simple?O[key]=value:defineGlobalProperty(key,value);else{try{options.unsafe?O[key]&&(simple=!0):delete O[key]}catch(error){}simple?O[key]=value:definePropertyModule.f(O,key,{value:value,enumerable:!1,configurable:!options.nonConfigurable,writable:!options.nonWritable})}return O}},{"../internals/define-global-property":38,"../internals/is-callable":85,"../internals/make-built-in":101,"../internals/object-define-property":109}],37:[function(require,module,exports){var defineBuiltIn=require("../internals/define-built-in");module.exports=function(target,src,options){for(var key in src)defineBuiltIn(target,key,src[key],options);return target}},{"../internals/define-built-in":36}],38:[function(require,module,exports){var globalThis=require("../internals/global-this"),defineProperty=Object.defineProperty;module.exports=function(key,value){try{defineProperty(globalThis,key,{value:value,configurable:!0,writable:!0})}catch(error){globalThis[key]=value}return value}},{"../internals/global-this":72}],39:[function(require,module,exports){require=require("../internals/fails");module.exports=!require(function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]})},{"../internals/fails":53}],40:[function(require,module,exports){var globalThis=require("../internals/global-this"),require=require("../internals/is-object"),document=globalThis.document,EXISTS=require(document)&&require(document.createElement);module.exports=function(it){return EXISTS?document.createElement(it):{}}},{"../internals/global-this":72,"../internals/is-object":89}],41:[function(require,module,exports){var $TypeError=TypeError;module.exports=function(it){if(9007199254740991<it)throw $TypeError("Tusaha ugu sarreeya ee la oggol yahay waa la dhaafay");return it}},{}],42:[function(require,module,exports){module.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},{}],43:[function(require,module,exports){require=require("../internals/document-create-element")("span").classList,require=require&&require.constructor&&require.constructor.prototype;module.exports=require===Object.prototype?void 0:require},{"../internals/document-create-element":40}],44:[function(require,module,exports){module.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},{}],45:[function(require,module,exports){require=require("../internals/environment-user-agent");module.exports=/ipad|iphone|ipod/i.test(require)&&"undefined"!=typeof Pebble},{"../internals/environment-user-agent":49}],46:[function(require,module,exports){require=require("../internals/environment-user-agent");module.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(require)},{"../internals/environment-user-agent":49}],47:[function(require,module,exports){require=require("../internals/environment");module.exports="NODE"===require},{"../internals/environment":51}],48:[function(require,module,exports){require=require("../internals/environment-user-agent");module.exports=/web0s(?!.*chrome)/i.test(require)},{"../internals/environment-user-agent":49}],49:[function(require,module,exports){require=require("../internals/global-this").navigator,require=require&&require.userAgent;module.exports=require?String(require):""},{"../internals/global-this":72}],50:[function(require,module,exports){var match,version,globalThis=require("../internals/global-this"),require=require("../internals/environment-user-agent"),process=globalThis.process,globalThis=globalThis.Deno,process=process&&process.versions||globalThis&&globalThis.version,globalThis=process&&process.v8;!(version=globalThis?0<(match=globalThis.split("."))[0]&&match[0]<4?1:+(match[0]+match[1]):version)&&require&&(!(match=require.match(/Edge\/(\d+)/))||74<=match[1])&&(match=require.match(/Chrome\/(\d+)/))&&(version=+match[1]),module.exports=version},{"../internals/environment-user-agent":49,"../internals/global-this":72}],51:[function(require,module,exports){function userAgentStartsWith(string){return userAgent.slice(0,string.length)===string}var globalThis=require("../internals/global-this"),userAgent=require("../internals/environment-user-agent"),require=require("../internals/classof-raw");module.exports=userAgentStartsWith("Bun/")?"BUN":userAgentStartsWith("Cloudflare-Workers")?"CLOUDFLARE":userAgentStartsWith("Deno/")?"DENO":userAgentStartsWith("Node.js/")?"NODE":globalThis.Bun&&"string"==typeof Bun.version?"BUN":globalThis.Deno&&"object"==typeof Deno.version?"DENO":"process"===require(globalThis.process)?"NODE":globalThis.window&&globalThis.document?"BROWSER":"REST"},{"../internals/classof-raw":23,"../internals/environment-user-agent":49,"../internals/global-this":72}],52:[function(require,module,exports){var globalThis=require("../internals/global-this"),getOwnPropertyDescriptor=require("../internals/object-get-own-property-descriptor").f,createNonEnumerableProperty=require("../internals/create-non-enumerable-property"),defineBuiltIn=require("../internals/define-built-in"),defineGlobalProperty=require("../internals/define-global-property"),copyConstructorProperties=require("../internals/copy-constructor-properties"),isForced=require("../internals/is-forced");module.exports=function(options,source){var key,sourceProperty,descriptor,TARGET=options.target,GLOBAL=options.global,STATIC=options.stat,target=GLOBAL?globalThis:STATIC?globalThis[TARGET]||defineGlobalProperty(TARGET,{}):globalThis[TARGET]&&globalThis[TARGET].prototype;if(target)for(key in source){if(sourceProperty=source[key],descriptor=options.dontCallGetSet?(descriptor=getOwnPropertyDescriptor(target,key))&&descriptor.value:target[key],!isForced(GLOBAL?key:TARGET+(STATIC?".":"#")+key,options.forced)&&void 0!==descriptor){if(typeof sourceProperty==typeof descriptor)continue;copyConstructorProperties(sourceProperty,descriptor)}(options.sham||descriptor&&descriptor.sham)&&createNonEnumerableProperty(sourceProperty,"sham",!0),defineBuiltIn(target,key,sourceProperty,options)}}},{"../internals/copy-constructor-properties":27,"../internals/create-non-enumerable-property":31,"../internals/define-built-in":36,"../internals/define-global-property":38,"../internals/global-this":72,"../internals/is-forced":87,"../internals/object-get-own-property-descriptor":110}],53:[function(require,module,exports){module.exports=function(exec){try{return!!exec()}catch(error){return!0}}},{}],54:[function(require,module,exports){require("../modules/es.regexp.exec");var call=require("../internals/function-call"),defineBuiltIn=require("../internals/define-built-in"),regexpExec=require("../internals/regexp-exec"),fails=require("../internals/fails"),wellKnownSymbol=require("../internals/well-known-symbol"),createNonEnumerableProperty=require("../internals/create-non-enumerable-property"),SPECIES=wellKnownSymbol("species"),RegExpPrototype=RegExp.prototype;module.exports=function(KEY,exec,FORCED,SHAM){var nativeRegExpMethod,SYMBOL=wellKnownSymbol(KEY),DELEGATES_TO_SYMBOL=!fails(function(){var O={};return O[SYMBOL]=function(){return 7},7!==""[KEY](O)}),DELEGATES_TO_EXEC=DELEGATES_TO_SYMBOL&&!fails(function(){var execCalled=!1,re=/a/;return"split"===KEY&&((re={constructor:{}}).constructor[SPECIES]=function(){return re},re.flags="",re[SYMBOL]=/./[SYMBOL]),re.exec=function(){return execCalled=!0,null},re[SYMBOL](""),!execCalled});DELEGATES_TO_SYMBOL&&DELEGATES_TO_EXEC&&!FORCED||(nativeRegExpMethod=/./[SYMBOL],DELEGATES_TO_EXEC=exec(SYMBOL,""[KEY],function(nativeMethod,regexp,str,arg2,forceStringMethod){var $exec=regexp.exec;return $exec===regexpExec||$exec===RegExpPrototype.exec?DELEGATES_TO_SYMBOL&&!forceStringMethod?{done:!0,value:call(nativeRegExpMethod,regexp,str,arg2)}:{done:!0,value:call(nativeMethod,str,regexp,arg2)}:{done:!1}}),defineBuiltIn(String.prototype,KEY,DELEGATES_TO_EXEC[0]),defineBuiltIn(RegExpPrototype,SYMBOL,DELEGATES_TO_EXEC[1])),SHAM&&createNonEnumerableProperty(RegExpPrototype[SYMBOL],"sham",!0)}},{"../internals/create-non-enumerable-property":31,"../internals/define-built-in":36,"../internals/fails":53,"../internals/function-call":61,"../internals/regexp-exec":134,"../internals/well-known-symbol":174,"../modules/es.regexp.exec":214}],55:[function(require,module,exports){function flattenIntoArray(target,original,source,sourceLen,start,depth,mapper,thisArg){for(var element,elementLen,targetIndex=start,sourceIndex=0,mapFn=!!mapper&&bind(mapper,thisArg);sourceIndex<sourceLen;)sourceIndex in source&&(element=mapFn?mapFn(source[sourceIndex],sourceIndex,original):source[sourceIndex],0<depth&&isArray(element)?(elementLen=lengthOfArrayLike(element),targetIndex=flattenIntoArray(target,original,element,elementLen,targetIndex,depth-1)-1):(doesNotExceedSafeInteger(targetIndex+1),target[targetIndex]=element),targetIndex++),sourceIndex++;return targetIndex}var isArray=require("../internals/is-array"),lengthOfArrayLike=require("../internals/length-of-array-like"),doesNotExceedSafeInteger=require("../internals/does-not-exceed-safe-integer"),bind=require("../internals/function-bind-context");module.exports=flattenIntoArray},{"../internals/does-not-exceed-safe-integer":41,"../internals/function-bind-context":58,"../internals/is-array":84,"../internals/length-of-array-like":100}],56:[function(require,module,exports){require=require("../internals/fails");module.exports=!require(function(){return Object.isExtensible(Object.preventExtensions({}))})},{"../internals/fails":53}],57:[function(require,module,exports){var require=require("../internals/function-bind-native"),FunctionPrototype=Function.prototype,apply=FunctionPrototype.apply,call=FunctionPrototype.call;module.exports="object"==typeof Reflect&&Reflect.apply||(require?call.bind(apply):function(){return call.apply(apply,arguments)})},{"../internals/function-bind-native":59}],58:[function(require,module,exports){var uncurryThis=require("../internals/function-uncurry-this-clause"),aCallable=require("../internals/a-callable"),NATIVE_BIND=require("../internals/function-bind-native"),bind=uncurryThis(uncurryThis.bind);module.exports=function(fn,that){return aCallable(fn),void 0===that?fn:NATIVE_BIND?bind(fn,that):function(){return fn.apply(that,arguments)}}},{"../internals/a-callable":2,"../internals/function-bind-native":59,"../internals/function-uncurry-this-clause":64}],59:[function(require,module,exports){require=require("../internals/fails");module.exports=!require(function(){var test=function(){}.bind();return"function"!=typeof test||test.hasOwnProperty("prototype")})},{"../internals/fails":53}],60:[function(require,module,exports){var uncurryThis=require("../internals/function-uncurry-this"),aCallable=require("../internals/a-callable"),isObject=require("../internals/is-object"),hasOwn=require("../internals/has-own-property"),arraySlice=require("../internals/array-slice"),require=require("../internals/function-bind-native"),$Function=Function,concat=uncurryThis([].concat),join=uncurryThis([].join),factories={};module.exports=require?$Function.bind:function(that){var F=aCallable(this),Prototype=F.prototype,partArgs=arraySlice(arguments,1),boundFunction=function(){var args=concat(partArgs,arraySlice(arguments));return this instanceof boundFunction?((C,argsLength,args)=>{if(!hasOwn(factories,argsLength)){for(var list=[],i=0;i<argsLength;i++)list[i]="a["+i+"]";factories[argsLength]=$Function("C,a","return new C("+join(list,",")+")")}return factories[argsLength](C,args)})(F,args.length,args):F.apply(that,args)};return isObject(Prototype)&&(boundFunction.prototype=Prototype),boundFunction}},{"../internals/a-callable":2,"../internals/array-slice":18,"../internals/function-bind-native":59,"../internals/function-uncurry-this":65,"../internals/has-own-property":73,"../internals/is-object":89}],61:[function(require,module,exports){var require=require("../internals/function-bind-native"),call=Function.prototype.call;module.exports=require?call.bind(call):function(){return call.apply(call,arguments)}}},{"../internals/function-bind-native":59}],62:[function(require,module,exports){var DESCRIPTORS=require("../internals/descriptors"),require=require("../internals/has-own-property"),FunctionPrototype=Function.prototype,getDescriptor=DESCRIPTORS&&Object.getOwnPropertyDescriptor,require=require(FunctionPrototype,"name"),PROPER=require&&"something"===function(){}.name,DESCRIPTORS=require&&(!DESCRIPTORS||getDescriptor(FunctionPrototype,"name").configurable);module.exports={EXISTS:require,PROPER:PROPER,CONFIGURABLE:DESCRIPTORS}},{"../internals/descriptors":39,"../internals/has-own-property":73}],63:[function(require,module,exports){var uncurryThis=require("../internals/function-uncurry-this"),aCallable=require("../internals/a-callable");module.exports=function(object,key,method){try{return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object,key)[method]))}catch(error){}}},{"../internals/a-callable":2,"../internals/function-uncurry-this":65}],64:[function(require,module,exports){var classofRaw=require("../internals/classof-raw"),uncurryThis=require("../internals/function-uncurry-this");module.exports=function(fn){if("Function"===classofRaw(fn))return uncurryThis(fn)}},{"../internals/classof-raw":23,"../internals/function-uncurry-this":65}],65:[function(require,module,exports){var require=require("../internals/function-bind-native"),FunctionPrototype=Function.prototype,call=FunctionPrototype.call,FunctionPrototype=require&&FunctionPrototype.bind.bind(call,call);module.exports=require?FunctionPrototype:function(fn){return function(){return call.apply(fn,arguments)}}},{"../internals/function-bind-native":59}],66:[function(require,module,exports){var globalThis=require("../internals/global-this"),isCallable=require("../internals/is-callable");module.exports=function(namespace,method){return arguments.length<2?(argument=globalThis[namespace],isCallable(argument)?argument:void 0):globalThis[namespace]&&globalThis[namespace][method];var argument}},{"../internals/global-this":72,"../internals/is-callable":85}],67:[function(require,module,exports){var classof=require("../internals/classof"),getMethod=require("../internals/get-method"),isNullOrUndefined=require("../internals/is-null-or-undefined"),Iterators=require("../internals/iterators"),ITERATOR=require("../internals/well-known-symbol")("iterator");module.exports=function(it){if(!isNullOrUndefined(it))return getMethod(it,ITERATOR)||getMethod(it,"@@iterator")||Iterators[classof(it)]}},{"../internals/classof":24,"../internals/get-method":70,"../internals/is-null-or-undefined":88,"../internals/iterators":99,"../internals/well-known-symbol":174}],68:[function(require,module,exports){var call=require("../internals/function-call"),aCallable=require("../internals/a-callable"),anObject=require("../internals/an-object"),tryToString=require("../internals/try-to-string"),getIteratorMethod=require("../internals/get-iterator-method"),$TypeError=TypeError;module.exports=function(argument,usingIterator){usingIterator=arguments.length<2?getIteratorMethod(argument):usingIterator;if(aCallable(usingIterator))return anObject(call(usingIterator,argument));throw new $TypeError(tryToString(argument)+" laguma wareeri karo (not iterable)")}},{"../internals/a-callable":2,"../internals/an-object":8,"../internals/function-call":61,"../internals/get-iterator-method":67,"../internals/try-to-string":166}],69:[function(require,module,exports){var uncurryThis=require("../internals/function-uncurry-this"),isArray=require("../internals/is-array"),isCallable=require("../internals/is-callable"),classof=require("../internals/classof-raw"),toString=require("../internals/to-string"),push=uncurryThis([].push);module.exports=function(replacer){if(isCallable(replacer))return replacer;if(isArray(replacer)){for(var rawLength=replacer.length,keys=[],i=0;i<rawLength;i++){var element=replacer[i];"string"==typeof element?push(keys,element):"number"!=typeof element&&"Number"!==classof(element)&&"String"!==classof(element)||push(keys,toString(element))}var keysLength=keys.length,root=!0;return function(key,value){if(root)return root=!1,value;if(isArray(this))return value;for(var j=0;j<keysLength;j++)if(keys[j]===key)return value}}}},{"../internals/classof-raw":23,"../internals/function-uncurry-this":65,"../internals/is-array":84,"../internals/is-callable":85,"../internals/to-string":165}],70:[function(require,module,exports){var aCallable=require("../internals/a-callable"),isNullOrUndefined=require("../internals/is-null-or-undefined");module.exports=function(V,P){V=V[P];return isNullOrUndefined(V)?void 0:aCallable(V)}},{"../internals/a-callable":2,"../internals/is-null-or-undefined":88}],71:[function(require,module,exports){var uncurryThis=require("../internals/function-uncurry-this"),toObject=require("../internals/to-object"),floor=Math.floor,charAt=uncurryThis("".charAt),replace=uncurryThis("".replace),stringSlice=uncurryThis("".slice),SUBSTITUTION_SYMBOLS=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,SUBSTITUTION_SYMBOLS_NO_NAMED=/\$([$&'`]|\d{1,2})/g;module.exports=function(matched,str,position,captures,namedCaptures,replacement){var tailPos=position+matched.length,m=captures.length,symbols=SUBSTITUTION_SYMBOLS_NO_NAMED;return void 0!==namedCaptures&&(namedCaptures=toObject(namedCaptures),symbols=SUBSTITUTION_SYMBOLS),replace(replacement,symbols,function(match,ch){var capture;switch(charAt(ch,0)){case"$":return"$";case"&":return matched;case"`":return stringSlice(str,0,position);case"'":return stringSlice(str,tailPos);case"<":capture=namedCaptures[stringSlice(ch,1,-1)];break;default:var f,n=+ch;if(0==n)return match;if(m<n)return 0!==(f=floor(n/10))&&f<=m?void 0===captures[f-1]?charAt(ch,1):captures[f-1]+charAt(ch,1):match;capture=captures[n-1]}return void 0===capture?"":capture})}},{"../internals/function-uncurry-this":65,"../internals/to-object":161}],72:[function(require,module,exports){!function(global){!function(){function check(it){return it&&it.Math===Math&&it}module.exports=check("object"==typeof globalThis&&globalThis)||check("object"==typeof window&&window)||check("object"==typeof self&&self)||check("object"==typeof global&&global)||check("object"==typeof this&&this)||function(){return this}()||Function("return this")()}.call(this)}.call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],73:[function(require,module,exports){var uncurryThis=require("../internals/function-uncurry-this"),toObject=require("../internals/to-object"),hasOwnProperty=uncurryThis({}.hasOwnProperty);module.exports=Object.hasOwn||function(it,key){return hasOwnProperty(toObject(it),key)}},{"../internals/function-uncurry-this":65,"../internals/to-object":161}],74:[function(require,module,exports){module.exports={}},{}],75:[function(require,module,exports){module.exports=function(a,b){try{1===arguments.length?console.error(a):console.error(a,b)}catch(error){}}},{}],76:[function(require,module,exports){require=require("../internals/get-built-in");module.exports=require("document","documentElement")},{"../internals/get-built-in":66}],77:[function(require,module,exports){var DESCRIPTORS=require("../internals/descriptors"),fails=require("../internals/fails"),createElement=require("../internals/document-create-element");module.exports=!DESCRIPTORS&&!fails(function(){return 7!==Object.defineProperty(createElement("div"),"a",{get:function(){return 7}}).a})},{"../internals/descriptors":39,"../internals/document-create-element":40,"../internals/fails":53}],78:[function(require,module,exports){var uncurryThis=require("../internals/function-uncurry-this"),fails=require("../internals/fails"),classof=require("../internals/classof-raw"),$Object=Object,split=uncurryThis("".split);module.exports=fails(function(){return!$Object("z").propertyIsEnumerable(0)})?function(it){return"String"===classof(it)?split(it,""):$Object(it)}:$Object},{"../internals/classof-raw":23,"../internals/fails":53,"../internals/function-uncurry-this":65}],79:[function(require,module,exports){var isCallable=require("../internals/is-callable"),isObject=require("../internals/is-object"),setPrototypeOf=require("../internals/object-set-prototype-of");module.exports=function($this,dummy,Wrapper){return setPrototypeOf&&isCallable(dummy=dummy.constructor)&&dummy!==Wrapper&&isObject(dummy=dummy.prototype)&&dummy!==Wrapper.prototype&&setPrototypeOf($this,dummy),$this}},{"../internals/is-callable":85,"../internals/is-object":89,"../internals/object-set-prototype-of":120}],80:[function(require,module,exports){var uncurryThis=require("../internals/function-uncurry-this"),isCallable=require("../internals/is-callable"),require=require("../internals/shared-store"),functionToString=uncurryThis(Function.toString);isCallable(require.inspectSource)||(require.inspectSource=function(it){return functionToString(it)}),module.exports=require.inspectSource},{"../internals/function-uncurry-this":65,"../internals/is-callable":85,"../internals/shared-store":146}],81:[function(require,module,exports){function setMetadata(it){defineProperty(it,METADATA,{value:{objectID:"O"+id++,weakData:{}}})}var $=require("../internals/export"),uncurryThis=require("../internals/function-uncurry-this"),hiddenKeys=require("../internals/hidden-keys"),isObject=require("../internals/is-object"),hasOwn=require("../internals/has-own-property"),defineProperty=require("../internals/object-define-property").f,getOwnPropertyNamesModule=require("../internals/object-get-own-property-names"),getOwnPropertyNamesExternalModule=require("../internals/object-get-own-property-names-external"),isExtensible=require("../internals/object-is-extensible"),uid=require("../internals/uid"),FREEZING=require("../internals/freezing"),REQUIRED=!1,METADATA=uid("meta"),id=0,meta=module.exports={enable:function(){meta.enable=function(){},REQUIRED=!0;var getOwnPropertyNames=getOwnPropertyNamesModule.f,splice=uncurryThis([].splice),test={};test[METADATA]=1,getOwnPropertyNames(test).length&&(getOwnPropertyNamesModule.f=function(it){for(var result=getOwnPropertyNames(it),i=0,length=result.length;i<length;i++)if(result[i]===METADATA){splice(result,i,1);break}return result},$({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:getOwnPropertyNamesExternalModule.f}))},fastKey:function(it,create){if(!isObject(it))return"symbol"==typeof it?it:("string"==typeof it?"S":"P")+it;if(!hasOwn(it,METADATA)){if(!isExtensible(it))return"F";if(!create)return"E";setMetadata(it)}return it[METADATA].objectID},getWeakData:function(it,create){if(!hasOwn(it,METADATA)){if(!isExtensible(it))return!0;if(!create)return!1;setMetadata(it)}return it[METADATA].weakData},onFreeze:function(it){return FREEZING&&REQUIRED&&isExtensible(it)&&!hasOwn(it,METADATA)&&setMetadata(it),it}};hiddenKeys[METADATA]=!0},{"../internals/export":52,"../internals/freezing":56,"../internals/function-uncurry-this":65,"../internals/has-own-property":73,"../internals/hidden-keys":74,"../internals/is-object":89,"../internals/object-define-property":109,"../internals/object-get-own-property-names":112,"../internals/object-get-own-property-names-external":111,"../internals/object-is-extensible":115,"../internals/uid":167}],82:[function(require,module,exports){var set,get,store,STATE,NATIVE_WEAK_MAP=require("../internals/weak-map-basic-detection"),globalThis=require("../internals/global-this"),isObject=require("../internals/is-object"),createNonEnumerableProperty=require("../internals/create-non-enumerable-property"),hasOwn=require("../internals/has-own-property"),shared=require("../internals/shared-store"),sharedKey=require("../internals/shared-key"),require=require("../internals/hidden-keys"),TypeError=globalThis.TypeError,globalThis=globalThis.WeakMap,has=NATIVE_WEAK_MAP||shared.state?((store=shared.state||(shared.state=new globalThis)).get=store.get,store.has=store.has,store.set=store.set,set=function(it,metadata){if(store.has(it))throw new TypeError("Shayga horay ayaa loo bilaabay");return metadata.facade=it,store.set(it,metadata),metadata},get=function(it){return store.get(it)||{}},function(it){return store.has(it)}):(require[STATE=sharedKey("state")]=!0,set=function(it,metadata){if(hasOwn(it,STATE))throw new TypeError("Shayga horay ayaa loo bilaabay");return metadata.facade=it,createNonEnumerableProperty(it,STATE,metadata),metadata},get=function(it){return hasOwn(it,STATE)?it[STATE]:{}},function(it){return hasOwn(it,STATE)});module.exports={set:set,get:get,has:has,enforce:function(it){return has(it)?get(it):set(it,{})},getterFor:function(TYPE){return function(it){if(isObject(it)&&(it=get(it)).type===TYPE)return it;throw new TypeError("Soo-dhaweeye aan la jaanqaadi karin, "+TYPE+" ayaa loo baahan yahay")}}}},{"../internals/create-non-enumerable-property":31,"../internals/global-this":72,"../internals/has-own-property":73,"../internals/hidden-keys":74,"../internals/is-object":89,"../internals/shared-key":145,"../internals/shared-store":146,"../internals/weak-map-basic-detection":171}],83:[function(require,module,exports){var wellKnownSymbol=require("../internals/well-known-symbol"),Iterators=require("../internals/iterators"),ITERATOR=wellKnownSymbol("iterator"),ArrayPrototype=Array.prototype;module.exports=function(it){return void 0!==it&&(Iterators.Array===it||ArrayPrototype[ITERATOR]===it)}},{"../internals/iterators":99,"../internals/well-known-symbol":174}],84:[function(require,module,exports){var classof=require("../internals/classof-raw");module.exports=Array.isArray||function(argument){return"Array"===classof(argument)}},{"../internals/classof-raw":23}],85:[function(require,module,exports){var documentAll="object"==typeof document&&document.all;module.exports=void 0===documentAll&&void 0!==documentAll?function(argument){return"function"==typeof argument||argument===documentAll}:function(argument){return"function"==typeof argument}},{}],86:[function(require,module,exports){function noop(){}function isConstructorModern(argument){if(!isCallable(argument))return!1;try{return construct(noop,[],argument),!0}catch(error){return!1}}function isConstructorLegacy(argument){if(!isCallable(argument))return!1;switch(classof(argument)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return INCORRECT_TO_STRING||!!exec(constructorRegExp,inspectSource(argument))}catch(error){return!0}}var uncurryThis=require("../internals/function-uncurry-this"),fails=require("../internals/fails"),isCallable=require("../internals/is-callable"),classof=require("../internals/classof"),getBuiltIn=require("../internals/get-built-in"),inspectSource=require("../internals/inspect-source"),construct=getBuiltIn("Reflect","construct"),constructorRegExp=/^\s*(?:class|function)\b/,exec=uncurryThis(constructorRegExp.exec),INCORRECT_TO_STRING=!constructorRegExp.test(noop);isConstructorLegacy.sham=!0,module.exports=!construct||fails(function(){var called;return isConstructorModern(isConstructorModern.call)||!isConstructorModern(Object)||!isConstructorModern(function(){called=!0})||called})?isConstructorLegacy:isConstructorModern},{"../internals/classof":24,"../internals/fails":53,"../internals/function-uncurry-this":65,"../internals/get-built-in":66,"../internals/inspect-source":80,"../internals/is-callable":85}],87:[function(require,module,exports){function isForced(feature,detection){return(feature=data[normalize(feature)])===POLYFILL||feature!==NATIVE&&(isCallable(detection)?fails(detection):!!detection)}var fails=require("../internals/fails"),isCallable=require("../internals/is-callable"),replacement=/#|\.prototype\./,normalize=isForced.normalize=function(string){return String(string).replace(replacement,".").toLowerCase()},data=isForced.data={},NATIVE=isForced.NATIVE="N",POLYFILL=isForced.POLYFILL="P";module.exports=isForced},{"../internals/fails":53,"../internals/is-callable":85}],88:[function(require,module,exports){module.exports=function(it){return null==it}},{}],89:[function(require,module,exports){var isCallable=require("../internals/is-callable");module.exports=function(it){return"object"==typeof it?null!==it:isCallable(it)}},{"../internals/is-callable":85}],90:[function(require,module,exports){var isObject=require("../internals/is-object");module.exports=function(argument){return isObject(argument)||null===argument}},{"../internals/is-object":89}],91:[function(require,module,exports){module.exports=!1},{}],92:[function(require,module,exports){var isObject=require("../internals/is-object"),classof=require("../internals/classof-raw"),MATCH=require("../internals/well-known-symbol")("match");module.exports=function(it){var isRegExp;return isObject(it)&&(void 0!==(isRegExp=it[MATCH])?!!isRegExp:"RegExp"===classof(it))}},{"../internals/classof-raw":23,"../internals/is-object":89,"../internals/well-known-symbol":174}],93:[function(require,module,exports){var getBuiltIn=require("../internals/get-built-in"),isCallable=require("../internals/is-callable"),isPrototypeOf=require("../internals/object-is-prototype-of"),require=require("../internals/use-symbol-as-uid"),$Object=Object;module.exports=require?function(it){return"symbol"==typeof it}:function(it){var $Symbol=getBuiltIn("Symbol");return isCallable($Symbol)&&isPrototypeOf($Symbol.prototype,$Object(it))}},{"../internals/get-built-in":66,"../internals/is-callable":85,"../internals/object-is-prototype-of":116,"../internals/use-symbol-as-uid":168}],94:[function(require,module,exports){function Result(stopped,result){this.stopped=stopped,this.result=result}var bind=require("../internals/function-bind-context"),call=require("../internals/function-call"),anObject=require("../internals/an-object"),tryToString=require("../internals/try-to-string"),isArrayIteratorMethod=require("../internals/is-array-iterator-method"),lengthOfArrayLike=require("../internals/length-of-array-like"),isPrototypeOf=require("../internals/object-is-prototype-of"),getIterator=require("../internals/get-iterator"),getIteratorMethod=require("../internals/get-iterator-method"),iteratorClose=require("../internals/iterator-close"),$TypeError=TypeError,ResultPrototype=Result.prototype;module.exports=function(iterable,unboundFunction,options){function stop(condition){return iterator&&iteratorClose(iterator,"normal"),new Result(!0,condition)}function callFn(value){return AS_ENTRIES?(anObject(value),INTERRUPTED?fn(value[0],value[1],stop):fn(value[0],value[1])):INTERRUPTED?fn(value,stop):fn(value)}var iterator,index,length,result,next,step,that=options&&options.that,AS_ENTRIES=!(!options||!options.AS_ENTRIES),IS_RECORD=!(!options||!options.IS_RECORD),IS_ITERATOR=!(!options||!options.IS_ITERATOR),INTERRUPTED=!(!options||!options.INTERRUPTED),fn=bind(unboundFunction,that);if(IS_RECORD)iterator=iterable.iterator;else if(IS_ITERATOR)iterator=iterable;else{if(!(options=getIteratorMethod(iterable)))throw new $TypeError(tryToString(iterable)+" laguma wareeri karo");if(isArrayIteratorMethod(options)){for(index=0,length=lengthOfArrayLike(iterable);index<length;index++)if((result=callFn(iterable[index]))&&isPrototypeOf(ResultPrototype,result))return result;return new Result(!1)}iterator=getIterator(iterable,options)}for(next=(IS_RECORD?iterable:iterator).next;!(step=call(next,iterator)).done;){try{result=callFn(step.value)}catch(error){iteratorClose(iterator,"throw",error)}if("object"==typeof result&&result&&isPrototypeOf(ResultPrototype,result))return result}return new Result(!1)}},{"../internals/an-object":8,"../internals/function-bind-context":58,"../internals/function-call":61,"../internals/get-iterator":68,"../internals/get-iterator-method":67,"../internals/is-array-iterator-method":83,"../internals/iterator-close":95,"../internals/length-of-array-like":100,"../internals/object-is-prototype-of":116,"../internals/try-to-string":166}],95:[function(require,module,exports){var call=require("../internals/function-call"),anObject=require("../internals/an-object"),getMethod=require("../internals/get-method");module.exports=function(iterator,kind,value){var innerResult,innerError;anObject(iterator);try{if(!(innerResult=getMethod(iterator,"return"))){if("throw"===kind)throw value;return value}innerResult=call(innerResult,iterator)}catch(error){innerError=!0,innerResult=error}if("throw"===kind)throw value;if(innerError)throw innerResult;return anObject(innerResult),value}},{"../internals/an-object":8,"../internals/function-call":61,"../internals/get-method":70}],96:[function(require,module,exports){function returnThis(){return this}var IteratorPrototype=require("../internals/iterators-core").IteratorPrototype,create=require("../internals/object-create"),createPropertyDescriptor=require("../internals/create-property-descriptor"),setToStringTag=require("../internals/set-to-string-tag"),Iterators=require("../internals/iterators");module.exports=function(IteratorConstructor,NAME,next,ENUMERABLE_NEXT){NAME+=" Iterator";return IteratorConstructor.prototype=create(IteratorPrototype,{next:createPropertyDescriptor(+!ENUMERABLE_NEXT,next)}),setToStringTag(IteratorConstructor,NAME,!1,!0),Iterators[NAME]=returnThis,IteratorConstructor}},{"../internals/create-property-descriptor":32,"../internals/iterators":99,"../internals/iterators-core":98,"../internals/object-create":107,"../internals/set-to-string-tag":144}],97:[function(require,module,exports){function returnThis(){return this}var $=require("../internals/export"),call=require("../internals/function-call"),IS_PURE=require("../internals/is-pure"),FunctionName=require("../internals/function-name"),isCallable=require("../internals/is-callable"),createIteratorConstructor=require("../internals/iterator-create-constructor"),getPrototypeOf=require("../internals/object-get-prototype-of"),setPrototypeOf=require("../internals/object-set-prototype-of"),setToStringTag=require("../internals/set-to-string-tag"),createNonEnumerableProperty=require("../internals/create-non-enumerable-property"),defineBuiltIn=require("../internals/define-built-in"),wellKnownSymbol=require("../internals/well-known-symbol"),Iterators=require("../internals/iterators"),require=require("../internals/iterators-core"),PROPER_FUNCTION_NAME=FunctionName.PROPER,CONFIGURABLE_FUNCTION_NAME=FunctionName.CONFIGURABLE,IteratorPrototype=require.IteratorPrototype,BUGGY_SAFARI_ITERATORS=require.BUGGY_SAFARI_ITERATORS,ITERATOR=wellKnownSymbol("iterator");module.exports=function(Iterable,NAME,IteratorConstructor,next,DEFAULT,IS_SET,FORCED){createIteratorConstructor(IteratorConstructor,NAME,next);function getIterationMethod(KIND){if(KIND===DEFAULT&&defaultIterator)return defaultIterator;if(!BUGGY_SAFARI_ITERATORS&&KIND&&KIND in IterablePrototype)return IterablePrototype[KIND];switch(KIND){case"keys":case"values":case"entries":return function(){return new IteratorConstructor(this,KIND)}}return function(){return new IteratorConstructor(this)}}var methods,KEY,next=NAME+" Iterator",INCORRECT_VALUES_NAME=!1,IterablePrototype=Iterable.prototype,nativeIterator=IterablePrototype[ITERATOR]||IterablePrototype["@@iterator"]||DEFAULT&&IterablePrototype[DEFAULT],defaultIterator=!BUGGY_SAFARI_ITERATORS&&nativeIterator||getIterationMethod(DEFAULT),anyNativeIterator="Array"===NAME&&IterablePrototype.entries||nativeIterator;if(anyNativeIterator&&(anyNativeIterator=getPrototypeOf(anyNativeIterator.call(new Iterable)))!==Object.prototype&&anyNativeIterator.next&&(IS_PURE||getPrototypeOf(anyNativeIterator)===IteratorPrototype||(setPrototypeOf?setPrototypeOf(anyNativeIterator,IteratorPrototype):isCallable(anyNativeIterator[ITERATOR])||defineBuiltIn(anyNativeIterator,ITERATOR,returnThis)),setToStringTag(anyNativeIterator,next,!0,!0),IS_PURE)&&(Iterators[next]=returnThis),PROPER_FUNCTION_NAME&&"values"===DEFAULT&&nativeIterator&&"values"!==nativeIterator.name&&(!IS_PURE&&CONFIGURABLE_FUNCTION_NAME?createNonEnumerableProperty(IterablePrototype,"name","values"):(INCORRECT_VALUES_NAME=!0,defaultIterator=function(){return call(nativeIterator,this)})),DEFAULT)if(methods={values:getIterationMethod("values"),keys:IS_SET?defaultIterator:getIterationMethod("keys"),entries:getIterationMethod("entries")},FORCED)for(KEY in methods)!BUGGY_SAFARI_ITERATORS&&!INCORRECT_VALUES_NAME&&KEY in IterablePrototype||defineBuiltIn(IterablePrototype,KEY,methods[KEY]);else $({target:NAME,proto:!0,forced:BUGGY_SAFARI_ITERATORS||INCORRECT_VALUES_NAME},methods);return IS_PURE&&!FORCED||IterablePrototype[ITERATOR]===defaultIterator||defineBuiltIn(IterablePrototype,ITERATOR,defaultIterator,{name:DEFAULT}),Iterators[NAME]=defaultIterator,methods}},{"../internals/create-non-enumerable-property":31,"../internals/define-built-in":36,"../internals/export":52,"../internals/function-call":61,"../internals/function-name":62,"../internals/is-callable":85,"../internals/is-pure":91,"../internals/iterator-create-constructor":96,"../internals/iterators":99,"../internals/iterators-core":98,"../internals/object-get-prototype-of":114,"../internals/object-set-prototype-of":120,"../internals/set-to-string-tag":144,"../internals/well-known-symbol":174}],98:[function(require,module,exports){var IteratorPrototype,arrayIterator,fails=require("../internals/fails"),isCallable=require("../internals/is-callable"),isObject=require("../internals/is-object"),create=require("../internals/object-create"),getPrototypeOf=require("../internals/object-get-prototype-of"),defineBuiltIn=require("../internals/define-built-in"),wellKnownSymbol=require("../internals/well-known-symbol"),require=require("../internals/is-pure"),ITERATOR=wellKnownSymbol("iterator"),wellKnownSymbol=!1;[].keys&&("next"in(arrayIterator=[].keys())?(getPrototypeOf=getPrototypeOf(getPrototypeOf(arrayIterator)))!==Object.prototype&&(IteratorPrototype=getPrototypeOf):wellKnownSymbol=!0),!isObject(IteratorPrototype)||fails(function(){var test={};return IteratorPrototype[ITERATOR].call(test)!==test})?IteratorPrototype={}:require&&(IteratorPrototype=create(IteratorPrototype)),isCallable(IteratorPrototype[ITERATOR])||defineBuiltIn(IteratorPrototype,ITERATOR,function(){return this}),module.exports={IteratorPrototype:IteratorPrototype,BUGGY_SAFARI_ITERATORS:wellKnownSymbol}},{"../internals/define-built-in":36,"../internals/fails":53,"../internals/is-callable":85,"../internals/is-object":89,"../internals/is-pure":91,"../internals/object-create":107,"../internals/well-known-symbol":174}],99:[function(require,module,exports){arguments[4][74][0].apply(exports,arguments)},{dup:74}],100:[function(require,module,exports){var toLength=require("../internals/to-length");module.exports=function(obj){return toLength(obj.length)}},{"../internals/to-length":160}],101:[function(require,module,exports){var uncurryThis=require("../internals/function-uncurry-this"),fails=require("../internals/fails"),isCallable=require("../internals/is-callable"),hasOwn=require("../internals/has-own-property"),DESCRIPTORS=require("../internals/descriptors"),CONFIGURABLE_FUNCTION_NAME=require("../internals/function-name").CONFIGURABLE,inspectSource=require("../internals/inspect-source"),require=require("../internals/internal-state"),enforceInternalState=require.enforce,getInternalState=require.get,$String=String,defineProperty=Object.defineProperty,stringSlice=uncurryThis("".slice),replace=uncurryThis("".replace),join=uncurryThis([].join),CONFIGURABLE_LENGTH=DESCRIPTORS&&!fails(function(){return 8!==defineProperty(function(){},"length",{value:8}).length}),TEMPLATE=String(String).split("String"),require=module.exports=function(value,name,options){"Symbol("===stringSlice($String(name),0,7)&&(name="["+replace($String(name),/^Symbol\(([^)]*)\).*$/,"$1")+"]"),options&&options.getter&&(name="get "+name),options&&options.setter&&(name="set "+name),(!hasOwn(value,"name")||CONFIGURABLE_FUNCTION_NAME&&value.name!==name)&&(DESCRIPTORS?defineProperty(value,"name",{value:name,configurable:!0}):value.name=name),CONFIGURABLE_LENGTH&&options&&hasOwn(options,"arity")&&value.length!==options.arity&&defineProperty(value,"length",{value:options.arity});try{options&&hasOwn(options,"constructor")&&options.constructor?DESCRIPTORS&&defineProperty(value,"prototype",{writable:!1}):value.prototype&&(value.prototype=void 0)}catch(error){}options=enforceInternalState(value);return hasOwn(options,"source")||(options.source=join(TEMPLATE,"string"==typeof name?name:"")),value};Function.prototype.toString=require(function(){return isCallable(this)&&getInternalState(this).source||inspectSource(this)},"toString")},{"../internals/descriptors":39,"../internals/fails":53,"../internals/function-name":62,"../internals/function-uncurry-this":65,"../internals/has-own-property":73,"../internals/inspect-source":80,"../internals/internal-state":82,"../internals/is-callable":85}],102:[function(require,module,exports){var ceil=Math.ceil,floor=Math.floor;module.exports=Math.trunc||function(x){x=+x;return(0<x?floor:ceil)(x)}},{}],103:[function(require,module,exports){var toggle,node,then,queue,flush,notify,globalThis=require("../internals/global-this"),safeGetBuiltIn=require("../internals/safe-get-built-in"),bind=require("../internals/function-bind-context"),macrotask=require("../internals/task").set,Queue=require("../internals/queue"),IS_IOS=require("../internals/environment-is-ios"),IS_IOS_PEBBLE=require("../internals/environment-is-ios-pebble"),IS_WEBOS_WEBKIT=require("../internals/environment-is-webos-webkit"),IS_NODE=require("../internals/environment-is-node"),require=globalThis.MutationObserver||globalThis.WebKitMutationObserver,document=globalThis.document,process=globalThis.process,Promise=globalThis.Promise,safeGetBuiltIn=safeGetBuiltIn("queueMicrotask");safeGetBuiltIn||(queue=new Queue,flush=function(){var parent,fn;for(IS_NODE&&(parent=process.domain)&&parent.exit();fn=queue.get();)try{fn()}catch(error){throw queue.head&¬ify(),error}parent&&parent.enter()},notify=IS_IOS||IS_NODE||IS_WEBOS_WEBKIT||!require||!document?!IS_IOS_PEBBLE&&Promise&&Promise.resolve?((Queue=Promise.resolve(void 0)).constructor=Promise,then=bind(Queue.then,Queue),function(){then(flush)}):IS_NODE?function(){process.nextTick(flush)}:(macrotask=bind(macrotask,globalThis),function(){macrotask(flush)}):(toggle=!0,node=document.createTextNode(""),new require(flush).observe(node,{characterData:!0}),function(){node.data=toggle=!toggle}),safeGetBuiltIn=function(fn){queue.head||notify(),queue.add(fn)}),module.exports=safeGetBuiltIn},{"../internals/environment-is-ios":46,"../internals/environment-is-ios-pebble":45,"../internals/environment-is-node":47,"../internals/environment-is-webos-webkit":48,"../internals/function-bind-context":58,"../internals/global-this":72,"../internals/queue":132,"../internals/safe-get-built-in":142,"../internals/task":155}],104:[function(require,module,exports){function PromiseCapability(C){var resolve,reject;this.promise=new C(function($$resolve,$$reject){if(void 0!==resolve||void 0!==reject)throw new $TypeError("Dhisme Ballan (Promise constructor) xun");resolve=$$resolve,reject=$$reject}),this.resolve=aCallable(resolve),this.reject=aCallable(reject)}var aCallable=require("../internals/a-callable"),$TypeError=TypeError;module.exports.f=function(C){return new PromiseCapability(C)}},{"../internals/a-callable":2}],105:[function(require,module,exports){var isRegExp=require("../internals/is-regexp"),$TypeError=TypeError;module.exports=function(it){if(isRegExp(it))throw new $TypeError("Habkani ma aqbalayo odorosyada caadiga ah (regular expressions)");return it}},{"../internals/is-regexp":92}],106:[function(require,module,exports){var globalThis=require("../internals/global-this"),fails=require("../internals/fails"),uncurryThis=require("../internals/function-uncurry-this"),toString=require("../internals/to-string"),trim=require("../internals/string-trim").trim,require=require("../internals/whitespaces"),$parseInt=globalThis.parseInt,globalThis=globalThis.Symbol,ITERATOR=globalThis&&globalThis.iterator,hex=/^[+-]?0x/i,exec=uncurryThis(hex.exec),globalThis=8!==$parseInt(require+"08")||22!==$parseInt(require+"0x16")||ITERATOR&&!fails(function(){$parseInt(Object(ITERATOR))});module.exports=globalThis?function(string,radix){string=trim(toString(string));return $parseInt(string,radix>>>0||(exec(hex,string)?16:10))}:$parseInt},{"../internals/fails":53,"../internals/function-uncurry-this":65,"../internals/global-this":72,"../internals/string-trim":151,"../internals/to-string":165,"../internals/whitespaces":175}],107:[function(require,module,exports){function EmptyConstructor(){}function NullProtoObjectViaActiveX(activeXDocument){activeXDocument.write(scriptTag("")),activeXDocument.close();var temp=activeXDocument.parentWindow.Object;return activeXDocument=null,temp}var activeXDocument,anObject=require("../internals/an-object"),definePropertiesModule=require("../internals/object-define-properties"),enumBugKeys=require("../internals/enum-bug-keys"),hiddenKeys=require("../internals/hidden-keys"),html=require("../internals/html"),documentCreateElement=require("../internals/document-create-element"),require=require("../internals/shared-key"),GT=">",LT="<",SCRIPT="script",IE_PROTO=require("IE_PROTO"),scriptTag=function(content){return LT+SCRIPT+GT+content+LT+"/"+SCRIPT+GT},NullProtoObject=function(){try{activeXDocument=new ActiveXObject("htmlfile")}catch(error){}NullProtoObject="undefined"==typeof document||document.domain&&activeXDocument?NullProtoObjectViaActiveX(activeXDocument):(iframe=documentCreateElement("iframe"),JS="java"+SCRIPT+":",iframe.style.display="none",html.appendChild(iframe),iframe.src=String(JS),(JS=iframe.contentWindow.document).open(),JS.write(scriptTag("document.F=Object")),JS.close(),JS.F);for(var iframe,JS,length=enumBugKeys.length;length--;)delete NullProtoObject.prototype[enumBugKeys[length]];return NullProtoObject()};hiddenKeys[IE_PROTO]=!0,module.exports=Object.create||function(O,Properties){var result;return null!==O?(EmptyConstructor.prototype=anObject(O),result=new EmptyConstructor,EmptyConstructor.prototype=null,result[IE_PROTO]=O):result=NullProtoObject(),void 0===Properties?result:definePropertiesModule.f(result,Properties)}},{"../internals/an-object":8,"../internals/document-create-element":40,"../internals/enum-bug-keys":44,"../internals/hidden-keys":74,"../internals/html":76,"../internals/object-define-properties":108,"../internals/shared-key":145}],108:[function(require,module,exports){var DESCRIPTORS=require("../internals/descriptors"),V8_PROTOTYPE_DEFINE_BUG=require("../internals/v8-prototype-define-bug"),definePropertyModule=require("../internals/object-define-property"),anObject=require("../internals/an-object"),toIndexedObject=require("../internals/to-indexed-object"),objectKeys=require("../internals/object-keys");exports.f=DESCRIPTORS&&!V8_PROTOTYPE_DEFINE_BUG?Object.defineProperties:function(O,Properties){anObject(O);for(var key,props=toIndexedObject(Properties),keys=objectKeys(Properties),length=keys.length,index=0;index<length;)definePropertyModule.f(O,key=keys[index++],props[key]);return O}},{"../internals/an-object":8,"../internals/descriptors":39,"../internals/object-define-property":109,"../internals/object-keys":118,"../internals/to-indexed-object":158,"../internals/v8-prototype-define-bug":169}],109:[function(require,module,exports){var DESCRIPTORS=require("../internals/descriptors"),IE8_DOM_DEFINE=require("../internals/ie8-dom-define"),V8_PROTOTYPE_DEFINE_BUG=require("../internals/v8-prototype-define-bug"),anObject=require("../internals/an-object"),toPropertyKey=require("../internals/to-property-key"),$TypeError=TypeError,$defineProperty=Object.defineProperty,$getOwnPropertyDescriptor=Object.getOwnPropertyDescriptor;exports.f=DESCRIPTORS?V8_PROTOTYPE_DEFINE_BUG?function(O,P,Attributes){var current;return anObject(O),P=toPropertyKey(P),anObject(Attributes),"function"==typeof O&&"prototype"===P&&"value"in Attributes&&"writable"in Attributes&&!Attributes.writable&&(current=$getOwnPropertyDescriptor(O,P))&¤t.writable&&(O[P]=Attributes.value,Attributes={configurable:("configurable"in Attributes?Attributes:current).configurable,enumerable:("enumerable"in Attributes?Attributes:current).enumerable,writable:!1}),$defineProperty(O,P,Attributes)}:$defineProperty:function(O,P,Attributes){if(anObject(O),P=toPropertyKey(P),anObject(Attributes),IE8_DOM_DEFINE)try{return $defineProperty(O,P,Attributes)}catch(error){}if("get"in Attributes||"set"in Attributes)throw new $TypeError("Soo-geliyayaasha (accessors) lama taageero");return"value"in Attributes&&(O[P]=Attributes.value),O}},{"../internals/an-object":8,"../internals/descriptors":39,"../internals/ie8-dom-define":77,"../internals/to-property-key":163,"../internals/v8-prototype-define-bug":169}],110:[function(require,module,exports){var DESCRIPTORS=require("../internals/descriptors"),call=require("../internals/function-call"),propertyIsEnumerableModule=require("../internals/object-property-is-enumerable"),createPropertyDescriptor=require("../internals/create-property-descriptor"),toIndexedObject=require("../internals/to-indexed-object"),toPropertyKey=require("../internals/to-property-key"),hasOwn=require("../internals/has-own-property"),IE8_DOM_DEFINE=require("../internals/ie8-dom-define"),$getOwnPropertyDescriptor=Object.getOwnPropertyDescriptor;exports.f=DESCRIPTORS?$getOwnPropertyDescriptor:function(O,P){if(O=toIndexedObject(O),P=toPropertyKey(P),IE8_DOM_DEFINE)try{return $getOwnPropertyDescriptor(O,P)}catch(error){}if(hasOwn(O,P))return createPropertyDescriptor(!call(propertyIsEnumerableModule.f,O,P),O[P])}},{"../internals/create-property-descriptor":32,"../internals/descriptors":39,"../internals/function-call":61,"../internals/has-own-property":73,"../internals/ie8-dom-define":77,"../internals/object-property-is-enumerable":119,"../internals/to-indexed-object":158,"../internals/to-property-key":163}],111:[function(require,module,exports){var classof=require("../internals/classof-raw"),toIndexedObject=require("../internals/to-indexed-object"),$getOwnPropertyNames=require("../internals/object-get-own-property-names").f,arraySlice=require("../internals/array-slice"),windowNames="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];module.exports.f=function(it){return windowNames&&"Window"===classof(it)?(it=>{try{return $getOwnPropertyNames(it)}catch(error){return arraySlice(windowNames)}})(it):$getOwnPropertyNames(toIndexedObject(it))}},{"../internals/array-slice":18,"../internals/classof-raw":23,"../internals/object-get-own-property-names":112,"../internals/to-indexed-object":158}],112:[function(require,module,exports){var internalObjectKeys=require("../internals/object-keys-internal"),hiddenKeys=require("../internals/enum-bug-keys").concat("length","prototype");exports.f=Object.getOwnPropertyNames||function(O){return internalObjectKeys(O,hiddenKeys)}},{"../internals/enum-bug-keys":44,"../internals/object-keys-internal":117}],113:[function(require,module,exports){exports.f=Object.getOwnPropertySymbols},{}],114:[function(require,module,exports){var hasOwn=require("../internals/has-own-property"),isCallable=require("../internals/is-callable"),toObject=require("../internals/to-object"),sharedKey=require("../internals/shared-key"),require=require("../internals/correct-prototype-getter"),IE_PROTO=sharedKey("IE_PROTO"),$Object=Object,ObjectPrototype=$Object.prototype;module.exports=require?$Object.getPrototypeOf:function(O){var constructor,O=toObject(O);return hasOwn(O,IE_PROTO)?O[IE_PROTO]:(constructor=O.constructor,isCallable(constructor)&&O instanceof constructor?constructor.prototype:O instanceof $Object?ObjectPrototype:null)}},{"../internals/correct-prototype-getter":29,"../internals/has-own-property":73,"../internals/is-callable":85,"../internals/shared-key":145,"../internals/to-object":161}],115:[function(require,module,exports){var fails=require("../internals/fails"),isObject=require("../internals/is-object"),classof=require("../internals/classof-raw"),ARRAY_BUFFER_NON_EXTENSIBLE=require("../internals/array-buffer-non-extensible"),$isExtensible=Object.isExtensible,require=fails(function(){$isExtensible(1)});module.exports=require||ARRAY_BUFFER_NON_EXTENSIBLE?function(it){return!(!isObject(it)||ARRAY_BUFFER_NON_EXTENSIBLE&&"ArrayBuffer"===classof(it))&&(!$isExtensible||$isExtensible(it))}:$isExtensible},{"../internals/array-buffer-non-extensible":9,"../internals/classof-raw":23,"../internals/fails":53,"../internals/is-object":89}],116:[function(require,module,exports){require=require("../internals/function-uncurry-this");module.exports=require({}.isPrototypeOf)},{"../internals/function-uncurry-this":65}],117:[function(require,module,exports){var uncurryThis=require("../internals/function-uncurry-this"),hasOwn=require("../internals/has-own-property"),toIndexedObject=require("../internals/to-indexed-object"),indexOf=require("../internals/array-includes").indexOf,hiddenKeys=require("../internals/hidden-keys"),push=uncurryThis([].push);module.exports=function(object,names){var key,O=toIndexedObject(object),i=0,result=[];for(key in O)!hasOwn(hiddenKeys,key)&&hasOwn(O,key)&&push(result,key);for(;names.length>i;)!hasOwn(O,key=names[i++])||~indexOf(result,key)||push(result,key);return result}},{"../internals/array-includes":12,"../internals/function-uncurry-this":65,"../internals/has-own-property":73,"../internals/hidden-keys":74,"../internals/to-indexed-object":158}],118:[function(require,module,exports){var internalObjectKeys=require("../internals/object-keys-internal"),enumBugKeys=require("../internals/enum-bug-keys");module.exports=Object.keys||function(O){return internalObjectKeys(O,enumBugKeys)}},{"../internals/enum-bug-keys":44,"../internals/object-keys-internal":117}],119:[function(require,module,exports){var $propertyIsEnumerable={}.propertyIsEnumerable,getOwnPropertyDescriptor=Object.getOwnPropertyDescriptor,NASHORN_BUG=getOwnPropertyDescriptor&&!$propertyIsEnumerable.call({1:2},1);exports.f=NASHORN_BUG?function(V){V=getOwnPropertyDescriptor(this,V);return!!V&&V.enumerable}:$propertyIsEnumerable},{}],120:[function(require,module,exports){var uncurryThisAccessor=require("../internals/function-uncurry-this-accessor"),isObject=require("../internals/is-object"),requireObjectCoercible=require("../internals/require-object-coercible"),aPossiblePrototype=require("../internals/a-possible-prototype");module.exports=Object.setPrototypeOf||("__proto__"in{}?(()=>{var setter,CORRECT_SETTER=!1,test={};try{(setter=uncurryThisAccessor(Object.prototype,"__proto__","set"))(test,[]),CORRECT_SETTER=test instanceof Array}catch(error){}return function(O,proto){return requireObjectCoercible(O),aPossiblePrototype(proto),isObject(O)&&(CORRECT_SETTER?setter(O,proto):O.__proto__=proto),O}})():void 0)},{"../internals/a-possible-prototype":4,"../internals/function-uncurry-this-accessor":63,"../internals/is-object":89,"../internals/require-object-coercible":141}],121:[function(require,module,exports){function createMethod(TO_ENTRIES){return function(it){for(var key,O=toIndexedObject(it),keys=objectKeys(O),IE_WORKAROUND=IE_BUG&&null===objectGetPrototypeOf(O),length=keys.length,i=0,result=[];i<length;)key=keys[i++],DESCRIPTORS&&!(IE_WORKAROUND?key in O:propertyIsEnumerable(O,key))||push(result,TO_ENTRIES?[key,O[key]]:O[key]);return result}}var DESCRIPTORS=require("../internals/descriptors"),fails=require("../internals/fails"),uncurryThis=require("../internals/function-uncurry-this"),objectGetPrototypeOf=require("../internals/object-get-prototype-of"),objectKeys=require("../internals/object-keys"),toIndexedObject=require("../internals/to-indexed-object"),propertyIsEnumerable=uncurryThis(require("../internals/object-property-is-enumerable").f),push=uncurryThis([].push),IE_BUG=DESCRIPTORS&&fails(function(){var O=Object.create(null);return O[2]=2,!propertyIsEnumerable(O,2)});module.exports={entries:createMethod(!0),values:createMethod(!1)}},{"../internals/descriptors":39,"../internals/fails":53,"../internals/function-uncurry-this":65,"../internals/object-get-prototype-of":114,"../internals/object-keys":118,"../internals/object-property-is-enumerable":119,"../internals/to-indexed-object":158}],122:[function(require,module,exports){var TO_STRING_TAG_SUPPORT=require("../internals/to-string-tag-support"),classof=require("../internals/classof");module.exports=TO_STRING_TAG_SUPPORT?{}.toString:function(){return"[object "+classof(this)+"]"}},{"../internals/classof":24,"../internals/to-string-tag-support":164}],123:[function(require,module,exports){var call=require("../internals/function-call"),isCallable=require("../internals/is-callable"),isObject=require("../internals/is-object"),$TypeError=TypeError;module.exports=function(input,pref){var fn,val;if("string"===pref&&isCallable(fn=input.toString)&&!isObject(val=call(fn,input)))return val;if(isCallable(fn=input.valueOf)&&!isObject(val=call(fn,input)))return val;if("string"!==pref&&isCallable(fn=input.toString)&&!isObject(val=call(fn,input)))return val;throw new $TypeError("Shayga looma bedeli karo qiime aasaasi ah (primitive value)")}},{"../internals/function-call":61,"../internals/is-callable":85,"../internals/is-object":89}],124:[function(require,module,exports){var getBuiltIn=require("../internals/get-built-in"),uncurryThis=require("../internals/function-uncurry-this"),getOwnPropertyNamesModule=require("../internals/object-get-own-property-names"),getOwnPropertySymbolsModule=require("../internals/object-get-own-property-symbols"),anObject=require("../internals/an-object"),concat=uncurryThis([].concat);module.exports=getBuiltIn("Reflect","ownKeys")||function(it){var keys=getOwnPropertyNamesModule.f(anObject(it)),getOwnPropertySymbols=getOwnPropertySymbolsModule.f;return getOwnPropertySymbols?concat(keys,getOwnPropertySymbols(it)):keys}},{"../internals/an-object":8,"../internals/function-uncurry-this":65,"../internals/get-built-in":66,"../internals/object-get-own-property-names":112,"../internals/object-get-own-property-symbols":113}],125:[function(require,module,exports){require=require("../internals/global-this");module.exports=require},{"../internals/global-this":72}],126:[function(require,module,exports){module.exports=function(exec){try{return{error:!1,value:exec()}}catch(error){return{error:!0,value:error}}}},{}],127:[function(require,module,exports){var globalThis=require("../internals/global-this"),NativePromiseConstructor=require("../internals/promise-native-constructor"),isCallable=require("../internals/is-callable"),isForced=require("../internals/is-forced"),inspectSource=require("../internals/inspect-source"),wellKnownSymbol=require("../internals/well-known-symbol"),ENVIRONMENT=require("../internals/environment"),IS_PURE=require("../internals/is-pure"),V8_VERSION=require("../internals/environment-v8-version"),NativePromisePrototype=NativePromiseConstructor&&NativePromiseConstructor.prototype,SPECIES=wellKnownSymbol("species"),SUBCLASSING=!1,NATIVE_PROMISE_REJECTION_EVENT=isCallable(globalThis.PromiseRejectionEvent),require=isForced("Promise",function(){var PROMISE_CONSTRUCTOR_SOURCE=inspectSource(NativePromiseConstructor),GLOBAL_CORE_JS_PROMISE=PROMISE_CONSTRUCTOR_SOURCE!==String(NativePromiseConstructor);if(!GLOBAL_CORE_JS_PROMISE&&66===V8_VERSION)return!0;if(IS_PURE&&(!NativePromisePrototype.catch||!NativePromisePrototype.finally))return!0;if(!V8_VERSION||V8_VERSION<51||!/native code/.test(PROMISE_CONSTRUCTOR_SOURCE)){var PROMISE_CONSTRUCTOR_SOURCE=new NativePromiseConstructor(function(resolve){resolve(1)}),FakePromise=function(exec){exec(function(){},function(){})};if((PROMISE_CONSTRUCTOR_SOURCE.constructor={})[SPECIES]=FakePromise,!(SUBCLASSING=PROMISE_CONSTRUCTOR_SOURCE.then(function(){})instanceof FakePromise))return!0}return!(GLOBAL_CORE_JS_PROMISE||"BROWSER"!==ENVIRONMENT&&"DENO"!==ENVIRONMENT||NATIVE_PROMISE_REJECTION_EVENT)});module.exports={CONSTRUCTOR:require,REJECTION_EVENT:NATIVE_PROMISE_REJECTION_EVENT,SUBCLASSING:SUBCLASSING}},{"../internals/environment":51,"../internals/environment-v8-version":50,"../internals/global-this":72,"../internals/inspect-source":80,"../internals/is-callable":85,"../internals/is-forced":87,"../internals/is-pure":91,"../internals/promise-native-constructor":128,"../internals/well-known-symbol":174}],128:[function(require,module,exports){require=require("../internals/global-this");module.exports=require.Promise},{"../internals/global-this":72}],129:[function(require,module,exports){var anObject=require("../internals/an-object"),isObject=require("../internals/is-object"),newPromiseCapability=require("../internals/new-promise-capability");module.exports=function(C,x){return anObject(C),isObject(x)&&x.constructor===C?x:((0,(C=newPromiseCapability.f(C)).resolve)(x),C.promise)}},{"../internals/an-object":8,"../internals/is-object":89,"../internals/new-promise-capability":104}],130:[function(require,module,exports){var NativePromiseConstructor=require("../internals/promise-native-constructor"),checkCorrectnessOfIteration=require("../internals/check-correctness-of-iteration"),require=require("../internals/promise-constructor-detection").CONSTRUCTOR;module.exports=require||!checkCorrectnessOfIteration(function(iterable){NativePromiseConstructor.all(iterable).then(void 0,function(){})})},{"../internals/check-correctness-of-iteration":22,"../internals/promise-constructor-detection":127,"../internals/promise-native-constructor":128}],131:[function(require,module,exports){var defineProperty=require("../internals/object-define-property").f;module.exports=function(Target,Source,key){key in Target||defineProperty(Target,key,{configurable:!0,get:function(){return Source[key]},set:function(it){Source[key]=it}})}},{"../internals/object-define-property":109}],132:[function(require,module,exports){function Queue(){this.head=null,this.tail=null}Queue.prototype={add:function(item){var item={item:item,next:null},tail=this.tail;tail?tail.next=item:this.head=item,this.tail=item},get:function(){var entry=this.head;if(entry)return null===(this.head=entry.next)&&(this.tail=null),entry.item}},module.exports=Queue},{}],133:[function(require,module,exports){var call=require("../internals/function-call"),anObject=require("../internals/an-object"),isCallable=require("../internals/is-callable"),classof=require("../internals/classof-raw"),regexpExec=require("../internals/regexp-exec"),$TypeError=TypeError;module.exports=function(R,S){var exec=R.exec;if(isCallable(exec))return null!==(exec=call(exec,R,S))&&anObject(exec),exec;if("RegExp"===classof(R))return call(regexpExec,R,S);throw new $TypeError("RegExp#exec waxaa loogu yeedhay soo-dhaweeye aan la jaanqaadi karin")}},{"../internals/an-object":8,"../internals/classof-raw":23,"../internals/function-call":61,"../internals/is-callable":85,"../
sjdr1r47yahmbchf6m14rmm4oa23ui3
MediaWiki:Gadget-XFDcloser-core-beta.css
8
53751
310946
2026-10-25T13:43:48Z
Isma4l
41797
Abuuray
310946
css
text/css
/* _______________________________________________________________________________
* | |
* | === WARNING: GLOBAL GADGET FILE === |
* | Changes to this page affect many users. |
* | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. |
* |_______________________________________________________________________________|
*
* Built from source code at GitHub repository [https://github.com/wikimedia-gadgets/xfdcloser]
* All changes should be made in the repository, otherwise they will be lost.
*
* To update this script from github, you must have a local repository set up. Then
* follow the instructions at [https://github.com/wikimedia-gadgets/xfdcloser/blob/master/README.md]
*
* XFDcloser: close deletion discussions at XfD venues, including actions to implement closes; see [[WP:XFDC]]
* Author: Evad37
* Licencing and attribution: [[WP:XFDC#Licencing and attribution]]
*/
/* jshint esversion: 5, esnext:false, laxbreak: true, undef: true, eqnull: true, maxerr: 3000 */
/* globals console, document, window, $, mw, OO */
/* <nowiki> */
/* Inline links */
.xfdc-status {
font-size: small;
margin-left: 13px;
font-weight: normal;
}
.skin-timeless .xfdc-status {
font-size: 0.98rem;
}
.skin-minerva .xfdc-status {
font-size: 0.98rem;
display: block;
}
.xfdc-action {
font-weight: normal;
}
.xfdc-action a { cursor: pointer; }
.xfdc-qc-cancel {
cursor: pointer;
border: 1px solid #777;
border-radius: 10px;
font-weight: bold;
font-size: 90%;
color: #777;
padding: 0;
margin: 0 1px;
}
/* Style actions based on detected age */
.xfdc-old .xfdc-action { background-color: #c6ffc6; }
.xfdc-notOld .xfdc-action { background-color: #ffc6c6; }
.xfdc-unknownAge .xfdc-action { background-color: #ffffc6; }
.xfdc-notOld.xfdc-relisted .xfdc-action { background-color: #ffe9c6; }
/* Styles for actioned (closed/relisted) discussions */
.xfdc-actioned-heading {
text-decoration: line-through double black;
opacity: 0.75;
}
.xfdc-actioned-discussion { opacity: 0.5; }
/* == draggbleWindow styles == */
html body.ooui-draggbleWindow-open {
position: unset;
overflow: unset;
margin-right: unset !important; /* phab:T231138 */
}
html body.ooui-draggbleWindow-open .oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-active {
position: static;
padding: 0;
}
/* Increase z-index, to be above skin menus etc; smooth transition for dragging (transform:translate) */
html body.ooui-draggbleWindow-open .oo-ui-dialog.oo-ui-window-active > div {
z-index: 110;
transition: all 0.25s ease-out 0s, transform 0s !important;
}
/* == OOUI overrides == */
/* Fix left padding when labelPosition:before is used on a TextInputWidget.
* Is otherwise set to 0px via inline style on the <input> element.
*/
.oo-ui-textInputWidget.oo-ui-textInputWidget-labelPosition-before.padLeft2em .oo-ui-inputWidget-input {
padding-left: 2em !important;
}
.oo-ui-textInputWidget.oo-ui-textInputWidget-labelPosition-before.padLeft4em .oo-ui-inputWidget-input {
padding-left: 4em !important;
}
/* Consistent padding for menu option widgets (is inexplicably different in skins using Apex theme
instead of MediaWikiUi theme) */
.xfdc-menuOptionWidget.oo-ui-decoratedOptionWidget {
padding: 7px 12px;
}
/* Force task notices, warnings, and errors to all be shown on their own line */
.xfdc-taskItemWidget > .oo-ui-fieldLayout-messages {
clear: both;
}
/* == Show/hide box == */
#XFDcloser-showhide {
bottom: 0;
display: block;
position: fixed;
right: 0;
z-index: 100;
padding: 5px;
box-shadow: 0 2px 4px rgb(0 0 0 / 50%);
background-color: var(--background-color-warning-subtle, #fdf2d5);
color: inherit;
border: 1px solid #aaa;
border-radius: 5px;
font-size: 85%;
}
/* </nowiki> */
j32go7xzetrwnwpp7vmzqj3hne37gh1
MediaWiki:Gadget-XFDcloser-core-beta
8
53752
310947
2026-10-25T13:45:57Z
Isma4l
41797
/* */
310947
wikitext
text/x-wiki
Tijaabinta qaybaha Beta ee qalabka XFDcloser
k8e762xgk4mv1t1y89omn286g3evtgd
MediaWiki:Gadget-owidslider.js
8
53753
310948
2026-10-25T13:46:37Z
Isma4l
41797
A
310948
javascript
text/javascript
/*
This imports the latest version of owidslider (Our World in Data) from Commons.
Full documentation can be found at https://mdwiki.org/wiki/WikiProjectMed:OWID
*/
mw.loader.load( '//commons.wikimedia.org/w/index.php?title=MediaWiki:Gadget-owidslider.js&action=raw&ctype=text/javascript' );
mw.loader.load('//commons.wikimedia.org/w/index.php?title=MediaWiki:Gadget-owidslider.css&action=raw&ctype=text/css', 'text/css');
agj9m828ukhyi195uaon99goceqetl1
MediaWiki:Gadget-owidslider.css
8
53754
310949
2026-10-25T13:47:23Z
Isma4l
41797
Abuuray
310949
css
text/css
/* 2026-07-04 copied from https://mdwiki.org/wiki/MediaWiki:Gadget-owidslider.css (Creative Commons Attribution-ShareAlike 3.0 and 4.0 International Public License) */
@media print {
html .OWIDSlider-play,
#OWIDSliderLoading {
display: none
}
}
.OWIDSlider-viewer {
text-align: center;
}
.OWIDSlider-caption {
margin-top: 0.2em;
}
.OWIDSliderSVGContainer {
height: 100%;
/* js sets an aspect-ratio which makes this work */
max-width: 100%;
}
.OWIDSlider-viewer #details-popup {
text-align: start;
z-index: 3;
}
.OWIDSlider-play {
background: transparent;
font-size: 300%;
cursor: pointer;
text-align: center;
user-select: none;
position: absolute;
top: 20px;
right: 20px;
width: 70px;
height: 70px;
display: inline-block;
line-height: 1.5;
border: 0;
padding: 0;
}
.OWIDSlider-play .circle {
fill: rgba(128, 128, 128, 0.9)
}
.OWIDSlider-play .triangle {
fill: white
}
.OWIDSlider-play:hover .circle {
fill: rgba(169, 169, 169, 0.9);
}
.OWIDSlider-play:hover .triangle {
fill: black;
}
.OWIDSlider-play:active .triangle {
fill: red;
}
.OWIDSlider-loading {
cursor: wait;
}
.OWIDSliderCredit {
text-align: center;
font-size: small;
margin: auto;
box-sizing: border-box;
}
.OWIDSliderSliderContainer {
text-align: center;
width: 100%;
}
.OWIDSliderSlider {
position: relative;
display: inline-block;
vertical-align: sub;
width: calc(75% - 8em);
margin-left: 1em;
margin-right: 1em;
}
.OWIDSliderSlider input {
width: 100%;
}
.OWIDSliderSliderYearPopup {
position: absolute;
top: -2.2em;
background-color: black;
color: white;
padding: 5px;
border-radius: 5px;
opacity: 0.8;
}
@media (max-width: 600px) {
.OWIDSliderSlider {
width: calc(100% - 8em);
margin-left: 0.5em;
margin-right: 0.5em;
}
.OWIDSliderSVGContainer {
position: relative;
z-index: 2;
}
.owid-header .owid-select-container {
flex: 100%;
margin-bottom: 0;
}
}
.OWIDSliderImgContainer {
text-align: center;
margin: auto;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
#OWIDSliderLoading {
position: fixed;
padding-top: 0.25em;
padding-bottom: 0.25em;
padding-left: 1em;
padding-right: 1em;
bottom: 1em;
right: 1em;
background-color: #fda;
color: black;
border: thin black solid;
z-index: 10000;
}
.OWIDSliderDialog .oo-ui-messageDialog-text {
box-sizing: border-box;
height: 100%;
}
#OWIDSliderViewSelector {
/* position: absolute; */
/* right: 5%; */
font-size: 1.25em;
height: 50px;
}
.OWIDSlider-country-back {
background: #36c;
border-color: #36c;
color: white;
padding: 5px 10px;
font-size: 16px;
border-radius: 4px;
cursor: pointer;
}
.OWIDSlider-country-back:hover {
background-color: #447ff5;
outline: 1px solid transparent;
}
.owid-select-container {
position: relative;
display: inline-block;
margin-top: 20px;
margin-bottom: 20px;
flex: 8;
}
.owid-select {
width: 100%;
padding: 12px 16px;
font-size: 16px;
border: 1px solid #c4c4c4;
border-radius: 4px;
box-sizing: border-box;
outline: none;
transition: border-color 0.2s, box-shadow 0.2s;
cursor: pointer;
background-color: var(--background-color-interactive, white);
color: var(--color-base, black);
appearance: none;
-webkit-appearance: none;
-moz-appearance: none;
}
.owid-select:focus {
border-color: #1976d2;
box-shadow: 0 0 0 2px rgba(25, 118, 210, 0.2);
}
.owid-select:hover {
border-color: rgba(0, 0, 0, 0.87);
}
.owid-select-label {
position: absolute;
left: 8px;
top: 16px;
color: #1976d2;
padding: 0 4px;
font-size: 16px;
line-height: 1;
pointer-events: none;
transition: 0.2s ease all;
background-color: var(--background-color-interactive, white);
}
.owid-select:focus~.owid-select-label,
.owid-select:not([value=""]):valid~.owid-select-label {
top: -8px;
font-size: 12px;
color: #1976d2;
}
.owid-select-arrow {
position: absolute;
right: 10px;
top: 50%;
transform: translateY(-50%);
pointer-events: none;
border-left: 5px solid transparent;
border-right: 5px solid transparent;
border-top: 5px solid rgba(0, 0, 0, 0.54);
}
.owid-select:focus~.owid-select-arrow {
border-top: 5px solid #1976d2;
}
.owid-helper-text {
margin-top: 4px;
font-size: 12px;
color: rgba(0, 0, 0, 0.6);
}
.OWIDSliderDialog .oo-ui-messageDialog-message,
.OWIDSliderDialog .oo-ui-messageDialog-message .OWIDSlider-viewer,
.OWIDSliderDialog .oo-ui-messageDialog-message .OWIDSlider-viewer .OWIDSliderImgContainer {
height: 100%;
}
.OWIDSliderDialog .owid-header {
flex-direction: row-reverse;
flex-wrap: wrap;
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
}
.OWIDSliderDialog .owid-region-chart-container {
margin-right: 10px;
flex: 2;
height: 50px;
margin-top: 20px;
margin-bottom: 20px;
display: flex;
align-items: center;
justify-content: center;
gap: 20%;
border: 1px solid #c4c4c4;
border-radius: 4px;
}
.OWIDSliderDialog .owid-region-chart-container button {
height: 50px;
}
.OWIDSliderDialog .owid-region-chart-container label {
display: flex;
align-items: center;
}
.OWIDSliderDialog .owid-region-chart-container input {
display: inline-block;
margin-right: 10px;
width: 20px;
height: 200px;
}
6pm43d9e3pur0gcw5a5uu06pd6htt5u
MediaWiki:Gadget-owidslider
8
53755
310950
2026-10-25T13:48:14Z
Isma4l
41797
/* */
310950
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-default}}">(D)</abbr></sup> Waxaa la tusayaa daaqad soo-baxaysa oo wadata badhamada siibidda ee sawirada OWID
rd9bg1aiduqv131n0vt9euxoavz1t0z
MediaWiki:Gadget-OWIDPopup.js
8
53756
310951
2026-10-25T13:48:54Z
Isma4l
41797
Abuuray
310951
javascript
text/javascript
/**
* OWIDPopup embeds interactive charts from Our World in Data
* Documentation: https://www.mediawiki.org/wiki/OWIDPopup
* Source code: https://www.mediawiki.org/wiki/MediaWiki:Gadget-Global-OWIDPopup.js
*/
mw.loader.load( '//www.mediawiki.org/w/load.php?modules=ext.gadget.Global-OWIDPopup' );
ad0jep67y7y8cucgdhi6srx3gjh7olt
MediaWiki:Gadget-OWIDPopup
8
53757
310952
2026-10-25T13:49:33Z
Isma4l
41797
/* */
310952
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-default}}">(D)</abbr></sup> Waxay soo rartaa jaantusyada is-dhexgalka ah ee ka yimid [http://ourworldindata.org Our World in Data] ka dib marka ay ogolaansho ka hesho isticmaalaha
ljklsuf3ss1km3aeeobbbby2gpl3gh6
MediaWiki:Gadget-section-qaybaha
8
53758
310953
2026-10-25T13:54:31Z
Isma4l
41797
/* */
310953
wikitext
text/x-wiki
Modules-ka adeegga
g8jel9g8wyokzxmlorxppmg4hpy3338
MediaWiki:Gadget-libLua.js
8
53759
310954
2026-10-25T13:55:39Z
Isma4l
41797
Abuuray
310954
javascript
text/javascript
/* ___________________________________________________________________________
* | |
* | === DIIGAAN: FAYLKA QALABKA CAALAMIGA AH === |
* | Wax-ka-beddelka boggan wuxuu saameeyaa isticmaalayaal badan. |
* | Fadlan ka wada hadal wax-ka-beddelka bogga wadahadalka ama [[Wikipedia_talk:Gadget]] |
* | ka hor intaanad wax ka beddelin. |
* |___________________________________________________________________________|
*
*
* libLua waxay bixisaa hawlo lagula falgalo qaybaha Lua ee laga helo JavaScript.
*
*
* === ISTICMAALKA ===
*
* Maktabaddan waa in lagu soo raro sidii qalab MediaWiki ah, iyadoo la adeegsanayo mw.loader.load,
* mw.loader.using, ama wixii la mid ah. Magaca qalabku waa
* "ext.gadget.libLua". Marka qalabka la soo raro, waxaad geli kartaa
* hawlaha ka socda mw.libs.lua.<magaca hawsha>. Dukumiintiyada
* hawlaha waxaa laga heli karaa baloogyada faallooyinka JSDoc ee ku jira koodka maktabadda. Tusaale ahaan:
*
* // Wac p.main("foo", "bar") ee ku jira [[Module:Example]]
* mw.loader.using( [ 'ext.gadget.libLua' ], function () {
* mw.libs.lua.call( {
* module: 'Example',
* func: 'main',
* args: [ 'foo', 'bar' ]
* } ).then( function ( result ) {
* // Ku samee wax natiijada
* } );
* } );
*
*
* === SHATIGA ===
*
* Qoraaga: Mr. Stradivarius
* Shatiga: MIT
*
* Shatiga MIT (MIT)
*
* Xuquuqda daabacaadda (c) 2016 Mr. Stradivarius
*
* Halkan waxaa lagu bixinayaa oggolaansho, lacag la'aan, qof kasta oo hela nuqul
* ka mid ah barnaamijkan iyo faylasha dukumiintiyada la xiriira ("Software"), inuu kula tacaamulo
* Software-ka si xaddidaad la'aan ah, oo ay ku jirto iyada oo aan la xaddidin xuquuqda
* in la isticmaalo, la beddelo, la isu geeyo, la daabaco, la qaybiyo, la siiyo shati-hoosaad, iyo/ama la iibiyo
* nuqullada Software-ka, iyo in la oggolaado dadka uu Software-ku ku socdo
* in ay sidaas sameeyaan, iyadoo hoos imaanaysa shuruudaha soo socda:
*
* Ogeysiiska xuquuqda daabacaadda ee kore iyo oggolaanshahani waa lagu darayaa
* dhammaan nuqullada ama qaybaha muhiimka ah ee Software-ka.
*
* SOFTWARE-KA WAA LA BIXIYAA "SIDUU YAHAY", OO AAN LA HAYN DABAAFAD NOOC WALBA AH, OO AH MID LA MUUJIYAY AMA
* LA DHEERYEEYAY, OO AY KU JIRAAN LAAKIN AAN KU XADDIDNEX DAABACAADDA AH IN LA IIBIYO,
* UJEEDDO GAAR AH IN LA WAX TARO IYO IN AAN LA XADGUDBIN. XAALAD KASTA MA JIRI TOARTO IN AAN
* QORAYAASHA AMA KU-HAYAYAASHA XUQUUQDA DAABACAADDA AY MASUUL KA YAGHIIN DAABACAD KASTA, WIXII KHASAARO AH AMA
* MASUULIYAD KASTA OO KALE, HAKEE AH HESHIS, KHALAD AMA SI KALE, OO KA SOO BAXAYA,
* KA BAXAYA AMA KU XIRAN SOFTWARE-KA AMA ISTICMAALKA AMA WIXII KALA IIBSIIN AH OO KALE EE KU JIRA
* SOFTWARE-KA.
*/
( function ( $, mw, undefined ) {
'use strict';
/**
* Koodhee xadhig (string) si loogu daro su'aal Lua ah.
* Waqtigan xaadirka ah tani waa kaliya duubid JSON.stringify ah, maadaama ay qabanayso
* waxa aan u baahanahay. Si kastaba ha ahaatee, koodhaynta xadhigga Lua waa mid fikir ahaan ka duwan
* koodhaynta JSON, markaa waxaan isticmaalnaa magacyo hawleedyo oo kala duwan labada hawlood.
* Tani waxay sidoo kale sahlaysaa in la cusboonaysiiyo koodka mustaqbalka, haddii
* loo baahdo.
* @private
*/
function makeLuaString( s ) {
return JSON.stringify( s );
}
/**
* Ka samee xadhig su'aal Lua ah magaca qayb (module), magaca hawsha iyo
* saf-xaddidan (array) doodaha ikhtiyaariga ah.
* @private
*/
function makeQuestion( module, func, args ) {
var escapedModule = makeLuaString( 'Module:' + module ),
escapedFunc = makeLuaString( func ),
json, escapedJson, argString;
if ( args ) {
json = JSON.stringify( args );
escapedJson = makeLuaString( json );
argString = 'unpack(mw.text.jsonDecode(' + escapedJson + '))';
} else {
argString = '';
}
return '=require(' + escapedModule + ')[' + escapedFunc + '](' + argString + ')';
}
/**
* Diid shay dib loo dhigay (deferred object) oo wata koodka qaladka iyo fariinta qaladka ee cayiman.
* Haddii aan shay dib loo dhigay lagu bixin halbeegga saddexaad, mid cusub ayaa
* la abuurayaa. Waxaan isticmaalnaa qaabkan gaarka ah ee shayada qaladka ah maadaama uu yahay
* midka ay isticmaasho API-ga MediaWiki, markaasina macaamiishu ay kaliya ka walwalsanaan doonaan
* khaladaadka oo hal qaab loo qaabeeyey.
* @private
*/
function rejectDeferred( code, msg, deferred ) {
if ( !deferred ) {
deferred = $.Deferred();
}
return deferred.reject(
code,
{ error: {
code: code,
info: msg
} }
);
}
mw.libs.lua = {
/**
* Wac hawl ku jirta qaybta Lua. Wicitaanka hawsha waxaa loo sameeyaa
* si aan isku mid ahayn (asynchronously) iyada oo loo marayo API-ga Ficilka MediaWiki, natiijadeeduna waa
* mid ku dhex duuban ballan jQuery (jQuery promise).
*
* @param {Object} options
*
* @param {string} options.module - Magaca qaybta la soo rarayo.
* (Ha isticmaalin horgalaha "Module:".)
*
* @param {string} options.func - Magaca hawsha la wacayo.
* Kaliya xadhkaha (strings) ayaa loo aqbalaa magacyo hawleedyo ahaan.
*
* @param {*[]} [options.args] - Saf-xaddidan (array) ah doodaha la gelinayo
* hawsha. Kuwani waa inay ahaadaan kuwo lagu sifayn karo sida JSON. Doodaha waa la
* furfuri doonaa marka loo gudbiyo hawsha; marka la wacayo hawsha "func",
* saf-xaddidan oo ah ["foo", "bar", "baz"] waxaa loo wici doonaa sida
* func("foo", "bar", "baz"). Waxaa jira xad-dhaafyo ku saabsan waxa laga soo saari karo
* JSON ee Lua: tusaale ahaan, furayaasha waa laga tagaan karaa
* saf-xaddidyada ka kooban qiyam eber ah (null). Eeg
* https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.text.jsonDecode
* wixii faahfaahin dheeraad ah. Sababtan awgeed, wicitaannada sida func('foo', nil, 'bar')
* si toos ah looma samayn karo. Si aad taas u xalliso waxaad qeexi kartaa
* hawl dhexdhexaad ah oo ku jirta qayb Lua ah taas oo wacda hawsha la rabo
* si dadban, ka dibna ka wac hawshaas maktabaddan beddelkeeda.
*
* @param {('string'|'json')} [options.format=string] - Qaabka soo-celinta
* ee la filayo. Haddii tani ay tahay "string" ama aan la qeexin, markaas qiimaha soo-celinta
* wuxuu noqon doonaa xadhig. (Haddii wicitaanka hawsha Lua uu soo celiyo qiimo aan ahayn xadhig
* waxaa loo beddelayaa xadhig, hase yeeshee haddii wicitaanka hawshu uu soo celiyo
* qiimayaal badan markaas waxaa loo beddelayaa xadhko waxaana lagu
* dhejinayaa tabsooyin kala-soocayaal ah.) Haddii tani ay tahay "json", markaas
* xadhigga soo-celinta ee ka yimaada wicitaanka hawsha waxaa loo qaadanayaa inuu yahay JSON, waana
* mid loo beddelayo shay JavaScript ah iyadoo la adeegsanayo JSON.parse. Haddii xadhigga soo-celintu
* uusan ahayn JSON sax ah, ballanta laga soo celiyo hawsha waa la
* diidayaa, laakiin wax khalad ah lama tuurayo.
*
* @param {mw.Api} [options.api] - Shay mw.Api ah oo loo isticmaalo wicitaannada API.
* Haddii aan tan la qeexin, shay mw.Api cusub oo isticmaalaya qiyamka
* caadiga ah ayaa la abuurayaa.
*
* @return {$.Promise}
* Ballan jQuery ah oo lagu xalliyay natiijada wicitaanka hawsha.
*
@example
// Soo raro qalabka
mw.loader.using( 'ext.gadget.libLua', function () {
// Wac p.main( "foo", "bar", "baz" ) ee ku jira Module:Example.
mw.libs.lua.call( {
"module": "Example",
"func": "main",
"args": [ "foo", "bar", "baz" ]
} ).done( function( resultString ) {
doSomething( resultString );
} );
} );
*
@example
// Soo raro qalabka
mw.loader.using( 'ext.gadget.libLua', function () {
// Wac p.getJson( "foo" ) ee ku jira Module:Example.
mw.libs.lua.call( {
"format": "json",
"module": "Example",
"func": "getJson",
"args": [ "foo" ]
} ).done( function( data ) {
doSomething( data.bar.baz );
} );
} );
*
*/
call: function ( options ) {
// Wax ka qabashada doodaha xun
if ( !( options instanceof Object ) ) {
return rejectDeferred(
'liblua-call-options-type-error',
"qaladka nooca doodda #1 ee 'call' (object ayaa la filayay)"
);
} else if ( typeof options.module !== 'string' ) {
return rejectDeferred(
'liblua-call-module-type-error',
'qaladka nooca ee options.module (string ayaa la filayay)'
);
} else if ( typeof options.func !== 'string' ) {
return rejectDeferred(
'liblua-call-func-type-error',
'qaladka nooca ee options.func (string ayaa la filayay)'
);
} else if ( options.args !== undefined && !$.isArray( options.args ) ) {
return rejectDeferred(
'liblua-call-invalid-args',
'options.args waa la qeexay laakiin ma ahayn saf-xaddidan (array)'
);
} else if ( options.format !== undefined
&& options.format !== 'json'
&& options.format !== 'string' ) {
return rejectDeferred(
'liblua-call-format-type-error',
"qaab aan la aqbalayn ayaa la qeexay (wuxuu noqon karaa 'json', 'string' ama lama qeexin)"
);
} else if ( options.api !== undefined && !( options.api instanceof mw.Api ) ) {
return rejectDeferred(
'liblua-call-invalid-api-object',
'options.api ma aha shay mw.Api ah oo sax ah.'
);
}
// Samee shay API cusub haddii aan naloo soo gudbin mid.
var api = options.api || new mw.Api();
// Samee wicitaanka API.
// Goobta cinwaanka ee scribunto-console uma muuqato inay no oggolaanayso
// inaan isticmaalno doorsoomaha p si aan u soo darno waxa ku jira qaybta, markaa u deji qiimo
// tijaabo ah oo wata waxyaabo madhan oo soo rar qaybta
// su'aasha dhexdeeda beddelkeeda.
return api.postWithToken( 'csrf', {
action: 'scribunto-console',
format: 'json',
title: 'Example',
content: '',
question: makeQuestion( options.module, options.func, options.args ),
clear: true
} ).then( function ( obj ) {
// Ku duub weydiinta API shay cusub oo jQuery Deferred ah si
// aan u diidi karno natiijooyinka API ee ah Lua aan shaqaynayn laakiin aan loo
// qaadan khaladaad ahaan API-ga.
return $.Deferred( function ( deferred ) {
// Wax ka qabashada wixii khalad ah ee ka yimid API ama Lua.
if ( obj.type === 'error' ) {
// Amarka Lua wuu guuldarraystay laakiin wicitaanka API waa guulaystay
return rejectDeferred(
obj.messagename,
obj.message,
deferred
);
} else if ( obj.error ) {
// Wicitaankii API wuu guuldarraystay
return deferred.reject( obj.error.code, obj );
} else if ( obj.type !== 'normal' ) {
// Jawaab API oo aan la aqoon
return rejectDeferred(
'liblua-call-unknown-api-response',
'Jawaab API oo aan la aqoon',
deferred
);
}
var result = obj['return'];
// Isku day inaad turjunto JSON haddii options.format uu la mid yahay 'json'
if ( options.format == 'json' ) {
try {
result = JSON.parse( result );
} catch ( e ) {
if ( e instanceof SyntaxError ) {
return rejectDeferred(
'liblua-call-json-syntax-error',
'Wicitaanka hawsha Lua wuxuu soo celiyay JSON aan shaqaynayn: ' + e.message,
deferred
);
} else {
return rejectDeferred(
'liblua-call-json-unexpected-error',
'Khalad lama filaan ah ayaa dhacay intii lagu guda jiray isku dayga ' +
'in la turjunto JSON-ka ka soo laabtay wicitaanka hawsha Lua',
deferred
);
}
}
}
return deferred.resolve( result );
} ).promise();
} );
}
};
} )( jQuery, mediaWiki );
52pp9j7rt4unv4a5e4cmtmqwo4au8fc
MediaWiki:Gadget-libLua
8
53760
310955
2026-10-25T13:56:19Z
Isma4l
41797
/* */
310955
wikitext
text/x-wiki
Qalabka adeegga. Waa inaadan awoodin inaad tan ka aragto Special:Preferences.
o9a81s9oo9sifknfb02ndsf3bt7rt4l
MediaWiki:Gadget-libSensitiveIPs.js
8
53761
310956
2026-10-25T13:57:12Z
Isma4l
41797
Abuuray
310956
javascript
text/javascript
/* ___________________________________________________________________________
* | |
* | === DIIGAAN: FAYLKA QALABKA CAALAMIGA AH === |
* | Wax-ka-beddelka boggan wuxuu saameeyaa isticmaalayaal badan. |
* | Fadlan ka wada hadal wax-ka-beddelka bogga wadahadalka ama [[Wikipedia_talk:Gadget]] |
* | ka hor intaanad wax ka beddelin. |
* |___________________________________________________________________________|
*
*
* libSensitiveIPs waxay bixisaa is-dhexgal (interface) loogu talagalay in lagu galo macluumaadka ku saabsan IP-yada ama
* x uqmooyinka IP-yada ee xannibaadahooda loola tacaamulo si taxaddar leh. Tani waxay noqon kartaa sababta oo ah
* IP-yadu waxay leeyihiin hay'ad siyaasadaysan xasaasi ah, waxaana xannibaadaha (iyo fariimaha xannibaadda)
* laga warbixin karaa saxaafadda, ama IP-yadu waxay ka tirsanaan karaan bot-yo ama API-yo
* ay Wikipedia ku tiirsan tahay shaqada caadiga ah. (Eeg [[WP:SIP]] wixii faahfaahin
* dheeraad ah ee ku saabsan IP-yada xasaasiga ah.)
*
*
* === ISTICMAALKA ===
*
* Maktabaddan waa in lagu soo raro sidii qalab MediaWiki ah, iyadoo la adeegsanayo mw.loader.load,
* mw.loader.using, ama wixii la mid ah. Magaca qalabku waa
* "ext.gadget.libSensitiveIPs". Marka qalabka la soo raro, waxaad geli kartaa
* hawlaha ka socda mw.libs.sensitiveIPs.<magaca hawsha>. Dukumiintiyada
* hawlaha waxaa laga heli karaa baloogyada faallooyinka JSDoc ee ku jira koodka maktabadda. Tusaale ahaan:
*
* mw.loader.using( [ 'ext.gadget.libSensitiveIPs' ], function () {
* mw.libs.sensitiveIPs.query( {
* test: [ '1.2.3.4', '5.6.7.8' ]
* } ).then( function ( result ) {
* // Ku samee wax natiijada
* } );
* } );
*
*
* === SHATIGA ===
*
* Qoraaga: Mr. Stradivarius
* Shatiga: MIT
*
* Shatiga MIT (MIT)
*
* Xuquuqda daabacaadda (c) 2016 Mr. Stradivarius
*
* Halkan waxaa lagu bixinayaa oggolaansho, lacag la'aan, qof kasta oo hela nuqul
* ka mid ah barnaamijkan iyo faylasha dukumiintiyada la xiriira ("Software"), inuu kula tacaamulo
* Software-ka si xaddidaad la'aan ah, oo ay ku jirto iyada oo aan la xaddidin xuquuqda
* in la isticmaalo, la beddelo, la isu geeyo, la daabaco, la qaybiyo, la siiyo shati-hoosaad, iyo/ama la iibiyo
* nuqullada Software-ka, iyo in la oggolaado dadka uu Software-ku ku socdo
* in ay sidaas sameeyaan, iyadoo hoos imaanaysa shuruudaha soo socda:
*
* Ogeysiiska xuquuqda daabacaadda ee kore iyo oggolaanshahani waa lagu darayaa
* dhammaan nuqullada ama qaybaha muhiimka ah ee Software-ka.
*
* SOFTWARE-KA WAA LA BIXIYAA "SIDUU YAHAY", OO AAN LA HAYN DABAAFAD NOOC WALBA AH, OO AH MID LA MUUJIYAY AMA
* LA DHEERYEEYAY, OO AY KU JIRAAN LAAKIN AAN KU XADDIDNEX DAABACAADDA AH IN LA IIBIYO,
* UJEEDDO GAAR AH IN LA WAX TARO IYO IN AAN LA XADGUDBIN. XAALAD KASTA MA JIRI TOARTO IN AAN
* QORAYAASHA AMA KU-HAYAYAASHA XUQUUQDA DAABACAADDA AY MASUUL KA YAGHIIN DAABACAD KASTA, WIXII KHASAARO AH AMA
* MASUULIYAD KASTA OO KALE, HAKEE AH HESHIS, KHALAD AMA SI KALE, OO KA SOO BAXAYA,
* KA BAXAYA AMA KU XIRAN SOFTWARE-KA AMA ISTICMAALKA AMA WIXII KALA IIBSIIN AH OO KALE EE KU JIRA
* SOFTWARE-KA.
*/
( function ( $, mw, undefined ) {
'use strict';
mw.libs.sensitiveIPs = {
/**
* Weydii API-ga (Query the API)
*
* @param {Object} params - Halbeegyada weydiinta API-ga
*
* @param {string[]} options.test - Ciwaannada IP-ga ama xusullada IP-yada ee la tijaabinayo
* si loo ogaado xasaasiyadooda.
*
* @param {string[]} options.entities - Aqoonsiyada hay'adaha ee lagu soo bandhigayo xogta.
* "Hay'adaha" waxay yihiin waddamo ama ururo ay IP-yadooda u aragto
* Wikipedia kuwo xasaasi ah. Aqoonsiyada hay'adaha waxaa lagu qeexay
* https://en.wikipedia.org/wiki/Module:Sensitive_IP_addresses/list.
*
* @return {$.Promise}
* Ballan jQuery ah oo lagu xalliyay natiijada weydiinta, sida
* shay JavaScript ah. Wixii ku saabsan qaab-dhismeedka natiijooyinka weydiinta, eeg
* https://en.wikipedia.org/wiki/Module:Sensitive_IP_addresses/API#Results.
*
@example
// Ogow in IP-ga "1.2.3.4" uu xasaasi yahay iyo in kale.
mw.loader.using( 'ext.gadget.libSensitiveIPs', function () {
mw.libs.sensitiveIPs.query( {
"test": [ "1.2.3.4" ]
} ).done( function( data ) {
console.log( data.sensitiveips.matches.length > 0 );
} );
} );
*
*/
query: function ( params ) {
if ( !( params instanceof Object ) ) {
throw new TypeError( "qaladka nooca doodda #1 ee 'query' (object ayaa la filayay)" );
}
params.format = 'json';
return mw.libs.lua.call( {
format: 'json',
module: 'Sensitive IP addresses/API',
func: 'query',
args: [ params ]
} ).then( function ( data ) {
// Soo celi ballan la diiday haddii Lua API ay soo sheegtay khalad.
return $.Deferred( function ( deferred ) {
if ( data.sensitiveips ) {
return deferred.resolve( data );
} else if ( data.error ) {
return deferred.reject( data.error.code, data );
} else {
return deferred.reject(
'libsips-unknown-api-error',
{ error: {
code: 'libsips-unknown-api-error',
info: 'jawaab API oo lama filaan ah oo ka timid mw.libs.lua'
} }
);
}
} ).promise();
} );
}
};
} )( jQuery, mediaWiki );
2572yy0i8borkf2bd03stey2ktw6sws
MediaWiki:Gadget-libSensitiveIPs
8
53762
310957
2026-10-25T13:57:55Z
Isma4l
41797
/* */
310957
wikitext
text/x-wiki
Qalabka adeegga. Waa inaadan awoodin inaad tan ka aragto Special:Preferences.
o9a81s9oo9sifknfb02ndsf3bt7rt4l
MediaWiki:Gadget-dark-mode.css
8
53763
310958
2026-10-25T13:58:28Z
Isma4l
41797
Abuuray
310958
css
text/css
/* WikimediaUI Dark Mode
*
* Wikimedia Design Team 2019-2021
* Original authors:
* - Volker E. – [[User:Volker_E._(WMF)]]
* - Alex Hollender
* - MusikAnimal
* - Carolyn Li-Madeo
* - Jdlrobson
*
* Original at https://en.wikipedia.org/wiki/User:Volker_E._(WMF)/dark-mode.css
* Version for Gadget CSS skin override usage only.
* Basically removed of all interaction element styles and
* set to `html` instead of JS injected `.client-dark-mode` class.
*
* Last updated: 2021-04-20
*
*/
/** To prevent 'jumping' effect within #p-personal in Vector/Monobook. Overrides [[MediaWiki:Gadget-dark-mode-toggle-pagestyles.css]] **/
body.skin-vector-legacy :not(#pt-darkmode) + #pt-watchlist::before,
body.skin-monobook :not(#pt-darkmode) + #pt-watchlist::before {
content: "Light mode";
}
@media screen {
/* set height for monobook and timeless, because the filter in FF needs dimensions to get it to apply */
html {
height: 100%;
}
/* Filter needs to reside on `html`, see https://phabricator.wikimedia.org/T221425#5153917 */
html,
/* All other selectors have `filter` double-applied to turn back to “normal” by inheritance */
html img:not( .mw-invert ),
html video:not( .mw-invert ),
html ogvjs:not( .mw-invert ),
html svg:not( .mw-invert ),
html iframe:not( .mw-invert ),
html .mw-no-invert,
html .cdx-no-invert,
html td .diffchange,
html .wvui-typeahead-suggestion__thumbnail,
html .skin-minerva .mw-notification-visible .mw-notification-content,
html .oo-ui-searchWidget-results .oo-ui-iconElement-icon,
html .list-thumb,
/* Extensions */
html .media-viewer .image img,
html .media-viewer .mw-file-description img {
filter: invert( 1 ) hue-rotate( 180deg );
}
/* Reset overrides, needed where double application above isn't working. */
/* Vector modern */
html .skin-vector .mw-logo-wordmark,
html .skin-vector .mw-logo-tagline,
html .skin-timeless .mw-wiki-title > img,
html .wvui-icon svg,
html .mw-ext-score img,
html .skin-invert img,
html .skin-invert-image img,
html .mw-hiero-table img {
filter: none;
}
/* Backgrounds */
html table,
html table.ambox-content,
html table.toccolours,
html .mw-notification,
html .mwe-popups,
html .infobox,
html .toc,
html .thumbinner,
html figure[typeof~='mw:File/Thumb'],
html figure[typeof~='mw:File/Frame'],
html figure[typeof~='mw:File/Thumb'] > figcaption,
html figure[typeof~='mw:File/Frame'] > figcaption,
html .wikitable,
html .cbnnr-main,
html .cx-callout,
html .overlay.media-viewer,
html #simpleSearch,
html #simpleSearch #searchInput,
html #siteNotice #centralNotice .cnotice {
background-color: #ddd;
}
/* Borders */
html body,
html h1,
html h2,
html h3,
html h4,
html h5,
html h6,
html table.ambox-content,
html table.toccolours,
html .mw-notification,
html .infobox,
html .toc,
html .thumbinner,
html figure[typeof~='mw:File/Thumb'],
html figure[typeof~='mw:File/Frame'],
html figure[typeof~='mw:File/Thumb'] > figcaption,
html figure[typeof~='mw:File/Frame'] > figcaption,
html #mw-head,
html #mw-panel,
/* Vector 2022 uses a transparent border for margin collapsing
(T312822) so don't apply this rule there */
.skin-vector-legacy #content.mw-body,
html #simpleSearch,
html #simpleSearch #searchInput,
html #siteNotice #centralNotice .cnotice {
border-color: #cdcbc8;
}
/* Links */
/* Links: normal */
html a,
html .vector-menu-tabs li a,
/* Backwards compatible VectorTabs, deprecated in MW v1.35. */
html .vectorTabs li a,
html .toctogglelabel,
html .mw-parser-output a.external,
html .mw-parser-output a.extiw,
html .mw-parser-output a.extiw:active,
html #mw-panel .portal .body li a {
/* color: #69f; Proposal below for level AA conformance, see also https://phabricator.wikimedia.org/T233266
`#36c` is transformed by :root `filter` to be closer to chosen `#69f`. */
color: #36c;
}
/* Links: visited */
html a:visited,
html .mw-parser-output a.extiw:visited,
html #mw-panel .portal .body li a:visited {
/* color: #709bbd; Proposal below uses to-be-standardized color from https://phabricator.wikimedia.org/T213778 */
color: #6b4ba1;
}
/* Links: red */
html a.new,
html .vector-menu-tabs li.new a,
html .vectorTabs li.new a {
color: #ff6e6e;
}
/* ::: Special Element Treatments ::: */
/* Image thumbnails */
html .thumbimage,
html figure[typeof~='mw:File/Thumb'] > :not(figcaption) .mw-file-element,
html figure[typeof~='mw:File/Frame'] > :not(figcaption) .mw-file-element {
border: 0;
}
/* Content image (thumbnail) SVGs */
/* `*not( .mbox-image )` exception doesn't work for unclear reasons */
html .image img[ src*='svg' ],
html .mw-file-description img[ src*='svg' ],
html img[ src*='Wiktionary-logo'] {
background-color: #fff;
border-radius: 1px;
}
/* Dealing with false positives from selector above */
html .mw-echo-ui-notificationItemWidget-icon img[ src*='svg' ],
html .mbox-image .image img[ src*='svg' ],
html .mbox-image .mw-file-description img[ src*='svg' ],
/* Emoji generated by [[Template:Emoji]] */
html .emoji .image img,
html .emoji .mw-file-description img,
/* Vote symbols on Talk pages */
html .image img[ alt^="Symbol" ],
html .mw-file-description img[ alt^="Symbol" ],
html .skin-invert .image img[ src*='svg' ],
html .skin-invert .mw-file-description img[ src*='svg' ],
html .skin-invert-image .image img[ src*='svg' ],
html .skin-invert-image .mw-file-description img[ src*='svg' ] {
background-color: transparent;
}
/* Page previews */
html .mwe-popups {
box-shadow: 0 30px 90px -20px rgba( 0, 0, 0, 0.3 ), 0 0 1px #000;
}
html .mwe-popups.flipped-y:after,
html .mwe-popups.flipped-x-y:after {
border-top: 11px solid #ddd;
}
html .mwe-popups.mwe-popups-no-image-pointer:after {
border-bottom: 11px solid #ddd;
}
/* Contributions menu */
html .cx-callout-1:after {
border-bottom-color: #ddd;
}
/* Mobile Wikipedia logo mobile header */
html .branding-box img {
filter: brightness( 0 );
}
}
@-moz-document url-prefix() {
body {
background: #000;
}
}
@-moz-document url-prefix() {
@supports (overflow-clip-margin: 1px) {
body {
background: #fff;
}
}
}
qd3q4gdykx5lodtoa8tx6hit137nb3w
MediaWiki:Gadget-dark-mode
8
53764
310959
2026-10-25T13:59:11Z
Isma4l
41797
/* */
310959
wikitext
text/x-wiki
Habaynta asaasiga ah ee qalabka qaabka madow (Isticmaal [[#mw-input-wpgadget-dark-mode-toggle|badhanka beddelashada qaabka madow ee kor ku xusan]] si aad u xakameyso sifadan)
2khnwdrj23iilpixphq00230oelp2fm
MediaWiki:Gadget-ImageStackPopup.js
8
53765
310960
2026-10-25T14:01:41Z
Isma4l
41797
Abuuray
310960
javascript
text/javascript
/******************************************************************************/
/**** BOGTAAN WAXAY LA SOCOTAA [[mw:MediaWiki:Gadget-Global-ImageStackPopup.js]]. FADLAN KA FOGOW INAAD SI TOOS AH U WAX KA BEDDESho.
/**** WAX-KA-BEDDELKA WAA IN SI TOOS AH LOO SOO JEEDIYAA [[mw:MediaWiki:Gadget-Global-ImageStackPopup.js]].
/**** BOT WAA UU KICI DOONAA CODSIGU WAX-KA-BEDDELKA HADDICII UU KA DUWANAAN LAAHAAN KII KORE (UPSTREAM).
/******************************************************************************/
// Qoraalka waxaa qoray Bawolff oo u jooga WikiProject Med Foundation iyadoo laga duulayo qoraalkii hore ee ImageStack ee uu qoray Hellerhoff.
var ImageStackPopup = {
messages: {
en: {
ImageStackPopupFrameBack: 'Dib u laabo',
ImageStackPopupFrameImageCredit: 'Eeg amaahda warbaahinta',
ImageStackPopupNextImage: "Sawirka xiga",
ImageStackPopupPreviousImage: "Sawirka hore",
ImageStackPopupSliderLabel: "Dooro sawirka",
ImageStackPopupPlayLabel: "Muuji bandhigga sawirrada",
ImageStackPopupLoading: "Waa la soo dejinayaa... $1%"
},
},
init: function () {
ImageStackPopup.setMessages();
mw.hook( 'wikipage.content' ).add( ImageStackPopup.addPlayButton );
},
/**
* Ku deji fariimaha is-dhexgalka luqadda ugu habboon
*
* Mudnaanta sii luqadda isticmaalaha marka koowaad, luqadda bogga marka labaad, luqadda wiki marka saddexaad, iyo ugu dambeyn Ingiriiska
*/
setMessages: function () {
var userLanguage = mw.config.get( 'wgUserLanguage' );
if ( userLanguage in ImageStackPopup.messages ) {
mw.messages.set( ImageStackPopup.messages[ userLanguage ] );
return;
}
var pageLanguage = mw.config.get( 'wgPageContentLanguage' );
if ( pageLanguage in ImageStackPopup.messages ) {
mw.messages.set( ImageStackPopup.messages[ pageLanguage ] );
return;
}
var contentLanguage = mw.config.get( 'wgContentLanguage' );
if ( contentLanguage in ImageStackPopup.messages ) {
mw.messages.set( ImageStackPopup.messages[ contentLanguage ] );
return;
}
mw.messages.set( ImageStackPopup.messages.en );
},
/**
* Ku dar badhanka ciyaarta ► div kasta oo ImageStackPopup ah
*/
addPlayButton: function ( $content ) {
$content.find( 'div.ImageStackPopup' ).each( function () {
var $frame = $( this );
var viewerInfo = $frame.data( 'imagestackpopupConfig' );
if ( !( viewerInfo instanceof Array) ) {
return;
}
// lammaane labadaba img iyo span faylasha jabay ee gallery-yada
$frame.find( '.mw-file-element, .lazy-image-placeholder' ).each( function ( i ) {
if ( viewerInfo[i] instanceof Object && typeof viewerInfo[i].list === "string" ) {
var $play = $( '<button></button>' )
.attr( {
type: 'button',
"class": 'ImageStackPopup-play',
title: mw.msg( 'ImageStackPopupPlayLabel' ),
"aria-label": mw.msg( 'ImageStackPopupPlayLabel' )
} ).text( '►' );
var data = viewerInfo[i];
$play.on( 'click', data, ImageStackPopup.showFrame );
var $this = $( this );
$this.parent().css( {display: 'inline-block', height: 'fit-content', position: 'relative' } );
$this.after( $play );
}
} );
} );
},
showFrame: function ( event ) {
event.preventDefault();
var data = event.data;
var $loading = $( '#ImageStackPopupLoading' );
if ( !$loading.length ) {
$loading = $( '<div></div>' )
.attr( {
id: "ImageStackPopupLoading",
role: "status"
}
);
$( document.body ).append( $loading );
}
$loading.text( mw.msg( 'ImageStackPopupLoading', "0" ) );
// Soo rar ku-tiirsanaanta (dependencies)
var state = mw.loader.getState( 'oojs-ui-windows' );
if ( state === 'registered' ) {
mw.loader.using( 'oojs-ui-windows', function () { ImageStackPopup.showFrame( event ) } );
return;
}
var $viewer = ImageStackPopup.getViewer();
var config = {
size: 'full',
// Tani uma muuqato inay shaqaynayso.
classes: 'ImageStackPopupDialog',
title: typeof data.title === 'string' ? data.title : false,
actions: [ {
action: 'accept',
label: mw.msg( 'ImageStackPopupFrameBack' ),
flags: [ 'primary', 'progressive' ]
} ],
message: $viewer
};
var dialog = function ( config ) {
dialog.super.call( this, config );
this.$element.addClass( 'ImageStackPopupDialog' );
}
OO.inheritClass( dialog, OO.ui.MessageDialog );
dialog.static.name = 'ImageStack'
OO.ui.getWindowManager().addWindows( [ new dialog() ] );
// laga soo guuriyay qeexitaanka OO.ui.alert.
OO.ui.getWindowManager().openWindow( 'ImageStack', config )
.closed.done( function () {
// Waa inay jirtaa hab ka fiican oo tan loo sameeyo.
if ( window.ImageStackPopupCancel ) {
window.ImageStackPopupCancel();
}
});
ImageStackPopup.loadImages( $viewer, data );
},
getViewer: function () {
var $viewer = $( '<div></div>' ).attr( {
class: 'ImageStackPopup-viewer ImageStackPopup-loading'
} );
// Laga soo qaatay https://commons.wikimedia.org/wiki/File:Loading_spinner.svg
$viewer.append( '<svg xmlns="http://www.w3.org/2000/svg" aria-label="Loading..." viewBox="0 0 100 100" width="25%" height="25%" style="display:block;margin:auto"><rect fill="#555" height="6" opacity=".083" rx="3" ry="3" transform="rotate(-60 50 50)" width="25" x="72" y="47"/><rect fill="#555" height="6" opacity=".167" rx="3" ry="3" transform="rotate(-30 50 50)" width="25" x="72" y="47"/><rect fill="#555" height="6" opacity=".25" rx="3" ry="3" width="25" x="72" y="47"/><rect fill="#555" height="6" opacity=".333" rx="3" ry="3" transform="rotate(30 50 50)" width="25" x="72" y="47"/><rect fill="#555" height="6" opacity=".417" rx="3" ry="3" transform="rotate(60 50 50)" width="25" x="72" y="47"/><rect fill="#555" height="6" opacity=".5" rx="3" ry="3" transform="rotate(90 50 50)" width="25" x="72" y="47"/><rect fill="#555" height="6" opacity=".583" rx="3" ry="3" transform="rotate(120 50 50)" width="25" x="72" y="47"/><rect fill="#555" height="6" opacity=".667" rx="3" ry="3" transform="rotate(150 50 50)" width="25" x="72" y="47"/><rect fill="#555" height="6" opacity=".75" rx="3" ry="3" transform="rotate(180 50 50)" width="25" x="72" y="47"/><rect fill="#555" height="6" opacity=".833" rx="3" ry="3" transform="rotate(210 50 50)" width="25" x="72" y="47"/><rect fill="#555" height="6" opacity=".917" rx="3" ry="3" transform="rotate(240 50 50)" width="25" x="72" y="47"/></svg>' );
return $viewer;
},
loadImages: function ( $viewer, data ) {
var page = mw.Title.newFromText( data.list );
if ( !page ) {
console.log( "Khaladka istaagga sawirka, bogga aan shaqaynayn " + data.list );
return;
}
fetch( page.getUrl() )
.then( function ( response ) { return response.text() } )
.then( function ( text ) { return ImageStackPopup.handlePage( $viewer, data, text ) } );
},
handlePage: function( $viewer, data, text ) {
var parser = new DOMParser;
var listDoc = parser.parseFromString( text, 'text/html' );
var idSelector = mw.Title.newFromText( data.list ).getFragment();
var listElm = listDoc.getElementById( idSelector );
if ( !listElm ) {
console.log( "Khalad la helayo curiyaha dukumentiga liiska" );
return;
}
var imgs = listElm.querySelectorAll( 'img.mw-file-element' );
var width = imgs[0].width;
var height = imgs[0].height;
var context = new ImageStackPopup.Context( $viewer, data, imgs, width, height );
},
getSource: function ( imgElm, width, height ) {
// cabirka la rabo
var w = width * window.devicePixelRatio;
var h = height * window.devicePixelRatio;
// musharraxa hadda
var imgW = parseInt(imgElm.width);
var imgH = parseInt(imgElm.height);
// ballaca/dhererka summada img.
var originalW = imgW;
var originalH = imgH;
var src = imgElm.src;
if ( imgW >= w && imgH >= h ) {
return src;
}
var srcSets = imgElm.srcset.split( /\s*,\s*/ );
for ( var i = 0; i < srcSets.length; i++ ) {
var parts = srcSets[i].match( /^(\S+)\s+([0-9.])x\s*$/ );
if (
parts &&
parts.length === 3
) {
var pixelRatio = parseFloat( parts[2] );
if (
( imgW < w && originalW*pixelRatio > imgW ) ||
( imgW > w && originalW*pixelRatio - w >= 0 && originalW*pixelRatio < imgW )
) {
imgW = originalW*pixelRatio;
imgH = originalH*pixelRatio;
src = parts[1];
}
}
}
return src;
},
doStats: function () {
if ( window.imageStackPopupStatsAlreadyDone !== true ) {
window.imageStackPopupStatsAlreadyDone = true;
mw.track( 'counter.gadget_ImageStackPopup._all' );
mw.track( 'counter.gadget_ImageStackPopup.' + mw.config.get( 'wgDBname' ) + '_all' );
var statName = mw.config.get( 'wgDBname' ) + '_' + mw.config.get( 'wgPageName' );
statName = encodeURIComponent( statName );
// Calaamaduhu uma muuqadaan inay shaqaynayaan.
statName = statName.replace( /[^a-zA-Z0-9_]/g, '_' );
mw.track( 'counter.gadget_ImageStackPopup.' + statName );
}
},
Context: function ( $viewer, config, imgs, width, height ) {
ImageStackPopup.doStats();
this.$viewer = $viewer;
this.loop = !!config.loop;
this.start = typeof config.start === 'number' ? config.start - 1 : 0;
this.urls = null;
this.infoUrls = null;
this.imgs = imgs;
this.captionId = typeof config.caption === 'string' ? config.caption : false;
// Mustaqbalka TODO - ka dhig cabirka sawirka mid la qabsan kara cabirka shaashadda
// Mustaqbalka TODO - maaree sawirada cabbiraadaha kala duwan iyo saamiga dhinacyada.
this.width = config.width;
this.height = config.height;
if ( this.width && !this.height ) {
this.height = this.width * (imgs[0].height)/(imgs[0].width);
}
if ( !this.width && this.height ) {
this.width = this.height * (imgs[0].width)/(imgs[0].height);
}
this.imgWidth = width;
this.imgHeight = height;
this.currentImage = this.start;
this.pendingFrame = false;
this.$loading = $( '#ImageStackPopupLoading' );
this.urlsLoaded = 0;
this.pendingTouches = {};
this.init();
}
};
// Qeybtan waxaa saldhig u ah Hellerhoff https://commons.wikimedia.org/wiki/MediaWiki:Gadget-ImageStack.js
ImageStackPopup.Context.prototype = {
init: function () {
var that = this;
// Chrome waxay u rogtaa si ka dhaqso badan firefox
const SCROLL_SLOWDOWN = navigator.userAgent.includes( "Chrome/" ) ? 25 : 2;
this.pendingScrollDelta = 0;
var containingWidth = this.$viewer[0].parentElement.parentElement.parentElement.clientWidth;
var containingHeight = this.$viewer[0].parentElement.parentElement.parentElement.clientHeight;
this.$viewer.empty();
$counter = $('<div class="ImageStackCounter">');
this.$leftLink = $('<a>', {
href: '#',
text: '← ',
title: mw.msg( 'ImageStackPopupPreviousImage' ),
"aria-label": mw.msg( 'ImageStackPopupPreviousImage' ),
}).click(function() {
that.currentImage--;
that.repaint();
return false;
});
this.$rightLink = $('<a>', {
href: '#',
text: ' →',
title: mw.msg( 'ImageStackPopupNextImage' ),
"aria-label": mw.msg( 'ImageStackPopupNextImage' ),
}).click(function() {
that.currentImage++;
that.repaint();
return false;
});
this.$slider = $( '<input>', {
type: 'range',
min: 0,
max: that.imgs.length - 1,
value: this.currentImage,
"aria-label": mw.msg( 'ImageStackPopupSliderLabel' ),
class: 'ImageStackPopupSlider'
} ).on( 'input', function (e) {
that.currentImage = parseInt( e.target.value );
that.repaint();
} ).on( 'keydown', function (e) {
// Hagaajin khiyaano leh. Braisers ku filan ma taageeraan jihada: css
// keyword, markaa waxaan ku hagaajineynaa dhacdooyinka halkan.
if ( e.key === 'ArrowUp' ) {
e.preventDefault();
that.currentImage--;
that.repaint();
} else if ( e.key === 'ArrowDown' ) {
e.preventDefault();
that.currentImage++;
that.repaint();
}
} );
var handleTouchStart = this.handleTouchStart.bind(this);
var handleTouchMove = this.handleTouchMove.bind(this);
var handleTouchCancel = this.handleTouchCancel.bind(this);
var handleTouchEnd = this.handleTouchEnd.bind(this);
var touchElement = this.$viewer[0].parentElement.parentElement;
var opt = { passive: true };
// Hadda waxay u muuqataa inaysan noqon mid aan joojino dhacdooyinka. Lama hubo haddii ay tahay inaan toosan
touchElement.addEventListener( 'touchstart', handleTouchStart, opt );
touchElement.addEventListener( 'touchmove', handleTouchMove, opt );
touchElement.addEventListener( 'touchend', handleTouchEnd, opt );
touchElement.addEventListener( 'touchcancel', handleTouchCancel, opt );
var keyeventhandler = this.handleArrow.bind(this);
document.addEventListener( 'keydown', keyeventhandler );
// Khiyaano!
window.ImageStackPopupCancel = function () {
document.removeEventListener( 'keydown', keyeventhandler );
touchElement.removeEventListener( 'touchstart', handleTouchStart, opt );
touchElement.removeEventListener( 'touchmove', handleTouchMove, opt );
touchElement.removeEventListener( 'touchend', handleTouchEnd, opt );
touchElement.removeEventListener( 'touchcancel', handleTouchCancel, opt );
};
this.$currentCount = $('<span>', {
'class': 'ImageStackCounterCurrent',
text: that.currentImage + 1
});
var left = $( '<span>', { class: "ImageStackPopupCounterHideMobile" } ).append( this.$leftLink, '(' );
var right = $( '<span>', { class: "ImageStackPopupCounterHideMobile" } ).append( ')', this.$rightLink );
$counter.append(left, this.$currentCount, '/', that.imgs.length, right);
this.$leftLink.add(this.$rightLink).css({
fontSize: "110%",
fontweight: "bold"
});
this.img = new Image();
this.img.fetchPriority = 'high';
this.img.loading = 'eager';
this.img.decoding = 'sync';
this.img.className = 'ImageStackPopupImg';
// ballaca/dhererka waxaa la dejiyay dib.
var $img = $( this.img );
$img.on('mousewheel', function(event, delta) {
// Scroll-ku waa mid aad u dheereeya (Gaar ahaan chrome), markaa waxaan kaydinaa dhacdooyinka scroll.
that.pendingScrollDelta += delta;
var realDelta = Math.floor(that.pendingScrollDelta/SCROLL_SLOWDOWN);
if (delta !== 0) {
// Waxaan rognaa jihada scrolling-ka.
that.currentImage -= realDelta > 2 ? 2 : realDelta;
that.pendingScrollDelta -= realDelta*SCROLL_SLOWDOWN;
that.repaint();
}
return false;
});
$img.on('mousedown', function(event) { // u diyaari scroll adiga oo jiidaya
mouse_y = event.screenY; // xasuuso booska jiirka
that.scrollobject = true; // deji calaamadda
return false;
});
$img.on('mousemove', function(event) {
if (that.scrollobject && Math.abs(mouse_y - event.screenY) > 10) {
var offset = (mouse_y < event.screenY) ? 1 : -1;
mouse_y = event.screenY; // xasuuso booska jiirka dhacdada xigta
that.currentImage += offset;
that.repaint();
}
return false;
});
this.img.addEventListener( 'load', this.urlLoaded.bind( this ), { once: true } );
this.img.addEventListener( 'error', this.urlLoaded.bind( this ), { once: true } );
var $container = $( '<div class="ImageStackPopupImgContainer"></div>' )
.append( $counter )
.append( this.$slider )
.append( $img );
this.$viewer.append( $container );
this.$credit = $( '<a></a>' );
this.$credit.text( mw.msg( 'ImageStackPopupFrameImageCredit' ) );
var $creditDiv = $( '<div class="ImageStackPopupCredit"></div>' ).append( this.$credit );
this.$viewer.append( $creditDiv );
var $wrapper = false;
if ( this.captionId ) {
var captionElm = document.getElementById( this.captionId );
if ( captionElm ) {
var newCaption = $( captionElm ).clone();
newCaption.show();
$wrapper = $( '<div class="ImageStackPopup-caption"></div>' ).append( newCaption );
this.$viewer.append( $wrapper );
}
}
// Isku day inaad hagaajiso cabirka sawirka daaqada daawadaha
// laakiin ha gaarin meel sawirku ka noqdo mid qoran (blurry)
if ( !this.width ) {
var controlHeight = $creditDiv[0].clientHeight;
var paddingDivStyles = getComputedStyle( this.$viewer[0].parentElement.parentElement );
controlHeight += parseFloat( paddingDivStyles.getPropertyValue( 'padding-top' ) ) + parseFloat( paddingDivStyles.getPropertyValue( 'padding-bottom' ) );
containingWidth -= parseFloat( paddingDivStyles.getPropertyValue( 'padding-left' ) ) + parseFloat( paddingDivStyles.getPropertyValue( 'padding-right' ) );
if ( $wrapper ) {
controlHeight += $wrapper[0].clientHeight;
}
controlHeight += 5; // qodobka qaladka.
if ( this.$viewer[0].parentElement.previousElementSibling ) {
// Daaqada OOUI calaamadda. Tani waa mid khiyaano yar leh.
controlHeight += this.$viewer[0].parentElement.previousElementSibling.clientHeight;
}
var maxImgDim = this.getMaxImgDim();
var aspect = maxImgDim[0]/maxImgDim[1];
containingHeight -= controlHeight;
// 3 si loo xisaabiyo slider-ka iyo kontaroolada qoraalka. laakiin ma aha shaashadaha cidhiidhiga ah.
if ( containingWidth >= 500 ) {
containingWidth -= parseFloat( getComputedStyle( this.$slider[0] ).getPropertyValue( 'width' ) ) * 3;
}
if ( maxImgDim[0] > maxImgDim[1] ) {
if ( maxImgDim[0] > containingWidth ) {
// yaree si ay u noqoto mid ku habboon.
maxImgDim[0] = containingWidth;
maxImgDim[1] = Math.floor(containingWidth/aspect);
}
if ( maxImgDim[1] > containingHeight ) {
maxImgDim[1] = containingHeight;
maxImgDim[0] = Math.floor( containingHeight * aspect );
}
} else {
if ( maxImgDim[1] > containingHeight ) {
maxImgDim[1] = containingHeight;
maxImgDim[0] = Math.floor( containingHeight * aspect );
}
if ( maxImgDim[0] > containingWidth ) {
// yaree si ay u noqoto mid ku habboon.
maxImgDim[0] = containingWidth;
maxImgDim[1] = Math.floor(containingWidth/aspect);
}
}
this.width = maxImgDim[0];
this.height = maxImgDim[1];
}
this.img.width = this.width;
this.img.height = this.height;
// cabirka farta ee kala duwan ee qaybta credit, marka ha isticmaalin em.
var sliderRoom;
if ( containingWidth >= 500 ) {
sliderRoom = parseFloat( getComputedStyle( this.$slider[0] ).getPropertyValue( 'width' ) ) * 3;
} else {
sliderRoom = 0;
}
$creditDiv.css( 'width', this.width + sliderRoom + 'px' );
$creditDiv.css( 'padding-right', sliderRoom + 'px' );
$container.css( 'width', 'calc( ' + this.width + 'px' + ' + 3em )' );
this.$slider.css( 'height', this.height + 'px' );
$counter.css( 'min-height', this.height + 'px' );
this.getUrls();
this.toggleImg();
this.preload();
},
getMaxImgDim: function () {
// Tani waxay u malaynaysaa in xitaa shaashadaha DPI-da sarreysa, weyneynta 96dpi ay tahay mid sax ah.
var w = this.imgs[0].width;
var h = this.imgs[0].height;
if ( this.imgs[0].srcset.match( /\s2x\s*(,|$)/ ) ) {
w *= 2;
h *= 2;
} else if ( this.imgs[0].srcset.match( /\s1.5x\s*(,|$)/ ) ) {
w = Math.floor( 1.5*w );
h = Math.floor( 1.5*h );
}
return [w,h];
},
repaint: function () {
if ( this.pendingFrame ) {
return;
}
requestAnimationFrame( this.toggleImg.bind( this ) );
},
toggleImg: function () {
if ( this.loop ) {
if ( this.currentImage < 0 ) {
this.currentImage = this.urls.length - 1;
} else if ( this.currentImage >= this.urls.length ) {
this.currentImage = 0;
}
} else {
this.$rightLink.css( 'visibility', 'visible' );
this.$leftLink.css( 'visibility', 'visible' );
if ( this.currentImage <= 0 ) {
this.currentImage = 0;
this.$leftLink.css( 'visibility', 'hidden' );
} else if ( this.currentImage >= this.urls.length - 1 ) {
this.currentImage = this.urls.length - 1;
this.$rightLink.css( 'visibility', 'hidden' );
}
}
this.$slider[0].value = this.currentImage;
// Mustaqbalka todo wuxuu noqon karaa in la tarjumo nambarada.
this.$currentCount[0].textContent = this.currentImage + 1;
this.img.src = this.urls[this.currentImage];
this.$credit[0].href = this.infoUrls[this.currentImage];
if ( this.infoUrls[this.currentImage] === false ) {
this.$credit.css( 'visibility', 'hidden' );
} else {
this.$credit.css( 'visibility', 'visible' );
}
this.pendingFrame = false;
},
preload: function () {
for ( var i = 0; i < this.urls.length; i++ ) {
if ( i === this.currentImage ) {
// horay ayaa loo soo qaatay.
continue;
}
var img = new Image();
if ( Math.abs( this.currentImage - i ) > 4 ) {
img.fetchPriority = 'low';
}
img.loading = 'eager';
img.decoding = 'sync';
img.addEventListener( 'load', this.urlLoaded.bind( this ), { once: true } );
img.addEventListener( 'error', this.urlLoaded.bind( this ), { once: true} );
img.src = this.urls[i];
}
},
getUrls: function () {
this.urls = [];
this.infoUrls = [];
for( var i = 0; i < this.imgs.length; i++ ) {
this.urls[i] = ImageStackPopup.getSource( this.imgs[i], this.width, this.height );
if ( this.imgs[i].parentElement.href ) {
this.infoUrls[i] = this.imgs[i].parentElement.href;
} else {
this.infoUrls[i] = false;
}
}
},
urlLoaded: function () {
// Hadda, tani wali waxay kor u qaadaysaa culeyska guuldarraystay, sidaas darteed
// si uusan bakoorada horumarka u xirmin.
this.urlsLoaded++;
var progress = Math.floor( ( this.urlsLoaded / this.urls.length ) * 100 );
if ( this.$loading.length ) {
this.$loading.text( mw.msg( 'ImageStackPopupLoading', progress ) );
if ( this.urlsLoaded === this.urls.length ) {
this.$viewer.removeClass( 'ImageStackPopup-loading' );
this.$loading.remove();
}
}
},
handleArrow: function (e) {
// Lama hubo inaan halkan ka hortagno default-ka
// arrin suurtagal ah oo la xiriirta helitaanka haddii si qaar ah ay u jirto wax la rogrogmi karo.
// aragti ahaan, wax halkan ku jira ma aha inay noqdaan kuwo la rogrogmi karo markaa dhib ma laha.
if (
( e.key === 'ArrowUp' ||
e.key === 'ArrowDown' ||
e.key === 'ArrowRight' ||
e.key === 'ArrowLeft' )
&& e.target.tagName !== 'INPUT'
&& this.$viewer.find(e)
) {
if ( e.key === 'ArrowUp' || e.key === 'ArrowRight' ) {
this.currentImage--;
this.repaint();
} else if ( e.key === 'ArrowDown' || e.key === 'ArrowLeft' ) {
this.currentImage++;
this.repaint();
}
}
},
handleTouchStart: function (e) {
for ( var i = 0; i < e.changedTouches.length; i++ ) {
var t = e.changedTouches[i];
this.pendingTouches[t.identifier] = [t.clientX, t.clientY];
}
},
handleTouchCancel: function (e) {
for ( var i = 0; i < e.changedTouches.length; i++ ) {
var t = e.changedTouches[i];
delete this.pendingTouches[t.identifier];
}
},
handleTouchMove: function (e) {
for ( var i = 0; i < e.changedTouches.length; i++ ) {
var t = e.changedTouches[i];
if ( !this.pendingTouches[t.identifier] ) {
continue;
}
var startX = this.pendingTouches[t.identifier][0];
var startY = this.pendingTouches[t.identifier][1];
var angle = Math.abs( Math.atan( ( startY - t.clientY ) / ( startX - t.clientX ) ) );
if ( angle > 1 ) {
// taagan (vertical). > ~60 digrii
if ( Math.abs( startY - t.clientY ) < 15 ) {
// Kuma filna weyn
continue;
}
// dib u deji xisaabinta si aan u dhaqaaqno sawirka haddii ay dhaqaaqaan 15 pixels oo kale
this.pendingTouches[t.identifier] = [t.clientX, t.clientY];
if ( startY - t.clientY > 0 ) {
// ku dhufo kor (swipe up)
this.currentImage--;
this.repaint();
} else {
// ku dhufo hoos (swipe down)
this.currentImage++;
this.repaint();
}
}
}
},
handleTouchEnd: function (e) {
for ( var i = 0; i < e.changedTouches.length; i++ ) {
var t = e.changedTouches[i];
if ( !this.pendingTouches[t.identifier] ) {
continue;
}
var startX = this.pendingTouches[t.identifier][0];
var startY = this.pendingTouches[t.identifier][1];
var angle = Math.abs( Math.atan( ( startY - t.clientY ) / ( startX - t.clientX ) ) );
if ( angle < 0.7 ) {
// jiho siman (horizontal swipe). < 40 digrii
if ( Math.abs( startX - t.clientX ) < 30 ) {
// Kuma filna weyn
continue;
}
if ( startX - t.clientX < 0 ) {
// ku dhufo midig
this.currentImage--;
this.repaint();
} else {
// ku dhufo bidix
this.currentImage++;
this.repaint();
}
}
if ( angle > 1 ) {
// taagan swipe. > ~60 digrii
if ( Math.abs( startY - t.clientY ) < 30 ) {
// Kuma filna weyn
continue;
}
if ( startY - t.clientY > 0 ) {
// ku dhufo kor
this.currentImage--;
this.repaint();
} else {
// ku dhufo hoos
this.currentImage++;
this.repaint();
}
}
delete this.pendingTouches[t.identifier];
}
},
};
// Ku dar ku-tiirsanaanta jquery.mousewheel.
// --------
/*! Copyright (c) 2013 Brandon Aaron (http://brandon.aaron.sh)
* Licensed under the MIT License (LICENSE.txt).
*
* Nooca: 3.1.11
*
* Waxaa looga baahan yahay: jQuery 1.2.2+
*/
(function (factory) {
if ( typeof define === 'function' && define.amd ) {
// AMD. Is diiwaan geli sida module aan la magacaabin.
define(['jquery'], factory);
} else if (typeof exports === 'object') {
// Habka Node/CommonJS ee Browserify
module.exports = factory;
} else {
// Browser globals
factory(jQuery);
}
}(function ($) {
var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],
toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?
['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],
slice = Array.prototype.slice,
nullLowestDeltaTimeout, lowestDelta;
if ( $.event.fixHooks ) {
for ( var i = toFix.length; i; ) {
$.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;
}
}
var special = $.event.special.mousewheel = {
version: '3.1.11',
setup: function() {
if ( this.addEventListener ) {
for ( var i = toBind.length; i; ) {
this.addEventListener( toBind[--i], handler, false );
}
} else {
this.onmousewheel = handler;
}
// Kaydi dhererka khadka iyo dhererka bogga ee curiyahan gaarka ah
$.data(this, 'mousewheel-line-height', special.getLineHeight(this));
$.data(this, 'mousewheel-page-height', special.getPageHeight(this));
},
teardown: function() {
if ( this.removeEventListener ) {
for ( var i = toBind.length; i; ) {
this.removeEventListener( toBind[--i], handler, false );
}
} else {
this.onmousewheel = null;
}
// Nadiifi xogta aan ku darnay curiyaha
$.removeData(this, 'mousewheel-line-height');
$.removeData(this, 'mousewheel-page-height');
},
getLineHeight: function(elem) {
var $parent = $(elem)['offsetParent' in $.fn ? 'offsetParent' : 'parent']();
if (!$parent.length) {
$parent = $('body');
}
return parseInt($parent.css('fontSize'), 10);
},
getPageHeight: function(elem) {
return $(elem).height();
},
settings: {
adjustOldDeltas: true, // eeg shouldAdjustOldDeltas() hoos ku qoran
normalizeOffset: true // wacaya getBoundingClientRect dhacdo kasta
}
};
$.fn.extend({
mousewheel: function(fn) {
return fn ? this.on('mousewheel', fn) : this.trigger('mousewheel');
},
unmousewheel: function(fn) {
return this.off('mousewheel', fn);
}
});
function handler(event) {
var orgEvent = event || window.event,
args = slice.call(arguments, 1),
delta = 0,
deltaX = 0,
deltaY = 0,
absDelta = 0,
offsetX = 0,
offsetY = 0;
event = $.event.fix(orgEvent);
event.type = 'mousewheel';
// Dugsiga hore scrollwheel delta
if ( 'detail' in orgEvent ) { deltaY = orgEvent.detail * -1; }
if ( 'wheelDelta' in orgEvent ) { deltaY = orgEvent.wheelDelta; }
if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY; }
if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }
// Firefox < 17 scrolling siman oo la xiriira dhacdada DOMMouseScroll
if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {
deltaX = deltaY * -1;
deltaY = 0;
}
// U deji delta inuu noqdo deltaY ama deltaX haddii deltaY uu yahay 0 si loo waafajiyo wixii hore
delta = deltaY === 0 ? deltaX : deltaY;
// Dugsiga cusub wheel delta (dhacdada wheel)
if ( 'deltaY' in orgEvent ) {
deltaY = orgEvent.deltaY * -1;
delta = deltaY;
}
if ( 'deltaX' in orgEvent ) {
deltaX = orgEvent.deltaX;
if ( deltaY === 0 ) { delta = deltaX * -1; }
}
// Wax isbeddel ah ma dhicin, sabab looga gudbo ma jirto
if ( deltaY === 0 && deltaX === 0 ) { return; }
// Waxaa loo baahan yahay in loo beddelo khadadka iyo bogagga pixels haddii uusan horay ugu jirin pixels
// Waxaa jira saddex nooc oo delta ah:
// * deltaMode 0 waa pixels, wax la qabto ma jiraan
// * deltaMode 1 waa khadad
// * deltaMode 2 waa bogag
if ( orgEvent.deltaMode === 1 ) {
var lineHeight = $.data(this, 'mousewheel-line-height');
delta *= lineHeight;
deltaY *= lineHeight;
deltaX *= lineHeight;
} else if ( orgEvent.deltaMode === 2 ) {
var pageHeight = $.data(this, 'mousewheel-page-height');
delta *= pageHeight;
deltaY *= pageHeight;
deltaX *= pageHeight;
}
// Kaydi delta-ga ugu hooseeya ee buuxda si loo caadiyeeyo qiyamka delta
absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );
if ( !lowestDelta || absDelta < lowestDelta ) {
lowestDelta = absDelta;
// Hagaaji deltas-kii hore haddii loo baahdo
if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
lowestDelta /= 40;
}
}
// Hagaaji deltas-kii hore haddii loo baahdo
if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
// U qaybi wax walba 40!
delta /= 40;
deltaX /= 40;
deltaY /= 40;
}
// Hel qiimo dhammaystiran, caadi ah oo loogu talagalay deltas
delta = Math[ delta >= 1 ? 'floor' : 'ceil' ](delta / lowestDelta);
deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);
deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);
// Caadiyeey sifooyinka offsetX iyo offsetY
if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {
var boundingRect = this.getBoundingClientRect();
offsetX = event.clientX - boundingRect.left;
offsetY = event.clientY - boundingRect.top;
}
// Ku dar macluumaadka shayga dhacdada
event.deltaX = deltaX;
event.deltaY = deltaY;
event.deltaFactor = lowestDelta;
event.offsetX = offsetX;
event.offsetY = offsetY;
// Sii wad oo u deji deltaMode 0 maadaama aan u beddelnay pixels
// In kasta oo tani ay tahay mid qariib ah tan iyo markaan ka dul marno sifooyinka deltaX/Y
// oo wata deltas caadi ah.
event.deltaMode = 0;
// Ku dar dhacdada iyo delta hore ee doodaha
args.unshift(event, delta, deltaX, deltaY);
// Nadiifi lowestDelta muddo kadib si aad ugu fiicnaato
// wax ka qabashada noocyada qalabyada badan ee bixiya
// lowestDelta kala duwan
// Tusaale: trackpad = 3 iyo mouse wheel = 120
if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }
nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);
return ($.event.dispatch || $.event.handle).apply(this, args);
}
function nullLowestDelta() {
lowestDelta = null;
}
function shouldAdjustOldDeltas(orgEvent, absDelta) {
// Haddii tani ay tahay dhacdo hore oo delta ay u qaybsami karto 120,
// markaas waxaan u malaynaynaa in browser-ku u tixgelinayo tan sidii
// dhacdo mouse wheel oo hore ah iyo inaan u qaybinno deltas-ka
// 40 si aan u helno deltaFactor la isticmaali karo.
// Xusuusin gaar ah, tani waxay dhab ahaantii saamaysaa fogaanta scrolling ee la soo sheegay
// browser-ada hore waxayna keeni kartaa in scrolling uu ka gaabisiyo kii asalka ahaa.
// Demi tan adiga oo u dejinaya $.event.special.mousewheel.settings.adjustOldDeltas false.
return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;
}
}));
// --- Bilow popup-ka istaagga sawirka
$( ImageStackPopup.init );
b70q7lnygoyaqlpo8zs7w0f0n1qmlwr
MediaWiki:Gadget-ImageStackPopup.css
8
53766
310961
2026-10-25T14:02:51Z
Isma4l
41797
Abuuray
310961
css
text/css
/******************************************************************************/
/**** THIS PAGE TRACKS [[mw:MediaWiki:Gadget-Global-ImageStackPopup.css]]. PLEASE AVOID EDITING DIRECTLY.
/**** EDITS SHOULD BE PROPOSED DIRECTLY to [[mw:MediaWiki:Gadget-Global-ImageStackPopup.css]].
/**** A BOT WILL RAISE AN EDIT REQUEST IF IT BECOMES DIFFERENT FROM UPSTREAM.
/******************************************************************************/
@media print {
html .ImageStackPopup-play, #ImageStackPopupLoading { display: none }
}
.ImageStackPopup-viewer {
text-align: center;
}
.ImageStackPopup-caption {
margin-top: 0.2em;
}
.ImageStackPopup-play {
font-size: 300%;
background-color: rgba( 128, 128, 128, 0.9);
color: white;
border-radius: 50%;
cursor: pointer;
text-align: center;
user-select: none;
position: absolute;
top: 20px;
right: 20px;
width: 70px;
height: 70px;
display: inline-block;
line-height: 1.5;
border: 0;
padding: 0;
font-family: "Segoe UI", "Segoe UI Emoji", "Segoe UI Symbol", "Lato", "Liberation Sans", "Noto Sans", "Helvetica Neue", "Helvetica", sans-serif;
}
.ImageStackPopup-play:hover {
background-color: rgba( 169, 169, 169, 0.9 );
color: black;
}
.ImageStackPopup-play:active {
color: red;
}
.ImageStackPopup-loading {
cursor: wait;
}
.ImageStackPopupCredit {
text-align: right;
font-size: small;
margin: auto;
box-sizing: border-box;
}
.ImageStackPopupSlider {
/* browser support is inconsistent here. we want top to bottom.
Standard way is direction: ltr but firefox and not latest but very recent chrome does not support that. so do other direction and rotate it. Hopefully at some point we can change this. */
writing-mode: vertical-lr;
direction: rtl;
appearance: slider-vertical; /* back compat */
width: 1em;
float: right;
transform: rotate(180deg); /* in theory direction is supposed to control this, but it didn't work for me */
}
.ImageStackPopupImgContainer {
text-align: left;
margin: auto
}
#ImageStackPopupLoading {
position: fixed;
padding-top: 0.25em;
padding-bottom: 0.25em;
padding-left: 1em;
padding-right: 1em;
bottom: 1em;
right: 1em;
background-color: #fda;
border: thin black solid;
z-index: 10000;
}
.ImageStackPopupDialog .ImageStackCounter {
writing-mode: vertical-lr;
display: flex;
justify-content: center;
float: right;
}
html .ImageStackPopupDialog .oo-ui-window-body,
html .ImageStackPopupDialog label {
background-color: black;
color-scheme: dark; /* especially important for range sliders on safari desktop */
color: #ddd;
}
html .ImageStackPopupDialog .oo-ui-messageDialog-content > .oo-ui-window-foot {
outline: none;
}
.ImageStackPopupDialog .oo-ui-messageDialog-text {
box-sizing: border-box;
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
}
@media (max-width: 500px) {
.ImageStackPopupCounterHideMobile { display: none }
.ImageStackPopupImgContainer { position: relative }
.ImageStackPopupDialog .ImageStackCounter {
display: block;
writing-mode: horizontal-tb;
position: absolute;
left: 3px;
bottom: -1.5em;
font-size: smaller;
float: none;
min-height: 0 !important;
}
.ImageStackPopupSlider {
position: absolute;
left: 3px;
opacity: 0.5;
width: 5px;
}
.ImageStackPopupSlider:hover, .ImageStackPopupSlider:active {
opacity: 0.9;
}
.ImageStackPopupDialog .oo-ui-messageDialog-text {
padding: 1px;
}
.ImageStackPopupDialog .oo-ui-messageDialog-message {
margin-top: auto;
margin-bottom: auto;
}
.ImageStackPopupImgContainer {
width: fit-content !important;
}
}
snz0ici6h9brh9nmt748y2p0q9y6i07
MediaWiki:Gadget-ImageStackPopup
8
53767
310962
2026-10-25T14:03:53Z
Isma4l
41797
/* */
310962
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-default}}">(D)</abbr></sup> Kordhi in la daawado sawirrada is dul saaran iyadoo la adeegsanayo tusmada {{t|ImageStackPopup}}
oq3ae7yc38d8vhu7vhjk75jr7j2ca2r
Template:ImageStackPopup
10
53768
310963
2026-10-25T14:04:22Z
Isma4l
41797
/* */
310963
wikitext
text/x-wiki
<includeonly>{{#invoke:ImageStackPopup|image}}[[Category:Pages using gadget ImageStackPopup]]</includeonly><noinclude>
{{doc}}
</noinclude>
gs5ietzdbfkagu0vxw6n4vhauubxz4m
Module:ImageStackPopup
828
53769
310964
2026-10-25T14:04:50Z
Isma4l
41797
Abuuray
310964
Scribunto
text/plain
local p = {}
function p.image( frame )
math.randomseed(tonumber(mw.getContentLanguage():formatDate( "U" ))*10000 + os.clock()*10000)
local args = frame:getParent().args
local popupConfig = {}
local caption = ''
popupConfig.loop = args.loop == "yes"
if tonumber( args.start ) then
popupConfig.start = tonumber( args.start )
else
popupConfig.start = 1
end
if tonumber( args.width ) then
popupConfig.width = tonumber( args.width )
end
if tonumber( args.height ) then
popupConfig.height = tonumber( args.height )
end
popupConfig.list = args.list
if args['noregisterimages'] == nil then
-- Register this as a dependency so that this page shows up as using all the images on the list page
frame:expandTemplate{ title = ':' .. args.list }
end
-- If we don't want to transclude for performance, maybe we could at least link
-- however links need to actually be output on the page to register them.
if args.caption then
popupConfig.caption = "imagestackpopup-caption-" .. math.random()
caption = tostring( mw.html.create( 'div' )
:attr( 'id', popupConfig.caption )
:attr( 'style', 'display: none' )
:wikitext( args.caption )
:done() )
end
if args.title then
popupConfig.title = args.title
end
return tostring( mw.html.create( 'div' )
:attr( 'class', 'ImageStackPopup' )
:attr( 'data-imagestackpopup-config', mw.text.jsonEncode( { popupConfig } ) )
:wikitext( args.file ) )
.. caption
end
function p.gallery( frame )
-- Seems like math.random is always seeded with 0 :(
math.randomseed(tonumber(mw.getContentLanguage():formatDate( "U" ))*10000 + os.clock()*10000)
local args = frame:getParent().args
local reuseImageCaption = args.reuse_image_caption ~= nil
local title = args["popup-title"]
local captionId = nil
local captionText = ''
local galleryContents = ''
local optionsArray = {}
local galleryArgs = {}
local galleryAttr = { "mode", "widths", "heights", "perrow", "caption", "showfilename", "showthumbnail", "id", "title", "class", "lang", "dir" }
for i, j in ipairs( galleryAttr ) do
galleryArgs[j] = args[j]
end
if args['popup-caption'] then
captionId = 'imagestackpopup-caption-' .. math.random()
captionText = tostring(
mw.html.create( 'div' )
:attr( 'style', 'display:none' )
:attr( 'id', captionId )
:wikitext( args['popup-caption'] )
)
end
for row in mw.text.gsplit( args.gallery, "\n", true ) do
local galleryRow = ''
local popupOptions = { title = title, caption = captionId }
for part in mw.text.gsplit( row, "!", true ) do
equalSplit = mw.text.split( part, '=', true )
if #equalSplit <= 1 then
-- be sure this really is a caption.
if galleryRow ~= '' and
reuseImageCaption and
#part > 8 and
string.find( part, " ", 1, true )
then
local captionId = 'imagestackpopup-caption-' .. math.random()
local wrappedPart = tostring( mw.html.create( 'span' )
:attr( 'id', captionId )
:wikitext( part )
)
popupOptions.caption = captionId
galleryRow = galleryRow .. wrappedPart .. '|'
else
galleryRow = galleryRow .. part .. '|'
end
else
if equalSplit[1] == 'popup-width' then
popupOptions.width = tonumber(equalSplit[2])
elseif equalSplit[1] == 'popup-height' then
popupOptions.height = tonumber(equalSplit[2])
elseif equalSplit[1] == 'popup-loop' then
popupOptions.loop = equalSplit[2] ~= ''
elseif equalSplit[1] == 'popup-start' then
popupOptions.start = tonumber(equalSplit[2])
elseif equalSplit[1] == 'popup-caption' then
local captionIdForImg = 'imagestackpopup-caption-' .. math.random()
captionText = captionText .. tostring( mw.html.create( 'div' )
:attr( 'id', captionIdForImg )
:css( 'display', 'none' )
:wikitext( table.concat( equalSplit, '=', 2 ) )
)
popupOptions.caption = captionIdForImg
elseif equalSplit[1] == 'popup-title' then
popupOptions.title = table.concat( equalSplit, '=', 2 )
elseif equalSplit[1] == 'popup-list' then
popupOptions.list = table.concat( equalSplit, '=', 2 )
if args['noregisterimages'] == nil then
-- Register this as a dependency so that this page shows up as using all the images on the list page
frame:expandTemplate{ title = ':' .. table.concat( equalSplit, '=', 2 ) }
end
else
galleryRow = galleryRow .. part .. '|'
end
end
end
if string.sub( galleryRow, -1 ) == '|' then
galleryRow = string.sub( galleryRow, 1, -2 )
end
galleryContents = galleryContents .. galleryRow .. "\n"
optionsArray[#optionsArray+1] = popupOptions
end
return tostring( mw.html.create( 'div' )
:attr( 'class', 'ImageStackPopup' )
:attr( 'data-imagestackpopup-config', mw.text.jsonEncode( optionsArray ) )
:wikitext( frame:extensionTag( 'gallery', galleryContents, galleryArgs ) )
) .. captionText
end
return p
31o6gjgql2d1zo4t8bxpevs10tgtcj7
MediaWiki:Gadget-calculator.js
8
53770
310965
2026-10-25T14:07:41Z
Isma4l
41797
Abuuray
310965
javascript
text/javascript
/******************************************************************************/
/**** BOGTAAN WAXAY LA SOCOTAA [[mw:MediaWiki:Gadget-Global-Calculator.js]]. FADLAN KA FOGOW INAAD SI TOOS AH U WAX KA BEDDESho.
/**** WAX-KA-BEDDELKA WAA IN SI TOOS AH LOO SOO JEEDIYAA [[mw:MediaWiki:Gadget-Global-Calculator.js]].
/**** BOT WAA UU KICI DOONAA CODSIGU WAX-KA-BEDDELKA HADDICII UU KA DUWANAAN LAAHAAN KII KORE (UPSTREAM).
/******************************************************************************/
/**
* Qalabka xisaabinta ee Wiki. Eeg [[Template:Calculator]]. Waxaa abuuray [[User:Bawolff]]
* Shatiga: Creative Commons Attribution-ShareAlike 3.0 iyo 4.0 International Public License
* Isha asaasiga ah: https://mdwiki.org/wiki/MediaWiki:Gadget-calculator.js
*
* Qoraalkan waxaa loo qaabeeyey iyadoo la tixgelinayo amniga. Khataraha amniga ee suurtagalka ah:
* * Adoo leh caanaha fuliya JS
* ** Si looga hortago tan ma isticmaasho eval(). Halkaas waxaa nidaamiya falanqayqeena oo leh falanqayqeena geed aan la taaban karin oo aan ku qiimeyno socodka dhexintiisa
* * Gudbinta foomka & DOM clobbering - waxaan ku darnaa magaca (iyo id) sifooyinka dhammaan beeraha si looga hortago khilaafaadka
* * Xubinimada qaabka (Style injection) - waxaan ka qaadan karnaa sifada qaabka curiye jira oo ay sifeeyey MW. Ma qaadno qaab ka yimid xogta sifo.
* * DoS dhinaca macmiilka - Qaababka lama qiimeeyo iyada oo aan la helin falcelinta isticmaalaha. Qaababku waxay leeyihiin dherer ugu badnaan. Tirada ugu badan ee widgets boggii kasta. Ugu dambeyntii, fudud in la soo celiyo qaababka gaabis ah sida falalka kale ee burburinta.
* * Wasakhowga prototype-ka - Waxaan isticmaalnaa walxo leh unugyo null ah oo sidoo kale diidnaa beeraha lagu magacaabo __proto__ si ay u noqoto mid badbaado leh.
*
* Asal ahaan koodku wuxuu shaqeeyaa iyadoo la beddelayo calaamadaha <span> qaarkood oo lagu beddelayo <input>, falanqaynta luqadda caanaha ee caadiga ah, dejinta jaantus ku tiirsanaanta oo ku saleysan aqoonsiyada, iyo dib u qiimeynta caanaha marka ay isbeddelaan.
*/
(function () {
var mathFuncs = [ 'abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'cbrt', 'ceil', 'cos', 'cosh', 'exp', 'expm1', 'floor', 'hypot',
'log', 'log10', 'log2', 'log1p', 'max', 'min', 'pow', 'random', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc', 'clz32' ];
var otherFuncs = [
'ifzero', 'coalesce', 'iffinite', 'ifnan', 'ifpositive', 'ifequal', 'round', 'jsround', 'not', 'and', 'or', 'bool', 'ifless', 'iflessorequal', 'ifgreater', 'ifgreaterorequal', 'ifbetween', 'xor',
'index', 'switch', 'radiogroup', 'bitand', 'bitor', 'bitxor', 'bitnot', 'bitleftshift', 'bitlogicrightshift', 'bitarithrightshift', 'if', 'getclick', 'timer', 'timeriterations', 'timertime'
];
var allFuncs = mathFuncs.concat(otherFuncs);
var convertFloat = function ( f ) {
if ( typeof f === 'number' ) {
return f;
}
f = f.replace( /×\s?10/, 'e' );
return parseFloat( f.replace( /[×⁰¹²³⁴⁵⁶⁷⁸⁹⁻]/g, function (m) {
return ({'⁰': 0,'¹': 1,'²': 2,'³': 3,'⁴': 4,'⁵': 5,'⁶': 6,'⁷': 7,'⁸': 8,'⁹': 9, '⁻': "-", "×": "e"})[m];
} ) );
};
// Bilow koodka falanqaynta (parser).
var Numb = function(n) {
if ( typeof n === 'number' ) {
this.value = n;
}
this.value = parseFloat(n);
};
Numb.prototype.toString = function () { return 'Number<' + this.value + '>'; };
var Ident = function(n) {
this.value = n;
};
Ident.prototype.toString = function () { return 'IDENT<' + this.value + '>'; };
var Operator = function(val, args) {
this.op = val;
this.args = args;
};
var Null = function() { };
var Parser = function( text ) {
this.text = text;
};
var terminals = {
'IDENT': /^[a-zA-Z_][a-zA-Z0-9_]*/,
'NUMBER': /^-?[0-9]+(?:\.[0-9]+)?(?:[eE][0-9]+|×10⁻?[⁰¹²³⁴⁵⁶⁷⁸⁹]+)*/,
'WS': /^\s*/,
'PLUSMINUS': /^[+-]/,
'pi': /^(?:pi|π)(?![A-z_0-9-])/i,
'true': /^(?:true)(?![A-z_0-9-])/,
'false': /^(?:false)(?![A-z_0-9-])/,
'epsilon': /^EPSILON(?![A-z_0-9-])/,
'Infinity': /^Infinity(?![A-z_0-9-])/i,
'-Infinity': /^Infinity(?![A-z_0-9-])/i,
'NaN': /^NaN(?![A-z_0-9-])/i,
'MULTIPLYDIV': /^[*\/%×÷]/i,
};
Parser.prototype = {
check: function(id) {
if ( terminals[id] ) {
return !!(this.text.match(terminals[id]));
}
return this.text.startsWith( id );
},
consume: function(id) {
if ( terminals[id] ) {
var res = this.text.match(terminals[id]);
this.text = this.text.substring( res[0].length );
return res[0];
}
if ( this.text.startsWith( id ) ) {
this.text = this.text.substring(id.length);
return id;
}
throw new Error( "Waxaa la filayay " + id + " u dhow " + this.text.substring(0,15) );
},
parse: function () {
if ( this.text === undefined || this.text === '' ) return new Null();
this.consume( 'WS' );
res = this.expression();
if( this.text.length !== 0 ) {
throw new Error( "Dhamaadka caanaha oo aan la filayn. Malaha waxaad illoowday inaad xirto xidhmo ama waxaad isticmaashaa shaqo aan shaqaynayn." );
}
return res;
},
expression: function () {
var text2, res, res2;
res = this.term();
this.consume( 'WS' );
while ( this.check( "PLUSMINUS" )) {
var op = this.consume( "PLUSMINUS" );
this.consume( 'WS' );
res2 = this.term();
this.consume( 'WS' );
res = new Operator( op, [ res, res2 ] );
}
return res;
},
argList: function () {
var args = [];
this.consume( 'WS' );
if ( this.check( ')' ) ) {
this.consume( ')' );
return args;
}
args[args.length] = this.expression();
this.consume( 'WS' );
while ( this.check( ',' ) ) {
this.consume( ',' );
this.consume( 'WS' );
args[args.length] = this.expression();
}
this.consume( 'WS' );
this.consume( ')' );
return args;
},
term: function () {
var text2, res, res2;
res = this.factor();
this.consume( 'WS' );
while ( this.check( "MULTIPLYDIV" )) {
var op = this.consume( "MULTIPLYDIV" );
if ( op === '×' ) op = '*';
if ( op === '÷' ) op = '/';
this.consume( 'WS' );
res2 = this.factor();
this.consume( 'WS' );
res = new Operator( op, [ res, res2 ] );
}
return res;
},
factor: function () {
this.consume( 'WS' );
var res;
if ( this.check( 'pi' ) ) {
this.consume( 'pi' );
return new Numb( Math.PI );
}
if ( this.check( 'true' ) ) {
this.consume( 'true' );
return new Numb( 1 );
}
if ( this.check( 'false' ) ) {
this.consume( 'false' );
return new Numb( 0 );
}
if ( this.check( 'Infinity' ) ) {
this.consume( 'Infinity' );
return new Numb( Infinity );
}
if ( this.check( '-Infinity' ) ) {
this.consume( '-Infinity' );
return new Numb( -Infinity );
}
if ( this.check( 'NaN' ) ) {
this.consume( 'NaN' );
return new Numb( NaN );
}
if ( this.check( 'epsilon' ) ) {
this.consume( 'epsilon' );
return new Numb( Number.EPSILON );
}
for ( var i in allFuncs ) {
if ( this.check( allFuncs[i] + '(' ) ) {
this.consume(allFuncs[i] + '(');
var argList = this.argList();
return new Operator( allFuncs[i], argList );
}
}
if ( this.check( 'IDENT' ) ) {
return new Ident( this.consume( 'IDENT' ) );
}
if ( this.check( 'NUMBER' ) ) {
return new Numb( convertFloat( this.consume( 'NUMBER' ) ) );
}
if ( this.check( '(' ) ) {
this.consume( '(' );
this.consume( 'WS' );
res = this.expression();
this.consume( 'WS' );
this.consume( ')' );
return res;
}
// jillaab taban (unary minus)
if ( this.check( '-' ) ) {
this.consume( '-' );
this.consume( 'WS' );
if ( this.check( '-' ) ) {
throw new Error( "Laba jillaab oo taban oo aan lahayn xidhmo la oggol yahay uma dhowa " + this.text.substring(0,15));
}
res = this.factor();
return new Operator( '*', [new Numb(-1), res] );
}
throw new Error( "Waxaa la filayay in la arko kelmad (tusaale ahaan aqoonsi, lambar, shaqo, xidhmo furitaan, iwm) u dhow " + this.text.substring(0,15));
},
};
// Dhamaadka koodka falanqaynta.
// Ku saleysan https://floating-point-gui.de/errors/comparison/
var almostEquals = function( a, b ) {
var absA = Math.abs(a);
var absB = Math.abs(b);
var diff = Math.abs(a-b);
var epsilon = Number.EPSILON; /// Ma hubno haddii tani ay tahay qiimo fiican oo loogu talagalay epsilon
var minNormal = Math.pow( 2, -1022 );
if ( a===b) {
return true;
}
// Min normal of double = 2^-1022
if ( a==0 || b==0 || absA+absB < minNormal ) {
return diff < epsilon * minNormal;
}
return diff / Math.min((absA + absB), Number.MAX_VALUE) < epsilon;
};
// elm: Curiyaha laga helayo qiimaha
// Khariidadaynta si loogu habeeyo qiimaha (badanaa tani waa this.mappingInput[element item id])
var getValueOfElm = function (elm, mapping) {
var val;
if ( elm.hasAttribute( 'data-calculator-real-value' ) ) {
// Waxaan haynaa qiimo aan qaabaysnayn oo la dejiyay. Isticmaal taas oo ka bood wixii khariidadayn ah.
return parseFloat( elm.getAttribute( 'data-calculator-real-value' ) );
} else if ( elm.tagName === 'INPUT' || elm.tagName === 'SELECT' ) {
if ( elm.type === 'radio' || elm.type === 'checkbox' ) {
// Radio/checkboxes looma oggola inay yeeshaan khariidadayn
return elm.checked ? convertFloat( elm.value ) : 0;
}
val = elm.value;
} else {
val = elm.textContent;
}
if ( typeof val === 'string' ) {
val = val.trim();
var mapVals = [ val, val.toLowerCase() ];
for ( var k = 0; k < mapVals.length; k++ ) {
if (mapping && typeof mapping[mapVals[k]] === 'number' ) {
return mapping[mapVals[k]];
} else if ( mapping && [ 'Infinity', '-Infinity', 'NaN' ].indexOf( mapping[mapVals[k]] ) !== -1 ) {
return parseFloat( mapping[mapVals[k]] );
}
}
}
return convertFloat( val );
};
// Qiimee qiimaha AST xilliga socodka (runtime).
var evaluate = function( ast ) {
var that = this;
var elmList = this.elmList;
var i, then, ielse, res, elm;
if ( ast instanceof Numb ) {
return ast.value;
}
if ( ast instanceof Ident ) {
elm = elmList[ast.value];
if ( elm === undefined ) {
console.log( "Xisaabiyaha: Tixraaca '" + ast.value + "' laakiin ma jiro wax beer ah oo magacaas leh" );
return NaN;
}
return getValueOfElm( elm, this.mappingInput[elm.id.replace( /^(?:calcdisambig-\d+-)?calculator-field-/, '' )] );
}
if ( ast instanceof Operator ) {
// Kiis gaar ah, index() ma qiimeeyo doodda koowaad si toos ah
// index() waa sida hawlwadeenka tusmada saf-xaddidan (nooc ka mid ah)
// Waxay qiimaysaa dooddeeda labaad waxayna ku daraysaa taas aqoonsiga koowaad
if ( 'index' === ast.op ) {
if ( ast.args.length < 2 || !( ast.args[0] instanceof Ident ) ) {
return NaN;
}
var indexValue = Math.floor(this.evaluate( ast.args[1] ));
if ( !Number.isSafeInteger( indexValue ) || indexValue < 0 ) {
return NaN;
}
res = elmList[ast.args[0].value + indexValue];
if ( res === undefined ) {
return ast.args.length >= 3 ? this.evaluate( ast.args[2] ) : NaN;
}
return getValueOfElm( res, this.mappingInput[res.id.replace( /^(?:calcdisambig-\d+-)?calculator-field-/, '' )] );
}
// Hel qiimaha curiyaha la doortay ee kooxda raadiyaha ama NaN haddii uusan jirin mid la doortay
// Si ka duwan waxyaabaha badankooda, doodda koowaad waxay tilmaamaysaa magaca kooxda raadiyaha ee ma aha aqoonsi.
if ( ast.op === 'radiogroup' ) {
if ( ast.args.length < 1 || !( ast.args[0] instanceof Ident ) ) {
return NaN;
}
var radioName = ast.args[0].value;
elm = this.parent.querySelector( 'input:checked[type=radio][name=' + CSS.escape( 'calcgadget-' + this.rand + '-' + radioName ) + ']' );
if ( !elm ) {
return NaN;
}
return this.evaluate( new Ident( elm.id.replace( /^(?:calcdisambig-\d+-)?calculator-field-/, '' ) ) );
}
if ( ast.op === 'getclick' ) {
if ( ast.args.length < 1 || !( ast.args[0] instanceof Ident ) ) {
return NaN;
}
switch( ast.args[0].value.toLowerCase() ) {
case 'x':
return this.clickX;
case 'prevx':
return this.clickPrevX;
case 'prevpercentx':
return this.clickPrevPercentX;
case 'startpercentx':
return this.clickStartPercentX;
case 'startx':
return this.clickStartX;
case 'percentx':
return this.clickPercentX;
case 'y':
return this.clickY;
case 'percenty':
return this.clickPercentY;
case 'prevy':
return this.clickPrevY;
case 'prevpercenty':
return this.clickPrevPercentY;
case 'starty':
return this.clickStartY;
case 'startpercenty':
return this.clickStartPercentY;
case 'inprogress':
return this.clickInProgress;
case 'type':
// 1 = bilaab, 2 - dhaqaaq, 3 = dhammaaday, 4 = jooji
return this.clickType;
default:
return NaN;
}
}
// Hubi haddii saacad (timer) gaar ah ay shaqaynayso.
// timer() waxay soo celisaa 0 ama 1 haddii saacad ay jirto
// timer( timerName) waxay hubisaa saacadaas gaarka ah
// timer(timerName, trueValue, falseValue ) waxay soo celisaa qiimo gaar ah.
if ( ast.op === 'timer' ) {
if (!this.repeatInfo) {
return ast.args.length >= 3 ? this.evaluate( ast.args[2] ) : 0;
}
if (ast.args.length < 1 || (ast.args[0] instanceof Ident && ast.args[0].value === this.repeatInfo.id) ) {
return ast.args.length >= 2 ? this.evaluate( ast.args[1] ) : 1;
}
return ast.args.length >= 3 ? this.evaluate( ast.args[2] ) : 0;
}
if ( ast.op === 'timeriterations' ) {
if (!this.repeatInfo) {
return NaN;
}
if (ast.args.length < 1 || (ast.args[0] instanceof Ident && ast.args[0].value === this.repeatInfo.id) ) {
return this.repeatInfo.iterationsSoFar;
}
return NaN;
}
if ( ast.op === 'timertime' ) {
if (!this.repeatInfo) {
return NaN;
}
if (ast.args.length < 1 || (ast.args[0] instanceof Ident && ast.args[0].value === this.repeatInfo.id) ) {
return (Date.now() - this.repeatInfo.timeStart)/1000;
}
return NaN;
}
// Bilowga shaqooyinka qiimeeya doodahooda.
evaledArgs = ast.args.map( function (i) { return that.evaluate( i ) } );
if ( mathFuncs.indexOf(ast.op) !== -1 ) {
return Math[ast.op].apply( Math, evaledArgs );
}
if ( 'coalesce' === ast.op ) {
for ( var k = 0; k < evaledArgs.length; k++ ) {
if ( !isNaN( evaledArgs[k] ) ) {
return evaledArgs[k];
}
}
return NaN;
}
if ( 'ifzero' === ast.op ) {
if ( evaledArgs.length < 1 ) {
return NaN;
}
then = evaledArgs.length < 2 ? 1 : evaledArgs[1];
ielse = evaledArgs.length < 3 ? 0 : evaledArgs[2];
return almostEquals( evaledArgs[0], 0 ) ? then : ielse;
}
// Ka soo horjeeda ifzero
if ( 'if' === ast.op ) {
if ( evaledArgs.length < 1 ) {
return NaN;
}
then = evaledArgs.length < 2 ? 1 : evaledArgs[1];
ielse = evaledArgs.length < 3 ? 0 : evaledArgs[2];
return !almostEquals( evaledArgs[0], 0 ) ? then : ielse;
}
if ( 'ifequal' === ast.op ) {
if ( evaledArgs.length < 2 ) {
return NaN;
}
then = evaledArgs.length < 3 ? 1 : evaledArgs[2];
ielse = evaledArgs.length < 4 ? 0 : evaledArgs[3];
return almostEquals( evaledArgs[0], evaledArgs[1] ) ? then : ielse;
}
if ( 'iffinite' === ast.op ) {
if ( evaledArgs.length < 1 ) {
return NaN;
}
then = evaledArgs.length < 2 ? 1 : evaledArgs[1];
ielse = evaledArgs.length < 3 ? 0 : evaledArgs[2];
return isFinite( evaledArgs[0] ) ? then : ielse;
}
if ( 'ifnan' === ast.op ) {
if ( evaledArgs.length < 1 ) {
return NaN;
}
then = evaledArgs.length < 2 ? 1 : evaledArgs[1];
ielse = evaledArgs.length < 3 ? 0 : evaledArgs[2];
return isNaN( evaledArgs[0] ) ? then : ielse;
}
if ( 'ifpositive' === ast.op ) {
if ( evaledArgs.length < 1 ) {
return NaN;
}
then = evaledArgs.length < 2 ? 1 : evaledArgs[1];
ielse = evaledArgs.length < 3 ? 0 : evaledArgs[2];
return evaledArgs[0] >= 0 ? then : ielse;
}
// Waxaan ka labalabaynayaa waxa saxda ah ee laga yeelayo arrimaha wareegga qodobka sabbaynaya (floating point rounding issues) halkan
// Kuwani waxay khaldami doonaan dhinaca soo celinta runta ah marka la siiyo khaladka wareegga. Dadku waxay isticmaali karaan ifpositive() haddii ay u baahan yihiin saxnaansho.
if ( 'ifless' === ast.op ) {
if ( evaledArgs.length < 2 ) {
return NaN;
}
then = evaledArgs.length < 3 ? 1 : evaledArgs[2];
ielse = evaledArgs.length < 4 ? 0 : evaledArgs[3];
return evaledArgs[0] < evaledArgs[1] && !almostEquals( evaledArgs[0], evaledArgs[1] ) ? then : ielse;
}
if ( 'ifgreater' === ast.op ) {
if ( evaledArgs.length < 2 ) {
return NaN;
}
then = evaledArgs.length < 3 ? 1 : evaledArgs[2];
ielse = evaledArgs.length < 4 ? 0 : evaledArgs[3];
return evaledArgs[0] > evaledArgs[1] && !almostEquals( evaledArgs[0], evaledArgs[1] ) ? then : ielse;
}
if ( 'iflessorequal' === ast.op ) {
if ( evaledArgs.length < 2 ) {
return NaN;
}
then = evaledArgs.length < 3 ? 1 : evaledArgs[2];
ielse = evaledArgs.length < 4 ? 0 : evaledArgs[3];
return evaledArgs[0] <= evaledArgs[1] || almostEquals( evaledArgs[0], evaledArgs[1] ) ? then : ielse;
}
if ( 'ifgreaterorequal' === ast.op ) {
if ( evaledArgs.length < 2 ) {
return NaN;
}
then = evaledArgs.length < 3 ? 1 : evaledArgs[2];
ielse = evaledArgs.length < 4 ? 0 : evaledArgs[3];
return evaledArgs[0] >= evaledArgs[1] || almostEquals( evaledArgs[0], evaledArgs[1] ) ? then : ielse;
}
// Miyuu tani isticmaashaa almostEquals???
if ( 'ifbetween' === ast.op ) {
if ( evaledArgs.length < 3 ) {
return NaN;
}
then = evaledArgs.length < 4 ? 1 : evaledArgs[3];
ielse = evaledArgs.length < 5 ? 0 : evaledArgs[4];
return evaledArgs[0] >= evaledArgs[1] && evaledArgs[0] <= evaledArgs[2] ? then : ielse;
}
if ( 'bool' === ast.op ) {
if ( evaledArgs.length !== 1 ) {
return NaN;
}
return isNaN( evaledArgs[0] ) || almostEquals( evaledArgs[0], 0.0 ) ? 0 : 1;
}
if ( 'not' === ast.op ) {
if ( evaledArgs.length !== 1 ) {
return NaN;
}
return isNaN( evaledArgs[0] ) || almostEquals( evaledArgs[0], 0.0 ) ? 1 : 0;
}
if ( 'xor' === ast.op ) {
if ( evaledArgs.length !== 2 ) {
return NaN;
}
if (
( ( isNaN( evaledArgs[0] ) || almostEquals( evaledArgs[0], 0.0 ) ) && !( isNaN( evaledArgs[1] ) || almostEquals( evaledArgs[1], 0.0 ) ) ) ||
( ( isNaN( evaledArgs[1] ) || almostEquals( evaledArgs[1], 0.0 ) ) && !( isNaN( evaledArgs[0] ) || almostEquals( evaledArgs[0], 0.0 ) ) )
) {
return 1;
} else {
return 0;
}
}
// Short circuit sida lua
if ( 'and' === ast.op ) {
for ( i = 0; i < evaledArgs.length; i++ ) {
if ( isNaN( evaledArgs[i] ) || almostEquals( evaledArgs[i], 0.0 ) ) {
return evaledArgs[i];
}
}
return evaledArgs.length >= 1 ? evaledArgs[evaledArgs.length-1] : 1;
}
if ( 'or' === ast.op ) {
for ( i = 0; i < evaledArgs.length; i++ ) {
if ( !isNaN( evaledArgs[i] ) && !almostEquals( evaledArgs[i], 0.0 ) ) {
return evaledArgs[i];
}
}
return evaledArgs.length >= 1 ? evaledArgs[evaledArgs.length-1] : 0;
}
// Hawlwadeennada bitwise (lambarada loo loola dhaqmo sida integer 32bit ah). Kuwa binary-ga ah waxay qaadan karaan tiro kasta oo dood ah.
if ( 'bitand' === ast.op ) {
if ( evaledArgs.length < 1 ) {
return NaN;
}
res = evaledArgs[0];
for ( i = 1; i < evaledArgs.length; i++ ) {
res = res & evaledArgs[i];
}
return res;
}
if ( 'bitor' === ast.op ) {
if ( evaledArgs.length < 1 ) {
return NaN;
}
res = evaledArgs[0];
for ( i = 1; i < evaledArgs.length; i++ ) {
res = res | evaledArgs[i];
}
return res;
}
if ( 'bitxor' === ast.op ) {
if ( evaledArgs.length < 1 ) {
return NaN;
}
res = evaledArgs[0];
for ( i = 1; i < evaledArgs.length; i++ ) {
res = res ^ evaledArgs[i];
}
return res;
}
// Hawlwadeennada bitwise ee aan qaadanayn tiro aan la koobin oo ops ah.
if ( 'bitnot' === ast.op ) {
if ( evaledArgs.length < 1 ) {
return NaN;
}
return ~evaledArgs[0];
}
if ( 'bitleftshift' === ast.op ) {
if ( evaledArgs.length < 2 ) {
return NaN;
}
return evaledArgs[0] << evaledArgs[1];
}
if ( 'bitlogicrightshift' === ast.op ) {
if ( evaledArgs.length < 2 ) {
return NaN;
}
return evaledArgs[0] >>> evaledArgs[1];
}
if ( 'bitarithrightshift' === ast.op ) {
if ( evaledArgs.length < 2 ) {
return NaN;
}
return evaledArgs[0] >> evaledArgs[1];
}
// switch(value,2,valueFor2,5,valueFor5,...,valueIfNoneMatch)
// dooro doodda halka imtixaanku uu ka yar yahay ama u siman yahay value.
if ( 'switch' === ast.op ) {
if ( evaledArgs.length < 2 ) {
return NaN;
}
var defaultVal = NaN;
if ( evaledArgs.length % 2 === 0 ) {
// Doodda ugu dambeysa waa default haddii tirada dooduhu ay tahay mid laba-jibaaran (even).
defaultVal = evaledArgs[evaledArgs.length-1];
}
for ( i = 1; i < evaledArgs.length-1; i+=2 ) {
if ( evaledArgs[0] <= evaledArgs[i] || almostEquals( evaledArgs[i], evaledArgs[0] ) ) {
return evaledArgs[i+1];
}
}
return defaultVal;
}
// js Math.round waa mid qariib ah. Samee noocaada. Ku saleysan https://stackoverflow.com/questions/11832914/how-to-round-to-at-most-2-decimal-places-if-necessary
// Tani waxay wareejineysaa wareeg-badh uga fog eber, iyada oo wadata sixitaanka qaladka dhibicda sabeynaya.
if ( 'round' === ast.op ) {
var decimals = evaledArgs.length >= 2 ? evaledArgs[1] : 0;
var p = Math.pow( 10, decimals );
var n = (evaledArgs[0] * p) * (1 + Number.EPSILON);
return Math.round(n)/p;
}
// Haddii qof uu rabo js round caadi ah.
if ( ast.op === 'jsround' ) {
return Math.round.apply( Math, evaledArgs );
}
if ( evaledArgs.length !== 2 ) {
throw new Error( "Tiro aan la filayn oo ah doodaha " + ast.op );
}
if ( ast.op === '*' ) return evaledArgs[0]*evaledArgs[1];
if ( ast.op === '/' ) return evaledArgs[0]/evaledArgs[1];
if ( ast.op === '+' ) return evaledArgs[0]+evaledArgs[1];
if ( ast.op === '-' ) return evaledArgs[0]-evaledArgs[1];
if ( ast.op === '%' ) return evaledArgs[0]%evaledArgs[1];
throw new Error( "Hawlwadeen aan la aqoonsan " + ast.op );
}
return NaN;
};
// Bilow koodka jaantus-ku-tiirsanaanta (dependency graph)
var getIdentifiers = function( tree ) {
if ( tree instanceof Ident ) {
return new Set([tree.value]);
}
if ( tree instanceof Operator ) {
var res = new Set([]);
var i = 0;
if ( tree.op === 'index' && tree.args.length > 0 ) {
// Kiis gaar ah - index waxay oggolaanaysaa tixraacyada dadban ee lagu go'aamiyo xilliga socodka
// Nooca mustaqbalka ayaa si firfircoon u maareyn kara tan.
i++;
getIdentifiers( tree.args[0] ).forEach( function (x) { res.add(x + '*') } );
} else if ( (tree.op === 'radiogroup' ) && tree.args.length > 0 && tree.args[0] instanceof Ident ) {
i++;
res.add( '--radio-' + tree.args[0].value );
} else if ( (tree.op === 'timer' ) ) {
if ( tree.args.length > 0 && tree.args[0] instanceof Ident ) {
i++;
res.add( '--timer-active-' + tree.args[0].value );
} else {
res.add( '--timer-active' );
}
} else if ( tree.op === 'timertime' || tree.op === 'timeriterations' ) {
res.add( '--timer-iteration' );
if ( tree.args.length > 0 && tree.args[0] instanceof Ident ) {
res.add( '--timer-iteration-' + tree.args[0].value );
} else {
res.add( '--timer-iteration' );
}
return res;
} else if ( tree.op === 'getclick' ) {
res.add( '--click' );
return res;
}
for ( ; i < tree.args.length; i++ ) {
getIdentifiers( tree.args[i] ).forEach( function (x) { res.add(x) } );
}
return res;
}
return new Set();
};
// tusaale ahaan haddii a=foo+1 markaas backlinks['foo'] = ['a',...]
var buildBacklinks = function (items, radioGroups) {
var backlinks = Object.create(null);
for ( var item in items ) {
var idents = getIdentifiers( items[item] );
// Set masamayso loops-ka for..in, noocanique MW wuxuu ka mamnuucayaa for..of
idents.forEach( function (ident) {
if ( !backlinks[ident] ) {
backlinks[ident] = [];
}
backlinks[ident].push( item );
} );
}
// Waxaan isticmaalnaa aqoonsiyada ka bilaabmaya -- ujeeddooyin gaar ah
// Shay kasta oo raadiyaha ah waa inuu ku xiran yahay midba midka kale, maadaama haddii mid la doorto kuwa kalena la diido.
var identPrefix = '--radio-';
for ( var groupName in radioGroups ) {
if ( backlinks[identPrefix + groupName] == undefined ) {
backlinks[identPrefix + groupName] = [];
}
for ( var i = 0; i < radioGroups[groupName].length; i++ ) {
backlinks[identPrefix + groupName].push( radioGroups[groupName][i] );
if ( backlinks[radioGroups[groupName][i]] == undefined ) {
backlinks[radioGroups[groupName][i]] = [];
}
backlinks[radioGroups[groupName][i]].push( identPrefix + groupName );
}
}
return backlinks;
};
// Dhamaadka koodka jaantus-ku-tiirsanaanta
// Bilow koodka sameeya dejinta iyo isdhexgalka HTML.
var setup = function ( $content ) {
// Waxaan u oggolaannaa isticmaaleyaasha inay ku ururiyaan widgets-ka xisaabiyaha gudaha <div class="calculator-container"> si loo koobiyo aqoonsiyada kooxdaas oo keliya. Sidan oo kale waxaad awoodtaa inaad isticmaasho qaab-dhismeed gaar ah jeer badan isla bogga.
// (Malaha waa inaynu u beddelno <fieldset>?).
var containers = Array.from( $content.find( '.calculator-container' ) );
for ( var i = 0; i < containers.length; i++ ) {
var calc = new CalculatorWidgets( Array.from( containers[i].getElementsByClassName( 'calculator-field' ) ), containers[i] );
}
// Wax kasta oo aan ku jirin sanduuq waxaa lagu xaddidayaa bogga.
var elms = Array.from( $content.find( '.calculator-field' ) );
new CalculatorWidgets( elms, $content[0] );
$content.find( '.calculator-field-label').replaceWith( function() {
var l = $( '<label>' );
// Sababaha gelitaanka ee codex, mararka qaarkood waa inaan samaynaa sumad aan lahayn sifo for (tusaale ahaan radiogroups)
if ( this.dataset.for !== undefined ) {
if ( !this.dataset.for.match( /^(?:calcdisambig-\d+-)?calculator-field-[a-zA-Z_][a-zA-Z0-9_]*$/ ) || !$content.find( '#' + $.escapeSelector( this.dataset.for ) ).length ) {
return this;
}
l.attr( 'for', this.dataset.for );
}
if ( this.id ) {
l.attr( 'id', this.id );
}
if ( this.title ) {
l.attr( 'title', this.title );
}
if ( this.style.cssText ) {
l.attr( 'style', this.style.cssText );
}
if ( this.classList.contains( 'cdx-label__label' ) ) {
mw.loader.load( '@wikimedia/codex' );
}
if ( this.className !== 'calculator-field-label' ) {
var extraClass = this.dataset.calculatorClass === undefined ? '' : ' ' + this.dataset.calculatorClass;
l.attr( 'class', this.className.replace( /(^| )calculator-field-label( |$)/g, ' ' ) + extraClass );
}
l.append( this.childNodes );
return l;
} );
};
var doStats = function () {
if ( window.calculatorStatsAlreadyDone !== true ) {
window.calculatorStatsAlreadyDone = true;
mw.track( 'stats.mediawiki_gadget_calculator_total' );
mw.track( 'stats.mediawiki_gadget_calculator_wiki_total', 1, { wiki: mw.config.get( 'wgDBname' ) } );
var pageName = encodeURIComponent( mw.config.get( 'wgTitle' ).replace( / /g, '_' ) );
// alfanumarik iyo hoosta (underscore) oo keliya.
pageName = pageName.replace( /[^a-zA-Z0-9_]/g, '_' );
mw.track( 'stats.mediawiki_gadget_calculator_page_total', 1, { wiki: mw.config.get( 'wgDBname' ), page: pageName, NS: mw.config.get( 'wgNamespaceNumber' ) } );
}
};
var createSelect = function( elm ) {
var sel = document.createElement( 'select' );
var mapping;
try {
mapping = JSON.parse( elm.dataset.calculatorMapping );
} catch(e) {
console.log( "Xisaabiyaha: Khalad ka dhacay habaynta khariidadaynta ee " + elm.id + ". " + e.message );
return sel;
}
if ( typeof mapping !== 'object' ) {
console.log( "Xisaabiyaha: Khalad ka dhacay habaynta khariidadaynta ee " + elm.id + ". nooc aan la filayn" );
return sel;
}
var opt;
for ( var i in mapping ) {
if ( typeof mapping[i] === 'object' ) {
var optgroup = document.createElement( 'optgroup' );
optgroup.label = i;
sel.appendChild( optgroup );
// Fiiro gaar ah: optgroup lama gali karo mid kale (nested).
for ( var j in mapping[i] ) {
if ( typeof mapping[i][j] === 'number' || [ 'Infinity', '-Infinity', 'NaN' ].indexOf( mapping[i][j] ) !== -1 ) {
opt = document.createElement( 'option' );
opt.value = mapping[i][j];
opt.appendChild( document.createTextNode( j ) );
optgroup.appendChild( opt );
}
}
} else if ( typeof mapping[i] === 'number' || [ 'Infinity', '-Infinity', 'NaN' ].indexOf( mapping[i] ) !== -1 ) {
opt = document.createElement( 'option' );
opt.value = mapping[i];
opt.appendChild( document.createTextNode( i ) );
sel.appendChild( opt );
}
}
return sel;
};
var CalculatorWidgets = function( elms, parent ) {
this.parent = parent;
this.rand = Math.floor(Math.random()*1000000000);
this.itemList = Object.create(null);
this.elmList = Object.create(null);
this.backlinks = Object.create(null);
this.inProgressRefresh = undefined;
this.clickX = this.clickY = this.clickPercentX = this.clickPercentY = NaN;
this.clickPrevX = this.clickPrevY = this.clickPrevPercentX = this.clickPrevPercentY = NaN;
this.clickStartX = this.clickStartY = this.clickStartPercentX = this.clickStartPercentY = NaN;
this.clickType = NaN;
this.clickInProgress = 0;
this.repeatInfo = null;
var that = this;
var radioGroups = Object.create(null);
this.buttonInfo = Object.create(null);
this.mappingInput = Object.create(null);
this.mappingOutput = Object.create(null);
this.repeatInfo = null;
if (elms.length > 200) {
console.log( "Widgets-ka xisaabiyaha ayaa ku badan bogga" );
return;
}
for ( var i in elms ) {
var elm = elms[i];
var formula = elm.dataset.calculatorFormula;
if ( formula && formula.length > 2000 ) {
console.log( "Waa laga boodayaa curiyaha leh caano aad u dhaadheer" );
continue;
}
var type = elm.dataset.calculatorType;
var readonly = !!elm.dataset.calculatorReadonly;
var id = elm.id.toString();
if ( id.match( /^(?:calcdisambig-\d+-)?calculator-field-__proto__$/ ) || elm.dataset.calculatorName === '__proto__' ) {
// Noqo mid taxaddar badan
throw new Error( "Aqoonsiga xisaabiyaha ee aan sax ahayn: " + id );
}
if ( !id ) {
id = 'calculator-field-auto' + Math.floor( Math.random()*10000000 ) + 'unnamed';
}
if ( this.parent.classList.contains( 'calculator-container' ) && document.getElementById( id ) !== elm ) {
// Waxaa jira aqoonsi laba-laab ah, mana joogno heerka sare.
// Tani ma aucto, maadaama aadan tixraaci karin adiga oo isticmaalaya sifooyin kale (tusaale ahaan aria-labelledby, aria-describedby) ama bartilmaameedyada xiriirka, laakiin ugu yaraan ma calaamadin doonno shayga khaldan.
var labelsToUpdate = this.parent.querySelectorAll( ":scope .calculator-field-label[data-for=\"" + CSS.escape( id ) + "\"]" );
id = 'calcdisambig-' + this.rand + '-' + id;
for ( var l = 0; l < labelsToUpdate.length; l++ ) {
labelsToUpdate[l].dataset.for = id;
}
}
var defaultVal = ("" + elm.textContent).trim();
if ( type === undefined || !id.match( /^(?:calcdisambig-\d+-)?calculator-field-[a-zA-Z_][a-zA-Z0-9_]*$/ ) ) {
console.log( "Waa laga boodayaa " + id );
continue;
}
var formulaAST;
try {
formulaAST = (new Parser( formula )).parse();
} catch( e ) {
console.log( "Khalad ka dhacay falanqaynta caanaha ee " + id + ": " + e.message + ". Caanaha la bixiyay:" + formula );
continue;
}
if ( elm.className.match( /(^| )cdx-/ ) || ( elm.dataset.calculatorClass && elm.dataset.calculatorClass.match( /(^| )cdx-/ ) ) ) {
// Gelitaanku waxay isticmaashaa modules-ka codex ee CSS-ku-saleysan. Nasiib xumo waxaan u malaynayaa inaan u baahanahay inaan soo rarno wax walba.
// waxaan yeelan doonaa iftiin wax aan la habayn marka la raranayo si kasta oo aan u samayno maadaama aan u beddelayno curiyayaasha xilliga raritaanka, markaa ha ka welwelin taas.
mw.loader.load( '@wikimedia/codex' );
}
if ( type !== 'plain' && type !== 'passthru' ) {
var input = type === 'select' ? createSelect( elm ) : document.createElement( 'input' );
input.className = 'calculator-field-live';
if ( elm.className !== 'calculator-field' ) input.className += ' ' + elm.className.replace( /(^| )calculator-field($| )/g, ' ' );
input.readOnly = readonly;
// Haddii defaultVal ay madhan tahay, waxaan ku billaabaynaa qiimaha sanduuqa qoraalka mid madhan halkii ay ka noqon lahayd NaN.
if ( defaultVal !== '' ) {
input.value = convertFloat(defaultVal);
}
input.style.cssText = elm.style.cssText; // Tani waa inay noqotaa mid badbaado leh sababtoo ah css-ka elm waxaa sifeeyey MW
if ( elm.dataset.calculatorSize ) {
var size = parseInt( elm.dataset.calculatorSize );
input.size = size;
// Browser-radu aad bay isku khilaafsan yihiin markaa sidoo kale u deji sida css
// Firefox waxay tusi doontaa xulaha lambarka oo u muuqda mid ah 20px ballac ah iyadoon loo eegayn farta.
// Chrome waxay tusi doontaa xulaha kaliya marka la dul-istaago (hover).
input.style.width = type === 'number' ? "calc( " + size + 'ch' + ' + 20px)': size + 'ch';
}
// Ku dar fasalka css, laakiin kaliya haddii qalabku shaqaynayo.
if ( elm.dataset.calculatorClass ) input.className += ' ' + elm.dataset.calculatorClass;
if ( elm.dataset.calculatorSize ) input.size = elm.dataset.calculatorSize;
if ( elm.dataset.calculatorMax ) input.max = elm.dataset.calculatorMax;
if ( elm.dataset.calculatorMin ) input.min = elm.dataset.calculatorMin;
if ( elm.dataset.calculatorPlaceholder ) input.placeholder = elm.dataset.calculatorPlaceholder;
if ( elm.dataset.calculatorStep ) input.step = elm.dataset.calculatorStep;
if ( elm.dataset.calculatorPrecision ) input.dataset.calculatorPrecision = elm.dataset.calculatorPrecision;
if ( elm.dataset.calculatorExponentialPrecision ) input.dataset.calculatorExponentialPrecision = elm.dataset.calculatorExponentialPrecision;
if ( elm.dataset.calculatorDecimals ) input.dataset.calculatorDecimals = elm.dataset.calculatorDecimals;
if ( elm.dataset.calculatorNanText ) input.dataset.calculatorNanText = elm.dataset.calculatorNanText;
if ( type === 'radio' ) {
// Magacu wuxuu u fiican yahay kooxaha raadiyaha. Ku dar hordhac si looga hortago dom clobbering ama haddii ay ku dambeyso foom si u gaar ah. Ku dar rand si loo gaaro mid gaar ah oo dhexmara sanduuqyada koobiyaynta
if ( elm.dataset.calculatorName ) input.name = 'calcgadget-' + this.rand + '-' + elm.dataset.calculatorName;
if ( radioGroups[elm.dataset.calculatorName] === undefined ) {
radioGroups[elm.dataset.calculatorName] = [];
}
radioGroups[elm.dataset.calculatorName][radioGroups[elm.dataset.calculatorName].length] = id.replace( /^(?:calcdisambig-\d+-)?calculator-field-/, '' );
}
if ( elm.dataset.calculatorInputmode ) input.inputMode = elm.dataset.calculatorInputmode;
if ( elm.dataset.calculatorEnterkeyhint ) input.enterKeyHint = elm.dataset.calculatorEnterkeyhint;
if ( elm.getAttribute( 'aria-describedby' ) !== null ) input.setAttribute( 'aria-describedby', elm.getAttribute( 'aria-describedby' ) );
if ( elm.getAttribute( 'aria-labelledby' ) !== null ) input.setAttribute( 'aria-labelledby', elm.getAttribute( 'aria-labelledby' ) );
if ( elm.getAttribute( 'aria-label' ) !== null ) input.setAttribute( 'aria-label', elm.getAttribute( 'aria-label' ) );
if ( elm.getAttribute( 'aria-owns' ) !== null ) input.setAttribute( 'aria-owns', elm.getAttribute( 'aria-owns' ) );
if ( elm.getAttribute( 'aria-flowto' ) !== null ) input.setAttribute( 'aria-flowto', elm.getAttribute( 'aria-flowto' ) );
if ( elm.getAttribute( 'role' ) !== null ) input.setAttribute( 'role', elm.getAttribute( 'role' ) );
// Si loo taageero dejinta doorka kaliya haddii qalabku shaqaynayo
if ( elm.dataset.calculatorAriaRole ) input.setAttribute( 'role', elm.dataset.calculatorAriaRole );
if ( ['true', 'false'].indexOf( elm.dataset.calculatorAriaAtomic ) !== -1 ) input.setAttribute( 'aria-atomic', elm.dataset.calculatorAriaAtomic );
if ( elm.dataset.calculatorAriaRelevant ) input.setAttribute( 'aria-relevant', elm.dataset.calculatorAriaRelevant );
if ( ['off', 'polite', 'assertive'].indexOf( elm.dataset.calculatorAriaLive ) !== -1 ) {
input.setAttribute( 'aria-live', elm.dataset.calculatorAriaLive );
} else {
// Waxaan ula dhaqmeynaa qiyamka aan shaqaynayn sida in aan waxba la dejin, taas oo ka dhaxasha waalidka taas oo ka duwan dejinta off. Tani waxay u oggolaanaysaa isticmaalaha inuu ka gudbo
// Waxaan ин kale u dejin karnaa caadiga ah ee polite unugyada leh caano
if ( formula ) {
input.setAttribute( 'aria-live', 'polite' );
}
}
if ( type === 'number' || type === 'text' || type === 'radio' || type === 'checkbox' || type === "hidden" || type === "range" ) {
input.type = type;
}
if ( type === 'select' ) {
if ( elm.dataset.calculatorValue ) {
// U oggolow dadka inay ka gudbaan qiimaha caadiga ah ee select oo leh sifo, maadaama qiimaha uusan noqon karin mid aan ahayn js fallback fiican.
input.value = elm.dataset.calculatorValue;
}
}
if ( type === 'radio' || type === 'checkbox' ) {
input.onchange = this.changeHandler.bind(this); // qaar ka mid ah browser-ada ma shidayaan oninput ee checkboxes/radio
if ( elm.dataset.calculatorChecked === 'true' || elm.dataset.calculatorChecked === '1' ) {
input.checked = true;
} else if ( elm.dataset.calculatorChecked === 'false' || elm.dataset.calculatorChecked === '0' ) {
input.checked = false;
} else if ( !isNaN( defaultVal ) && !almostEquals( defaultVal, 0 ) ) {
// Haddii wax walba ay guuldarraystaan, isticmaal qiimaha caadiga ah si aad u go'aamiso in la doortay iyo in kale
input.checked = true;
}
// U oggolow isticmaalaha inuu dejiyo qiimo kale oo la doortay oo ka duwan 1. Tani waxay noqon doontaa qiimaha marka uu doorto bini'aadam, laakiin khasab ma aha haddii ay tahay caano
// Waxaan isticmaalnaa data-calculator-value gaar ah haddii la dejiyo oo ay run tahay, haddii kale waxaan isticmaalnaa defaultVal (text firstChild) haddii ay run tahay, iyo 1 sida xulashada ugu dambeysa.
var checkValue = convertFloat( elm.dataset.calculatorValue || '' );
if ( !isNaN( checkValue ) && !almostEquals( checkValue, 0 ) ) {
input.value = checkValue;
input.dataset.calculatorValue = checkValue;
} else if ( !isNaN( defaultVal ) && !almostEquals( defaultVal, 0 ) ) {
input.value = defaultVal;
input.dataset.calculatorValue = defaultVal;
} else {
input.value = 1;
input.dataset.calculatorValue = 1;
}
}
if ( elm.dataset.calculatorMapping && type === 'text') {
this.processMapping( elm.dataset.calculatorMapping, id.replace( /^(?:calcdisambig-\d+-)?calculator-field-/, '' ) );
}
input.id = id;
elm.replaceWith( input );
elm = input;
input.addEventListener( 'input', this.changeHandler.bind(this) );
} else {
elm.classList.remove( 'calculator-field' );
elm.classList.add( 'calculator-field-live' );
if ( elm.dataset.calculatorClass ) elm.className += ' ' + elm.dataset.calculatorClass;
if ( ['off', 'polite', 'assertive' ].indexOf( elm.dataset.calculatorAriaLive ) !== -1 ) {
elm.setAttribute( 'aria-live', elm.dataset.calculatorAriaLive );
} else if ( formula && type !== 'passthru' && !elm.dataset.calculatorAriaLive ) {
// Ku dhawaaq wax soo saarka plain si caadi ah, laakiin u oggolow isticmaalaha inuu ka gudbo. Ula dhaqmo qiimaha aan shaqaynayn sida ha dejin, maadaama aan la dejin ay tahay mid xoogaa ka duwan qiimaha off.
elm.setAttribute( 'aria-live', 'polite' );
}
if ( ['true', 'false'].indexOf( elm.dataset.calculatorAriaAtomic ) !== -1 ) elm.setAttribute( 'aria-atomic', elm.dataset.calculatorAriaAtomic );
// Taageer in si toos ah loo dejiyo doorka ama la isticmaalo sifada data, haddii ay dhacdo in dadka ay rabaan in ay dejiyaan doorka kaliya kiiska JS.
if ( elm.dataset.calculatorAriaRole ) elm.setAttribute( 'role', elm.dataset.calculatorAriaRole );
if ( elm.dataset.calculatorAriaRelevant ) elm.setAttribute( 'aria-relevant', elm.dataset.calculatorAriaRelevant );
if ( elm.id === '' ) {
elm.id = id;
}
if ( elm.dataset.calculatorMapping && type === 'plain') {
this.processMapping( elm.dataset.calculatorMapping, id.replace( /^(?:calcdisambig-\d+-)?calculator-field-/, '' ) );
}
}
var itemId = id.replace( /^(?:calcdisambig-\d+-)?calculator-field-/, '' );
this.itemList[itemId] = formulaAST;
this.elmList[itemId] = elm;
}
this.backlinks = buildBacklinks( this.itemList, radioGroups );
if ( this.parent.dataset.calculatorRefreshOnLoad && this.parent.dataset.calculatorRefreshOnLoad === 'true' ) {
this.inProgressRefresh = Object.create(null);
var unsetBusy = this.setBusy();
this.refresh( Object.keys( this.itemList ).filter( function (a) { return !(that.itemList[a] instanceof Null); } ) );
this.inProgressRefresh = undefined;
unsetBusy();
}
this.setupButtons();
};
// MappingText waa json blob oo ah {"some string": number}
// Waxaa loo isticmaalaa in lagu khariidadeeyo lambarrada <-> xarfo inta lagu jiro gelitaanka/soo saarka.
CalculatorWidgets.prototype.processMapping = function ( mappingText, itemId ) {
var mapping;
try {
mapping = JSON.parse( mappingText );
} catch(e) {
console.log( "Xisaabiyaha: Khalad ka dhacay habaynta khariidadaynta ee " + itemId + ". " + e.message );
return;
}
if ( typeof mapping !== 'object' ) {
console.log( "Xisaabiyaha: Khalad ka dhacay habaynta khariidadaynta ee " + itemId + ". nooc aan la filayn" );
return;
}
this.mappingInput[itemId] = mapping;
var mapOut = Object.create(null);
for (var i in mapping) {
if ( typeof mapping[i] === 'number' || [ 'default', 'Infinity', '-Infinity', 'NaN' ].indexOf( mapping[i] ) !== -1 ) {
mapOut[mapping[i]] = i;
}
}
this.mappingOutput[itemId] = mapOut;
};
CalculatorWidgets.prototype.stopRepeat = function () {
if ( this.repeatInfo ) {
if ( this.repeatInfo.cancelIdentifier ) {
// Haddii qodobka until uu si degdeg ah u run yahay, interval-ka waxaa laga yaabaa inaysan weli la dejin.
window.clearInterval( this.repeatInfo.cancelIdentifier );
}
var id = this.repeatInfo.id;
this.repeatInfo = null;
this.inProgressRefresh = Object.create(null);
var unsetBusy = this.setBusy();
this.refresh( [ '--timer-active', '--timer-active-' + id, '--timer-iteration', '--timer-iteration-' + id ] );
this.inProgressRefresh = undefined;
unsetBusy();
}
this.repeatInfo = null;
};
CalculatorWidgets.prototype.startRepeat = function (maxIterations, id) {
if ( this.repeatInfo ) {
console.log( "Xisaabiyaha: Waxaa la isku dayayaa in la bilaabo celcelis (repeat) marka mid kale uu horay u socdo. Tani ma aucto" );
}
this.repeatInfo = {
maxIterations: maxIterations,
iterationsSoFar: 0,
cancelIdentifier: null,
timeStart: Date.now(),
id: id
};
// Ma aha 100% cad inaan si degdeg ah u cusboonaysiinno ama sugno inta ka dambaysa celceliska koowaad.
if ( this.inProgressRefresh ) {
console.log( "Xisaabiyaha: Cusboonaysiinta ayaa hore u socota. Tani waxay u badantahay in ay muujineyso cillad (bug)" );
} else {
this.inProgressRefresh = Object.create(null);
}
var unsetBusy = this.setBusy();
this.refresh( [ '--timer-active', '--timer-active-' + id, '--timer-iteration', '--timer-iteration-' + id ] );
this.inProgressRefresh = undefined;
unsetBusy();
};
CalculatorWidgets.prototype.incrementRepeatIteration = function (until) {
this.repeatInfo.iterationsSoFar++;
if ( this.repeatInfo.iterationsSoFar > this.repeatInfo.maxIterations ) {
this.stopRepeat();
return false;
}
if ( until ) {
var untilRes = this.evaluate( until );
if ( !isNaN( untilRes ) && !almostEquals( untilRes, 0 ) ) {
this.stopRepeat();
return false;
}
}
// Cusboonaysii beeraha ku xiran lambarka celceliska (iteration number)
var id = this.repeatInfo.id;
if ( this.inProgressRefresh ) {
console.log( "Xisaabiyaha: Cusboonaysiinta ayaa hore u socota. Tani waxay u badantahay in ay muujineyso cillad (bug)" );
} else {
this.inProgressRefresh = Object.create(null);
}
var unsetBusy = this.setBusy();
this.refresh( [ '--timer-iteration', '--timer-iteration-' + id ] );
this.inProgressRefresh = undefined;
unsetBusy();
return true;
};
var convertEventTypeToNumber = function ( type ) {
switch( type ) {
case 'pointerdown':
return 1;
case 'pointermove':
return 2;
case 'pointerup':
case 'click':
return 3;
case 'pointerleave':
return 4;
default:
throw new Error( "Nooca dhacdada ee aan la aqoonsan: " + type );
}
};
var updateClick = function(calc) {
if ( calc.inProgressRefresh ) {
console.log( "Xisaabiyaha: Cusboonaysiinta ayaa hore u socota. Tani waxay u badantahay in ay muujineyso cillad (bug)" );
} else {
calc.inProgressRefresh = Object.create(null);
}
var unsetBusy = calc.setBusy();
calc.refresh( [ '--click' ] );
calc.inProgressRefresh = undefined;
unsetBusy();
};
// Falceliyaha dhacdooyinka gujiska ee badhanka.
var makeButtonCallback = function ( calc, forElms, formulaASTs, repeat, maxIterations, toggle, until ) {
return function buttonCallback (event) {
if ( event.type !== 'click' ) {
if ( !event.isPrimary || ( !calc.clickInProgress && event.type !== 'pointerdown' ) ) {
return; // Ka bood tilmaamayaasha labaad (secondary pointers).
}
}
event.preventDefault();
doStats();
var unsetBusy = calc.setBusy(); // joojinta celcelisyadii hore waxay yeelan kartaa saameyn dhinaca ah markaa deji busy.
if ( toggle && calc.repeatInfo && calc.repeatInfo.id === event.currentTarget.id ) {
// Haddii aan gujino badhanka toggle markii labaad, waxa aan samayno oo dhan waa joojinta celceliska.
calc.stopRepeat();
unsetBusy();
return;
}
if ( maxIterations !== undefined || repeat !== undefined ) {
// Kaliya hal celcelis oo socon kara ayaa la oggol yahay hal mar.
calc.stopRepeat();
if ( maxIterations > 1 ) {
// Bilaab celcelis cusub
calc.startRepeat( maxIterations, event.currentTarget.id );
}
}
var doStuff = function(event) {
var unsetBusyInner = calc.setBusy();
var stillGoing = true;
if ( calc.repeatInfo ) {
stillGoing = calc.incrementRepeatIteration(until);
}
if ( stillGoing ) {
for ( var i = 0; i < forElms.length; i++ ) {
if ( !formulaASTs[i] || !forElms[i] ) {
console.log( "Waa laga boodayaa cusboonaysiinta badhanka sababtoo ah caanaha ama sifo for oo aan sax ahayn" );
continue;
}
var res = calc.evaluate( formulaASTs[i] );
calc.setValue( forElms[i], res );
forElms[i].dispatchEvent( new InputEvent( 'input' ) );
}
}
unsetBusyInner();
};
if ( max_iterations === undefined || maxIterations >= 1 ) {
// isuduwaha gujiska wuxuu noqon karaa mid taban ama > 100% haddii isticmaalahu gujiyay xadka (border)
if ( calc.clickInProgress ) {
calc.clickPrevX = calc.clickX;
calc.clickPrevY = calc.clickY;
calc.clickPrevPercentX = calc.clickPercentX;
calc.clickPrevPercentY = calc.clickPercentY;
}
if ( event.type === 'pointerdown' ) {
// Tani waxay xaqiijinaysaa waafaqid wanaagsan oo dhexmarta mouse-ka iyo shaashadda taabashada (touchscreen).
event.currentTarget.setPointerCapture( event.pointerId );
}
if ( event.type !== 'pointerleave' ) {
// Isuduwaha ay soo celiyeen dhacdooyinka pointerleave waa kuwo is khilaafsan.
// Gaar ahaan firefox marka menu-ka macnaha guud (context menu) laga furo right click.
calc.clickX = event.offsetX;
calc.clickY = event.offsetY;
calc.clickPercentX = 100*event.offsetX/event.currentTarget.clientWidth;
calc.clickPercentY = 100*event.offsetY/event.currentTarget.clientHeight;
calc.clickInProgress = 1;
}
calc.clickType = convertEventTypeToNumber( event.type );
if ( event.type === 'click' || event.type === 'pointerdown' ) {
calc.clickPrevX = calc.clickStartX = calc.clickX;
calc.clickPrevY = calc.clickStartY = calc.clickY;
calc.clickPrevPercentX = calc.clickStartPercentX = calc.clickPercentX;
calc.clickPrevPercentY = calc.clickStartPercentY = calc.clickPercentY;
}
updateClick(calc);
doStuff();
// Waan dhameynay dhacdooyinka gujiska.
if ( calc.clickType >= 3 ) {
calc.clickX = calc.clickY = calc.clickPercentX = calc.clickPercentY = NaN;
calc.clickPrevX = calc.clickPrevY = calc.clickPrevPercentX = calc.clickPrevPercentY = NaN;
calc.clickStartX = calc.clickStartY = calc.clickStartPercentX = calc.clickStartPercentY = NaN;
calc.clickInProgress = 0;
calc.clickType = NaN;
updateClick(calc);
}
}
unsetBusy();
// repeatInfo waxay noqon doontaa null haddii caanaha until ay u qiimeeyaan run celceliska koowaad
if ( calc.repeatInfo && maxIterations > 1 && repeat >= 500 ) {
calc.repeatInfo.cancelIdentifier = window.setInterval( doStuff, repeat );
}
};
};
var connectButtonToFormula = function ( calc, $button, forAttr, formulaAttr, repeatDuration, maxIterations, toggle, untilAttr, draggable ) {
// Kiiska loogu talagalay celceliska waa shay la mid ah sabuuradda shaxda oo si toos ah u ciaysa tallaabada xigta.
// Ma rabno in loo isticmaalo animation ama haddii kale ay wax u dhimato waxqabadka, markaa waxaan ku xaddideynaa hal mar 500ms kasta oo keliya
// oo waxaan oggolaaneynaa in kaliya hal celcelis sanduuqii kasta uu shaqeeyo hal mar.
if ( repeatDuration !== undefined ) {
repeatDuration = Math.max( 500, Math.ceil(parseFloat( repeatDuration )*1000 ) );
if ( isNaN( repeatDuration ) ) {
repeatDuration = undefined;
}
}
if ( toggle === 'false' ) {
toggle = false;
}
// Haddii aan la dejin repeatDuration ama maxIterations markaas badhanku waa caadi oo ma celceliyo laakiin ma joojiyo
// haddii repeatDuration la dejiyo oo aan la dejin maxIterations, markaas maxIterations waa mid aan la koobin (infinite)
// Haddii maxIterations uu yahay 0, markaas tani waxay joojinaysaa celceliska hadda socda iyadoon la samayn wax
// Haddii maxIterations uu yahay 1, markaas jooji laakiin samee hawlgalka badhanka caadiga ah (laakiin ha celcelin)
if ( maxIterations !== undefined ) {
maxIterations = parseInt( maxIterations );
} else if( repeatDuration ) {
maxIterations = Infinity;
}
if ( typeof forAttr !== 'string' || typeof formulaAttr !== 'string' ) {
// Wax la qabto ma jiro. Ka bood.
return;
}
if ( formulaAttr.length > 2000 || (untilAttr && untilAttr.length > 2000 ) ) {
console.log( "Waa laga boodayaa badhanka leh caano aad u dheer" );
return;
}
var until = null;
try {
until = (new Parser( untilAttr )).parse();
} catch( e ) {
console.log( "Xisaabiyaha: Khalad ka dhacay falanqaynta caanaha until ee badhanka " + $button[0].id + ": " + e.message );
}
var forList = forAttr.split( ';' );
var formulaList = formulaAttr.split( ';' );
var forElms = [];
var formulaASTs = [];
for ( var i = 0; i < forList.length; i++ ) {
if (formulaList[i] === undefined) {
break;
}
forElms[i] = calc.elmList[forList[i]];
try {
formulaASTs[i] = (new Parser( formulaList[i] )).parse();
} catch( e ) {
formulaASTs[i] = null;
console.log( "Xisaabiyaha: Khalad ka dhacay falanqaynta caanaha ee badhanka " + $button[0].id + " ee " + forList[i] + ": " + e.message );
}
}
if ( draggable ) {
$button[0].addEventListener( 'pointerdown', makeButtonCallback( calc, forElms, formulaASTs, repeatDuration, maxIterations, toggle, until ) );
$button[0].addEventListener( 'pointerup', makeButtonCallback( calc, forElms, formulaASTs, repeatDuration, maxIterations, toggle, until ) );
$button[0].addEventListener( 'pointerleave', makeButtonCallback( calc, forElms, formulaASTs, repeatDuration, maxIterations, toggle, until ) );
$button[0].addEventListener( 'pointermove', makeButtonCallback( calc, forElms, formulaASTs, repeatDuration, maxIterations, toggle, until ) );
} else {
$button[0].addEventListener( 'click', makeButtonCallback( calc, forElms, formulaASTs, repeatDuration, maxIterations, toggle, until ) );
}
};
CalculatorWidgets.prototype.connectButtonDisable = function ( button, formula ) {
if ( formula === '' || formula === '0' || formula === 'false' ) {
return;
}
if ( formula.length > 2000 ) {
console.log( "Xisaabiyaha: Caanaha curinta (disable) ee badhanka " + button.id + " waa kuwo aad u dheer" );
return;
}
var formulaAST;
try {
formulaAST = (new Parser( formula )).parse();
} catch( e ) {
console.log( "Khalad ka dhacay falanqaynta caanaha curinta ee badhanka " + button.id + ": " + e.message );
return;
}
this.buttonInfo[button.id] = {
elm: button,
formula: formulaAST,
};
// Ku dar ku-tiirsanaanta caanaha curinta geedka ku-tiirsanaanta.
var idents = getIdentifiers( formulaAST );
var that = this;
var item = '--button-disable-' + button.id;
idents.forEach( function (ident) {
if ( !that.backlinks[ident] ) {
that.backlinks[ident] = [];
}
that.backlinks[ident].push( item );
} );
// Hadda deji qiimaha bilowga ah.
var curValue = this.evaluate( formulaAST );
if ( !isNaN( curValue ) && !almostEquals( curValue, 0 ) ) {
button.disabled = true;
}
};
CalculatorWidgets.prototype.setupButtons = function() {
var calc = this;
$( this.parent ).find( '.calculator-field-button' ).replaceWith( function () {
var b = $( '<button type="button">' );
if ( this.id && this.id !== '__proto__' ) {
b.attr( 'id', this.id );
} else {
b.attr( 'id', 'calculator-button-' + Math.ceil(Math.random()*100000000000) );
}
if ( this.title ) {
b.attr( 'title', this.title );
}
if ( this.style.cssText ) {
b.attr( 'style', this.style.cssText );
}
if ( this.classList.contains( 'cdx-button' ) ) {
mw.loader.load( '@wikimedia/codex' );
}
if ( this.className !== 'calculator-field-button' ) {
var extraClass = this.dataset.calculatorClass === undefined ? '' : ' ' + this.dataset.calculatorClass;
b.attr( 'class', this.className.replace( /(^| )calculator-field-button( |$)/g, ' ' ) + extraClass );
}
if ( this.dataset.calculatorAlt ) {
b.attr( 'aria-label', this.dataset.calculatorAlt );
}
if ( this.dataset.calculatorAriaLive ) {
b.attr( 'aria-live', this.dataset.calculatorAriaLive );
}
if ( this.getAttribute( 'role' ) ) {
b.attr( 'role', this.getAttribute( 'role' ) );
}
if ( this.getAttribute( 'aria-owns' ) ) {
b.attr( 'aria-owns', this.getAttribute( 'aria-owns' ) );
}
if ( this.getAttribute( 'aria-flowto' ) ) {
b.attr( 'aria-flowto', this.getAttribute( 'aria-flowto' ) );
}
if ( this.dataset.calculatorDisabled !== undefined ) {
// TODO: Waa ay fiicnaan lahayd haddii tani ay ahaan lahayd caano.
if ( this.dataset.calculatorDisabled === 'true' || this.dataset.calculatorDisabled === '1' ) {
// Kiis fudud
b.attr( 'disabled', true );
} else {
calc.connectButtonDisable( b[0], this.dataset.calculatorDisabled );
}
}
// Tani waxay noqon doontaa no-op haddii aan la helin caano ama for la cayimay.
connectButtonToFormula(
calc,
b,
this.dataset.calculatorFor,
this.dataset.calculatorFormula,
this.dataset.calculatorDelay,
this.dataset.calculatorMaxIterations,
this.dataset.calculatorToggle,
this.dataset.calculatorUntil
);
b.append( this.childNodes );
return b;
} );
// Tani waxaa loogu talagalay in lagu oggolaado noocyada khariidadaha sawirka (image map).
$( this.parent ).find( '.calculator-field-buttonraw' ).each( function () {
if (!this.id || this.id === '__proto__') {
this.id = 'calculator-button-' + Math.ceil(Math.random()*100000000000);
}
// Hubi inaanan habaynin laba jeer.
this.classList.remove( 'calculator-field-buttonraw' );
connectButtonToFormula(
calc,
$(this),
this.dataset.calculatorFor,
this.dataset.calculatorFormula,
this.dataset.calculatorDelay,
this.dataset.calculatorMaxIterations,
this.dataset.calculatorToggle,
this.dataset.calculatorUntil,
this.classList.contains( 'calculator-field-buttondraggable' )
);
} );
};
CalculatorWidgets.prototype.changeHandler = function(e) {
this.inProgressRefresh = Object.create(null);
var unsetBusy = this.setBusy();
doStats();
e.target.removeAttribute( 'data-calculator-real-value' );
var itemId = e.target.id.replace( /^(?:calcdisambig-\d+-)?calculator-field-/, '' );
var itemsToRefresh = [ this.backlinks[itemId] ];
this.inProgressRefresh[itemId] = true;
this.setValueProperties( e.target, getValueOfElm( e.target, this.mappingInput[e.target.id.replace( /^(?:calcdisambig-\d+-)?calculator-field-/, '' )] ) );
var staritem = itemId.replace( /[0-9]+$/, '*' );
if ( itemId.match( /[0-9]+$/ ) && this.backlinks[staritem] ) {
this.inProgressRefresh[staritem] = true;
itemsToRefresh.push( this.backlinks[staritem] );
}
this.refresh( itemsToRefresh.flat() );
this.inProgressRefresh = undefined;
unsetBusy();
};
// Qaybta yar ee qaabaynta ee weli soo celisa shay u eg float.
// input type=number guud ahaan waxay filaysaa wax u muuqda sida float (Si kastaba ha ahaatee haddii la siiyo "1.200" waxay ilaalinta 0-yada).
var formatNumeric = function( n, options ) {
if ( typeof n !== "number" ) {
return n;
}
if ( !isNaN( parseInt( options.calculatorDecimals ) ) ) {
return n.toFixed( parseInt( options.calculatorDecimals ) );
}
if ( !isNaN( parseInt( options.calculatorPrecision ) ) ) {
return n.toPrecision( parseInt( options.calculatorPrecision ) );
}
if ( !isNaN( parseInt( options.calculatorExponentialPrecision ) ) ) {
return n.toExponential( parseInt( options.calculatorExponentialPrecision ) );
}
return n;
};
var format = function ( n, options, mapping ) {
var res = n.toString();
if ( typeof n !== "number" ) {
return res;
}
if ( mapping && mapping[n] ) {
return mapping[n];
}
if ( mapping && mapping['default'] !== undefined ) {
return mapping['default'];
}
if ( isNaN( n ) ) {
return options.calculatorNanText ? options.calculatorNanText : '?';
}
if ( !isNaN( parseInt( options.calculatorDecimals ) ) ) {
res = n.toFixed( parseInt( options.calculatorDecimals ) );
}
if ( !isNaN( parseInt( options.calculatorPrecision ) ) ) {
res = n.toPrecision( parseInt( options.calculatorPrecision ) );
}
if ( !isNaN( parseInt( options.calculatorExponentialPrecision ) ) ) {
res = n.toExponential( parseInt( options.calculatorExponentialPrecision ) );
}
res = res.replace( /e([+-])([0-9]+)$/, function (m, sign, exp) {
var tmp = "×10";
if ( sign === '-' ) {
tmp += '⁻';
}
tmp += exp.replace( /[0-9]/g, function (m) {
return [ '⁰', '¹', '²', '³', '⁴', '⁵', '⁶', '⁷', '⁸', '⁹' ][m];
} );
return tmp;
} );
return res;
};
CalculatorWidgets.prototype.setValuePropertiesSpecialPurpose = function( id ) {
// Malaha mustaqbalka waa inaan dejinaa CSS variables shay kasta oo ujeeddo gaar ah leh. Ma hubno in taasi ay faa'iido yeelan lahayd.
if ( id.match( /^--button-disable-.+/ ) ) {
var buttonId = id.substring(17);
if ( this.buttonInfo[buttonId] ) {
var res = this.evaluate( this.buttonInfo[buttonId].formula );
this.buttonInfo[buttonId].elm.disabled = !isNaN( res ) && !almostEquals( res, 0 );
} else {
console.log( 'Waxaa la isku dayay in la cusboonaysiiyo xaaladda curinta ee ' + buttonId + ' laakiin ma jiro badhankaas oo kale.' );
}
}
return;
};
// Deji sifo data, fasallada, iwm. Si loogu fududaado beegsiga iyada oo loo marayo CSS.
CalculatorWidgets.prototype.setValueProperties = function ( elm, value ) {
var itemId = elm.id.replace( /^(?:calcdisambig-\d+-)?calculator-field-/, '' );
elm.dataset.calculatorFieldValue = value.toFixed(5);
if ( !itemId.match( /^auto\d\d\d\d+unnamed$/ ) ) {
this.parent.style.setProperty( '--calculator-' + itemId, value );
}
if ( !isNaN( value ) && !almostEquals( value, 0 ) ) {
elm.classList.remove( 'calculator-value-false' );
elm.classList.add( 'calculator-value-true' );
} else {
elm.classList.remove( 'calculator-value-true' );
elm.classList.add( 'calculator-value-false' );
}
};
CalculatorWidgets.prototype.refresh = function (itemIds) {
var i;
// Ku saleysan https://en.wikipedia.org/wiki/Topological_sorting#Depth-first_search
var permMarks = Object.create(null);
var tempMarks = Object.create(null);
var topList = [];
var that = this;
if ( !itemIds ) {
return;
}
var visit = function( item ) {
var i;
if ( permMarks[item] ) {
return;
}
if ( tempMarks[item] ) {
if ( !item.match( /^--radio-/ ) ) {
// Loops ayaa la filayaa badhamada raadiyaha.
console.log( "Lup ayaa laga helay xisaabiyaha. '" + item + "' waxaa laga yaabaa inaan si sax ah loo cusboonaysiin. (Tani waa la filayaa badhamada raadiyaha)" );
}
return;
}
tempMarks[item] = true;
for ( i = 0; that.backlinks[item] && i < that.backlinks[item].length; i++ ) {
visit(that.backlinks[item][i]);
}
// Kiis gaar ah index()
if ( item.match( /[0-9]+$/ ) ) {
var staritem = item.replace( /[0-9]+$/, '*' );
for ( i = 0; that.backlinks[staritem] && i < that.backlinks[staritem].length; i++ ) {
visit(that.backlinks[staritem][i]);
}
}
permMarks[item] = true;
topList.push(item); // ka dib waxaan dib ugu soo noqonaa liiskan.
};
for ( i = 0; i < itemIds.length; i++ ) {
if ( itemIds[i] !== undefined ) {
visit( itemIds[i] );
}
}
for ( i = topList.length - 1; i >= 0; i-- ) {
var itemId = topList[i];
if ( this.inProgressRefresh[itemId] ) {
// Waxaa la filayaa in badhamada raadiyaha ay wareegaan (loop), maadaama ay isku xiran yihiin. Haddii aad hubiso mid, kuwa kalena way iska dejiyaan.
if ( this.elmList[itemId].type !== 'radio' ) {
console.log( "Loop la helay! Waa laga boodayaa " + itemId );
}
continue;
}
if ( itemId.match( /^--/ ) ) {
// Aqoonsi ujeeddo gaar ah leh
this.setValuePropertiesSpecialPurpose( itemId );
this.inProgressRefresh[itemId] = true;
continue;
} else if ( !this.itemList[itemId] || this.itemList[itemId] instanceof Null ) {
// Tani inta badan ma dhacayso laakiin waxaa laga yaabaa in ay dhacdo haddii cusboonaysiinta marka bogga la raranayo la dejiyo ama badhamada raadiyaha.
var elm = this.elmList[itemId];
this.setValueProperties( elm, getValueOfElm( elm, this.mappingInput[itemId] ) );
if ( this.elmList[itemId].type !== 'radio' ) {
console.log( "Waxaa la isku dayay in la cusboonaysiiyo beerta " + itemId ] oo aan lahayn caano" );
}
continue;
}
this.inProgressRefresh[itemId] = true;
var elm = this.elmList[itemId];
// Maareyn gaar ah oo loogu talagalay badhamada raadiyaha si looga hortago loops-ka ka imanaya gujisyada dadban.
// Haddii qof uu gujiyay badhanka raadiyaha ee ka duwan, waxaan rabnaa inaan cusboonaysiinno ku-tiirsanaanta badhanka aan la dooran ee hadda la tirtiray
// laakiin ma rabno inaan dib u qiimayno caanihiisa taas oo dib u dooran karta.
if ( elm.type === 'radio' && this.inProgressRefresh['--radio-' + elm.name.replace( /^calcgadget-\d+-/, '' )] ) {
this.setValueProperties( elm, getValueOfElm( elm, this.mappingInput[itemId] ) );
continue;
}
var res = this.evaluate( this.itemList[itemId] );
this.setValue( elm, res );
}
};
CalculatorWidgets.prototype.setValue = function( elm, res ) {
this.setValueProperties( elm, res );
var mappingOut = this.mappingOutput[elm.id.replace( /^(?:calcdisambig-\d+-)?calculator-field-/, '' )]
if ( elm.tagName === 'INPUT' ) {
if ( elm.type === 'range' ) {
elm.value = res;
} else if ( elm.type === 'number' ) {
// Waxaan taageernaa noocyada qaabaynta qaarkood laakiin ma taageernaa kuwa kale
// maadaama browser-ku uu weli filayo in tani ay noqoto lambar.
elm.setAttribute( 'data-calculator-real-value', res );
elm.value = formatNumeric( res, elm.dataset );
} else if ( elm.type === 'radio' || elm.type === 'checkbox' ) {
elm.checked = !isNaN( res ) && !almostEquals( res, 0 );
if ( !elm.checked && elm.dataset.calculatorValue ) {
// Haddii aan ka deejineyno sanduuqan, u deji qiimihiisa dib ugu noqoshada midka caadiga ah
// si haddii bini'aadam uu dib u hubiyo, qiimaha xakamaynta uu noqdo midka caadiga ah
// qiimaha oo aan ahayn qiimaha ugu dambeeya ee caanaha.
elm.value = elm.dataset.calculatorValue;
}
} else {
elm.setAttribute( 'data-calculator-real-value', res );
elm.value = format( res, elm.dataset, mappingOut );
}
} else if ( elm.tagName === 'SELECT' ) {
elm.value = res;
} else if ( elm.dataset.calculatorType !== 'passthru' ) {
// nooca plain.
elm.setAttribute( 'data-calculator-real-value', res );
elm.textContent = format( res, elm.dataset, mappingOut );
}
}
// Deji sanduuqa xisaabiyaha inuumashquul yahay (busy), taas oo hjoojinaysa akhriyayaasha shaashadda qaarkood ilaa wax walba la cusboonaysiinayo.
// Waxay soo celisaa falceliye si looga saaro mashquulka.
CalculatorWidgets.prototype.setBusy = function () {
var curVal = this.parent.getAttribute( 'aria-busy' );
if ( curVal === 'true' ) {
return function () {};
}
this.parent.setAttribute( 'aria-busy', 'true' );
var that = this;
return function () {
that.parent.setAttribute( 'aria-busy', 'false' );
};
}
CalculatorWidgets.prototype.evaluate = evaluate;
mw.hook( 'wikipage.content' ).add( setup );
} )();
89h875ofvlud95e51j3ezfwr0fu7le6
MediaWiki:Gadget-calculator.css
8
53771
310966
2026-10-25T14:08:28Z
Isma4l
41797
Abuuray
310966
css
text/css
/* Minerva has some confusing styling of input boxes */
body.skin-minerva input.calculator-field-live:not(.cdx-text-input__input):not(.cdx-checkbox__input):not(.cdx-radio__input) {
background: revert;
border: revert;
}
@media screen {
/* Allow people to make fallback content */
html.client-js .calculatorgadget-enabled {
display: revert !important;
}
html.client-js .calculatorgadget-fallback {
display: none;
}
}
fenwyqgsh8py5s6h7yk62bo6000v78d
MediaWiki:Gadget-Calculator
8
53772
310967
2026-10-25T14:09:21Z
Isma4l
41797
/* */
310967
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-default}}">(D)</abbr></sup> Awood u yeel xisaabinta is-dhexgalka ah ee bogagga adoo adeegsanaya tusmada {{t|calculator}}
o918ybwf1424sc2x36amsnzgo2ad4ip
Template:Calculator
10
53773
310968
2026-10-25T14:10:13Z
Isma4l
41797
/* */
310968
wikitext
text/x-wiki
<includeonly>[[Category:Bogagga adeegsanaya qalabka Xisaabiyaha]]<!-- Category goes first for compat with codex--><span
class="{{#if:{{{class|}}}|calculator-field {{{class}}}|calculator-field}}"
{{#if:{{{id|}}}|id="calculator-field-{{{id}}}"}}
data-calculator-type="{{{type|number}}}"
{{#if:{{{style|}}}{{#ifeq:{{{type}}}|hidden|1}}|style="{{#ifeq:{{{type}}}|hidden|display:none;|}}{{{style|}}}"}}
{{#if:{{{formula|}}}|data-calculator-formula="{{{formula}}}"}}
{{#if:{{{readonly|}}}|data-calculator-readonly="{{{readonly}}}"}}
{{#if:{{{size|}}}|data-calculator-size="{{{size}}}"}}
{{#if:{{{max|}}}|data-calculator-max="{{{max}}}"}}
{{#if:{{{min|}}}|data-calculator-min="{{{min}}}"}}
{{#if:{{{placeholder|}}}|data-calculator-placeholder="{{{placeholder}}}"}}
{{#if:{{{name|}}}|data-calculator-name="{{{name}}}"}}
{{#if:{{{precision|}}}|data-calculator-precision="{{{precision}}}"}}
{{#if:{{{exponential-precision|}}}|data-calculator-exponential-precision="{{{exponential-precision}}}"}}
{{#if:{{{decimals|}}}|data-calculator-decimals="{{{decimals}}}"}}
{{#if:{{{NaN-text|}}}|data-calculator-nan-text="{{{NaN-text}}}"}}
{{#if:{{{class-live|}}}|data-calculator-class="{{{class-live}}}"}}
{{#if:{{{aria-describedby|}}}|aria-describedby="{{{aria-describedby}}}"}}
{{#if:{{{aria-labelledby|}}}|aria-labelledby="{{{aria-labelledby}}}"}}
{{#if:{{{aria-label|}}}|aria-label="{{{aria-label}}}"}}
{{#if:{{{enterkeyhint|}}}|data-calculator-enterkeyhint="{{{enterkeyhint}}}"}}
{{#if:{{{mapping|}}}|data-calculator-mapping='{{{mapping}}}'}}
{{#if:{{{role|}}}|data-calculator-aria-role="{{{role}}}"}}
{{#if:{{{aria-atomic|}}}|data-calculator-aria-atomic="{{{aria-atomic}}}"}}
{{#if:{{{aria-relevant|}}}|data-calculator-aria-relevant="{{{aria-relevant}}}"}}
{{#if:{{{aria-live|}}}|data-calculator-aria-live="{{{aria-live}}}"}}
{{#if:{{{checked|}}}|data-calculator-checked="{{{checked}}}"}}
{{#if:{{{value|}}}|data-calculator-value="{{{value}}}"}}
{{#if:{{{inputmode|}}}|data-calculator-inputmode="{{{inputmode}}}"|{{#ifeq:{{{type}}}{{{mapping|}}}|text|data-calculator-inputmode="numeric"}}}}
{{#if:{{{step|}}}|data-calculator-step="{{{step}}}"}}>{{{default|}}}</span></includeonly><noinclude>
{{documentation}}
</noinclude>
2v2e90ngqe3nqg6f9cwiu34db85f4lv
MediaWiki:Gadget-markblocked.js
8
53774
310969
2026-10-25T14:28:08Z
Isma4l
41797
Abuuray
310969
javascript
text/javascript
/*
Waxaad u dhoofin kartaa qalabkan wiki-yada kale adiga oo adeegsanaya mw.loader.load oo aad cayimayso calaamadda maxalliga ah ee Special:Contributions. Tusaale ahaan:
var markblocked_contributions = 'Special:Contributions';
mw.loader.load('//en.wikipedia.org/w/index.php?title=MediaWiki:Gadget-markblocked.js&bcache=1&maxage=259200&action=raw&ctype=text/javascript');
Qalabkani wuxuu ka soo jiidan doonaa xisaabaadka isticmaalaha iyo IP-yada bogga taariikhda wuxuna tirtiri doonaa (isticmaali doonaa xariiqdii duugista) isticmaaleyaasha hadda xiran (blocked).
Dhinacyada qaabeynta (Configuration variables):
- window.markblocked_contributions - U oggolow wiki-yada soo dejinaya qalabkan inay cayimaan calaamadda maxalliga ah ee Special:Contributions
- window.mbHidePartialBlockRestrictions - haddii loo dejiyo run (true), ha tusin xannibaadaha qayb ahaan ee ku jira qalabka tilmaanta (tooltip)
- window.mbIndefStyle - CSS caadi ah si loo tirtiro CSS-ka caadiga ah ee xannibaadaha aan la cayimin waqtigooda
- window.mbNoAutoStart - haddii loo dejiyo run (true), ma calaamadinayo xannibaadda ilaa aad ka gujiso "XX" ee menu-ka "More"
- window.mbPartialStyle - CSS caadi ah si loo tirtiro CSS-ka caadiga ah ee xannibaadaha qayb ahaan
- window.mbTempStyle - CSS caadi ah si loo tirtiro CSS-ka caadiga ah ee xannibaadaha muddada gaaban
- window.mbTipBox - haddii loo dejiyo run (true), waxay soo dejisaa sanduuq huruud ah oo wata calaamadda pound-ka oo ku xiga magacyada isticmaalaha ee xiran. Marka la dul-istaago, waxay tusaysaa qalab tilmaame (tooltip).
- window.mbTipBoxStyle - CSS caadi ah si loo tirtiro CSS-ka caadiga ah ee sanduuqa tilmaanta (eeg kor)
- window.mbTooltip - qaab caadi ah oo loo adeegsado qalabka tilmaanta. kan caadiga ah waa '; blocked ($1) by $2: $3 ($4 ago)'
Laga soo qaatay https://ru.wikipedia.org/w/index.php?title=MediaWiki:Gadget-markblocked.js&oldid=77732587 Luulyo 13, 2016
*/
/* global $ */
( () => {
function execute() {
if ( [ 'edit', 'submit' ].indexOf( mw.config.get( 'wgAction' ) ) !== -1 ) {
return;
}
const maybeAutostart = $.Deferred();
if ( window.mbNoAutoStart ) {
const portletLink = mw.util.addPortletLink( 'p-cactions', '', 'XX', 'ca-showblocks' );
$( portletLink ).on( 'click', ( e ) => {
e.preventDefault();
maybeAutostart.resolve();
} );
} else {
maybeAutostart.resolve();
}
$.when(
$.ready,
// hayso mw.loader.using haddii dadku ay tan u raranayaan sidii qoraal isticmaale ah (user script)
mw.loader.using( [ 'mediawiki.util', 'mediawiki.page.ready', 'mediawiki.Title' ] ),
maybeAutostart
).then( () => {
let firstTime = true;
mw.hook( 'wikipage.content' ).add( ( $container ) => {
// Wicitaankii ugu horreeyay ee ka dambeeya raritaanka bogga bilowga ah, sanduuqa (container) waa mw.util.$content
// Ku xaddid dhaqdhaqaaqa booska ugu weyn (mainspace) qeexitaannada farqiga (diff) kaliya
if ( mw.config.get( 'wgAction' ) === 'view' && mw.config.get( 'wgNamespaceNumber' ) === 0 ) {
$container = $container.find( '.diff-title' ).add( $container.find( '.ambox' ) );
}
if ( firstTime ) {
firstTime = false;
// Marka bogga la raranayo, sidoo kale cusboonaysii tab-ka namespace-ka
$container = $container.add( '#ca-nstab-user' );
mw.util.addCSS( '\
.markblocked-loading a.userlink {opacity:' + ( window.mbLoadingOpacity || 0.85 ) + '}\
a.user-blocked-partial {' + ( window.mbPartialStyle || 'text-decoration: underline; text-decoration-style: dotted' ) + '}\
a.user-blocked-temp {' + ( window.mbTempStyle || 'opacity: 0.7; text-decoration: line-through' ) + '}\
a.user-blocked-indef {' + ( window.mbIndefStyle || 'opacity: 0.4; font-style: italic; text-decoration: line-through' ) + '}\
.user-blocked-tipbox {' + ( window.mbTipBoxStyle || 'font-size:smaller; background:#FFFFF0; border:1px solid #FEA; padding:0 0.3em; color:#AAA' ) + '}\
' );
}
markBlocked( $container );
} );
} );
}
async function markBlocked( $container ) {
// Hel dhammaan astaamaha beddelka (aliases) ee user: & user_talk:
const userNS = [];
for ( const ns in mw.config.get( 'wgNamespaceIds' ) ) {
if ( mw.config.get( 'wgNamespaceIds' )[ ns ] === 2 || mw.config.get( 'wgNamespaceIds' )[ ns ] === 3 ) {
userNS.push( mw.util.escapeRegExp( ns.replace( /_/g, ' ' ) ) + ':' );
}
}
// U oggolow wiki-yada soo dejinaya qalabkan inay cayimaan calaamadda maxalliga ah ee Special:Contributions
if ( window.markblocked_contributions === undefined ) {
window.markblocked_contributions = 'Special:Contributions';
}
const userLinks = {};
getUserLinks( userLinks, $container, userNS );
// U beddel isticmaaleyaasha saf-xaddidan (array)
const users = [];
for ( const u in userLinks ) {
users.push( u );
}
if ( users.length === 0 ) {
return;
}
// Codsiyada API
$container.addClass( 'markblocked-loading' );
const requests = [];
while ( users.length > 0 ) {
const batchUsers = users.splice( 0, 50 ).join( '|' );
const apiCall = new URL( mw.util.wikiScript( 'api' ), location.origin );
apiCall.search = new URLSearchParams( {
action: 'query',
format: 'json',
list: 'blocks',
bklimit: '100',
bkusers: batchUsers,
bkprop: 'user|by|timestamp|expiry|reason|flags|restrictions',
} );
requests.push( fetch( apiCall, {
method: 'GET',
credentials: 'include',
headers: {
'Accept': 'application/json'
}
} ).then( async ( response ) => {
const resp = await response.json();
const serverTime = new Date( response.headers.get( 'Date' ) );
let list;
if ( resp && ( list = resp.query ) && ( list = list.blocks ) ) {
markLinks( list, serverTime, userLinks );
}
} ) );
// globalblocks
/*
/w/api.php?action=query&format=json&list=globalblocks&formatversion=2&bgtargets=~2026-35886-77%7CAgnieszkaLaura56789%7CIzabelaNatalia56789&bgprop=target%7Cby%7Ctimestamp%7Cexpiry%7Creason
{
"target": "AgnieszkaLaura56789",
"anononly": false,
"account-creation-disabled": true,
"block-email": false,
"autoblocking-enabled": true,
"automatic": false,
"by": "Teles",
"bywiki": "metawiki",
"timestamp": "2026-06-21T01:50:17Z",
"expiry": "2026-09-21T01:50:17Z",
"reason": "Cross-wiki abuse"
}
*/
const globalCall = new URL( mw.util.wikiScript( 'api' ), location.origin );
globalCall.search = new URLSearchParams( {
action: 'query',
format: 'json',
list: 'globalblocks',
bglimit: '100',
bgtargets: batchUsers,
bgprop: 'target|by|timestamp|expiry|reason',
} );
requests.push( fetch( globalCall, {
method: 'GET',
credentials: 'include',
headers: {
'Accept': 'application/json'
}
} ).then( async ( response ) => {
const resp = await response.json();
const serverTime = new Date( response.headers.get( 'Date' ) );
let list;
if ( resp && ( list = resp.query ) && ( list = list.globalblocks ) ) {
markLinks( list, serverTime, userLinks );
}
} ) );
}
try {
await Promise.all( requests );
} finally {
$container.removeClass( 'markblocked-loading' );
$( '#ca-showblocks' ).parent().remove(); // ka saar xiriirka dekedda (portlet link) ee lagu daray
}
}
/**
* Hel xogta oo calaamadee xiriirada
*/
function markLinks( list, serverTime, userLinks ) {
for ( let block of list ) {
const partial = 'partial' in block; // Xannibaad qayb ah (Partial block)
let htmlClass, blockTime;
if ( /^in/.test( block.expiry ) ) {
htmlClass = partial ? 'user-blocked-partial' : 'user-blocked-indef';
blockTime = block.expiry;
} else {
htmlClass = partial ? 'user-blocked-partial' : 'user-blocked-temp';
// Sida muuqata waad kala jari kartaa walxaha taariikhda (date objects) JavaScript. Nooc ka mid ah
// sixirka ayaa dhaca oo si toos ah loogu beddelaa milliseconds.
blockTime = inHours( parseTimestamp( block.expiry ) - parseTimestamp( block.timestamp ) );
}
let tooltipString = window.mbTooltip || '; blocked ($1) by $2: $3 ($4 ago)';
if ( partial ) {
if ( window.mbHidePartialBlockRestrictions ) {
tooltipString = tooltipString.replace( 'blocked', 'partially blocked' );
} else {
tooltipString = tooltipString.replace( 'blocked', 'partially blocked from $5');
}
}
tooltipString = tooltipString.replace( '$1', blockTime )
.replace( '$2', block.by )
.replace( '$3', block.reason )
.replace( '$4', inHours( serverTime - parseTimestamp( block.timestamp ) ) );
if ( partial && block.restrictions && !window.mbHidePartialBlockRestrictions ) {
let pbDetails = [];
if ( block.restrictions.pages ) {
pbDetails.push ( ( block.restrictions.pages.length == 1 ? 'page ' : 'pages ' ) + makeCommaSeparatedList( block.restrictions.pages.map( (page) => '[[' + page.title + ']]' ) ) );
}
if ( block.restrictions.namespaces ) {
if ( block.restrictions.namespaces && block.restrictions.namespaces.length == 1 && block.restrictions.namespaces[0] == 0 ) pbDetails.push( 'mainspace' );
else pbDetails.push ( ( block.restrictions.namespaces.length == 1 ? 'namespace ' : 'namespaces ' ) +
makeCommaSeparatedList( block.restrictions.namespaces.map( (ns) => ns == 0 ? '(Article)' : mw.config.get( 'wgFormattedNamespaces' )[ns] ) ) );
}
if ( block.restrictions.actions ) {
if ( block.restrictions.actions.includes( 'upload' ) ) pbDetails.push( "uploading files" );
if ( block.restrictions.actions.includes( 'move' ) ) pbDetails.push( "moving pages" );
if ( block.restrictions.actions.includes( 'create' ) ) pbDetails.push( "creating pages" );
if ( block.restrictions.actions.includes( 'thanks' ) ) pbDetails.push( "thanking users" );
}
if ( !block.restrictions.pages && !block.restrictions.namespaces && !block.restrictions.actions ) {
pbDetails.push("specified non-editing actions");
}
tooltipString = tooltipString.replace ( '$5', makeCommaSeparatedList( pbDetails ) );
}
let username = block.user ? block.user : block.target;
let links = userLinks[ username ];
for ( let k = 0; links && k < links.length; k++ ) {
let $link = $( links[ k ] );
$link = $link.addClass( htmlClass );
if ( window.mbTipBox ) {
$( '<span class=user-blocked-tipbox>#</span>' ).attr( 'title', tooltipString ).insertBefore( $link );
} else {
$link.attr( 'title', $link.attr( 'title' ) + tooltipString );
}
}
}
}
/**
* Raadi dhammaan xiriirada "user" oo ku kaydi userLinks : { 'users': [<link1>, <link2>, ...], 'user2': [<link3>, <link3>, ...], ... }
*/
function getUserLinks( userLinks, $container, userNS ) {
// Joogteynta joogtada ah (RegExp) dhammaan cinwaannada ah User:| User_talk: | Special:Contributions/ (ee loogu talagalay qoraallada isticmaalaha)
const userTitleRegex = new RegExp( '^(' + userNS.join( '|' ) + '|' + window.markblocked_contributions + '\\/)+([^\\/#]+)$', 'i' );
// RegExp ee xiriirada
// articleRX sidoo kale waxay la mid tahay xiriirada dibadda si loo taageero template-ka noping
const articleRegex = new RegExp( mw.config.get( 'wgArticlePath' ).replace( '$1', '' ) + '([^#?]+)' );
const scriptRegex = new RegExp( '^' + mw.config.get( 'wgScript' ) + '\\?title=([^#&]+)' );
const ipv6Regex = /^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i;
// Ururi dhammaan xiriirada ku jira waxa ku jira bogga
$container.find( 'a' )
.not( '.mw-changeslist-date, .ext-discussiontools-init-timestamplink, .mw-history-undo > a, .mw-rollback-link > a' )
.each( ( i, link ) => {
// weedhaha ilaalada (guard clauses) iyo macquulka soo saarista magaca isticmaalaha
const $link = $( link );
const url = $link.attr( 'href' );
if ( !url ) {
return;
}
const articleMatch = articleRegex.exec( url ),
scriptMatch = scriptRegex.exec( url );
let pageTitle;
if ( articleMatch ) {
pageTitle = articleMatch[ 1 ];
} else if ( scriptMatch ) {
pageTitle = scriptMatch[ 1 ];
} else {
return;
}
pageTitle = decodeURIComponent( pageTitle ).replace( /_/g, ' ' );
let user = userTitleRegex.exec( pageTitle );
if ( !user ) {
return;
}
const userTitle = mw.Title.newFromText( user[ 2 ] );
if ( !userTitle ) {
return;
}
user = userTitle.getMainText();
if ( ipv6Regex.test( user ) ) {
user = user.toUpperCase();
}
// Hagaag, aan ugu dambeyntii samayno waxyaabo leh saameyn dhinaca ah (side effects)
$link.addClass( 'userlink' );
if ( !userLinks[ user ] ) {
userLinks[ user ] = [];
}
userLinks[ user ].push( link );
} );
}
/**
* @param {string} timestamp 20081226220605 ama 2008-01-26T06:34:19Z
* @return {Date}
*/
function parseTimestamp( timestamp ) {
const matches = timestamp.replace( /\D/g, '' ).match( /(\d\d\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/ );
return new Date( Date.UTC( matches[ 1 ], matches[ 2 ] - 1, matches[ 3 ], matches[ 4 ], matches[ 5 ], matches[ 6 ] ) );
}
/**
* @param {number} milliseconds 604800000
* @return {string} "2:30" ama "5.06d" ama "21d"
*/
function inHours( milliseconds ) {
let minutes = Math.floor( milliseconds / 60000 );
if ( !minutes ) {
return Math.floor( milliseconds / 1000 ) + 's';
}
let hours = Math.floor( minutes / 60 );
minutes = minutes % 60;
const days = Math.floor( hours / 24 );
hours = hours % 24;
if ( days ) {
return days + ( days < 10 ? '.' + addLeadingZeroIfNeeded( hours ) : '' ) + 'd';
}
return hours + ':' + addLeadingZeroIfNeeded( minutes );
}
/**
* @param {number} v 9
* @return {string} 09
*/
function addLeadingZeroIfNeeded( v ) {
if ( v <= 9 ) {
v = '0' + v;
}
return v;
}
/** @param {array} strings ["editing pages Test and Wikipedia", "thanking users"]
@return {string} "editing pages Test and Wikipedia and thanking users"
*/
function makeCommaSeparatedList ( strings ) {
if ( strings.length == 0 ) return "";
if ( strings.length == 1 ) return strings[0];
if ( strings.length == 2 ) return strings[0] + ' and ' + strings[1];
return strings.slice( 0, -1 ).join( ', ' ) + ', and ' + strings[strings.length - 1];
}
execute();
} )();
nvvjksbmk0qh7o6z1p4jjdwlfas10wj
MediaWiki:Gadget-markblocked
8
53775
310970
2026-10-25T14:29:17Z
Isma4l
41797
/* */
310970
wikitext
text/x-wiki
Tirtir magacyada isticmaalayaasha ee la xannibay
s03ti7xljpuud4ny1dirb01zzzempv7
MediaWiki:Gadget-responsiveContent.js
8
53776
310971
2026-10-25T14:29:51Z
Isma4l
41797
Abuuray
310971
javascript
text/javascript
mw.hook( 'wikipage.content' ).add( function( $content ) {
$content.find( '.ambox' ).click( function( e ) {
$( this ).toggleClass( 'mbox-expand' );
} );
} );
k1u7vr2w4ermvnc3dmreotoiyggou7q
MediaWiki:Gadget-responsiveContent
8
53777
310972
2026-10-25T14:30:34Z
Isma4l
41797
/* */
310972
wikitext
text/x-wiki
Muuqaal la soo hagaajiyay ee taleefannada gacanta, shaashadaha cidhiidhiga ah iyo kuwa ballaadhan ([[:en:User:TheDJ/responsiveContent|dukumiintiga]])
f7hhq9o8kv33qhyrzdkzenbmp0130ce
MediaWiki:Gadget-responsiveContentTimeless.js
8
53778
310973
2026-10-25T14:31:07Z
Isma4l
41797
Abuuray
310973
javascript
text/javascript
mw.hook( 'wikipage.content' ).add( function( $content ) {
$content.find( '.ambox' ).click( function( e ) {
$( this ).toggleClass( 'mbox-expand' );
} );
} );
k1u7vr2w4ermvnc3dmreotoiyggou7q
MediaWiki:Gadget-responsiveContentTimeless
8
53779
310974
2026-10-25T14:31:43Z
Isma4l
41797
/* */
310974
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-default}}">(D)</abbr></sup> Muuqaal la soo hagaajiyay ee taleefannada gacanta iyo shaashadaha cidhiidhiga ah
hsp3c8tca5ucz5o8khwxjc061tfi0ri
MediaWiki:Gadget-responsiveContentBase.css
8
53780
310975
2026-10-25T14:32:34Z
Isma4l
41797
Abuuray
310975
css
text/css
@media only screen and ( max-width: 600px ) {
/* !important to ignore inline styles */
/* .mw-body-content to increase specificity */
.mw-body-content table {
float: none !important;
margin-left: auto !important;
margin-right: auto !important;
}
.mw-body-content table {
overflow: auto;
overflow-y: hidden;
overflow-x: auto;
max-width: 100% !important;
}
.mw-body-content .thumb,
.mw-body-content figure[typeof~='mw:File/Thumb'],
.mw-body-content figure[typeof~='mw:File/Frame'] {
float: none;
clear: none;
margin: 0.5em auto;
}
.mw-body-content .thumbinner {
margin: 0 auto;
max-width: 100%;
box-sizing: border-box;
border: 0;
background-color: transparent;
}
.mw-body-content .thumbinner .thumbimage {
max-width: 100%;
height: auto;
object-fit: contain;
}
.mw-body-content .thumbimage {
border: 0;
background-color: transparent;
}
.mw-body-content figure[typeof~='mw:File/Thumb'],
.mw-body-content figure[typeof~='mw:File/Frame'],
.mw-body-content figure[typeof~='mw:File/Thumb'] > figcaption,
.mw-body-content figure[typeof~='mw:File/Frame'] > figcaption {
border: 0;
background-color: transparent;
}
.mw-body-content figure[typeof~='mw:File/Thumb'] > :not(figcaption) .mw-file-element,
.mw-body-content figure[typeof~='mw:File/Frame'] > :not(figcaption) .mw-file-element {
margin: 0 auto;
max-width: calc(100% - 6px);
height: auto;
object-fit: contain;
box-sizing: border-box;
border: 0;
background-color: transparent;
}
.mw-body-content .thumbcaption > .magnify {
display: none;
}
.mw-body-content figure[typeof~='mw:File/Thumb'] > figcaption::before,
.mw-body-content figure[typeof~='mw:File/Thumb'] > .mw-file-description::after,
.mw-body-content figure[typeof~='mw:File/Thumb'] > .mw-file-magnify::after {
content: none;
}
/* amboxes become normal blocks */
.mw-body-content table.ambox > tbody,
.mw-body-content table.ambox > tbody > tr {
display: block;
}
/* of which we hide some parts by default to shorten them */
.mw-body-content .ambox .mbox-image,
.mw-body-content .ambox .mbox-text .hide-when-compact {
display: none;
cursor: pointer;
}
.mw-body-content table.ambox {
font-size: 80%;
background-color: transparent;
margin-left: 0 !important;
padding: 0 !important;
border-width: 0 0 0 3px;
}
.mw-body-content .ambox .mbox-text-span {
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
display: block;
}
/* But we can flip a class to undo the hiding */
.ambox.mbox-expand .mbox-text-span {
text-overflow: initial;
white-space: normal;
overflow: auto;
}
.ambox.mbox-expand .mbox-text .hide-when-compact {
display: inline;
}
#firstHeading .mw-editsection,
#coordinates {
display: none;
}
.mw-body-content .infobox,
.mw-body-content .navbox,
.mw-body-content .navbox > .navbox-inner {
width: 100% !important;
box-sizing: border-box;
display: table;
}
.mw-body-content .image > img,
.mw-body-content [typeof~='mw:File'] .mw-file-element,
.mw-body-content [typeof~='mw:File/Frameless'] .mw-file-element {
max-width: 100%;
min-width: 20px;
height: auto;
object-fit: contain;
}
.mw-body-content {
word-wrap: break-word;
}
}
@media only screen and ( max-width: 600px ) and ( -webkit-min-device-pixel-ratio: 1.5 ),
only screen and ( max-width: 600px) and ( min-resolution: 1.5dppx ) {
@supports ( object-fit: contain ) {
.mw-body-content div.thumbinner,
.mw-body-content figure[typeof~='mw:File/Thumb'],
.mw-body-content figure[typeof~='mw:File/Frame'] {
width: 100% !important;
}
.mw-body-content div.thumbinner .thumbimage,
.mw-body-content figure[typeof~='mw:File/Thumb'] > :not(figcaption) .mw-file-element,
.mw-body-content figure[typeof~='mw:File/Frame'] > :not(figcaption) .mw-file-element {
width: 100%;
object-fit: contain;
max-height: 60vh;
}
}
}
@media ( min-width: 1500px ) {
.ns-0:not(.page-Main_Page) .mw-body-content .mw-parser-output > * {
margin-right: 350px !important;
}
.ns-0 .mw-body-content .mw-parser-output > * > li {
list-style-position: inside;
}
.ns-0 .mw-body-content .mw-parser-output > .infobox,
.ns-0 .mw-body-content .mw-parser-output > .sidebar,
.ns-0 .mw-body-content .mw-parser-output > .floatright,
.ns-0 .mw-body-content .mw-parser-output > .sistersitebox,
.ns-0 .mw-body-content .mw-parser-output > .mbox-small,
.ns-0 .mw-body-content .mw-parser-output > .tright,
.ns-0 .mw-body-content .mw-parser-output > .mw-halign-right,
.ns-0 .mw-body-content.mw-content-ltr .mw-parser-output > figure[typeof~='mw:File/Thumb']:not(.mw-halign-left, .mw-halign-none, .mw-halign-center),
.ns-0 .mw-body-content.mw-content-ltr .mw-parser-output > figure[typeof~='mw:File/Frame']:not(.mw-halign-left, .mw-halign-none, .mw-halign-center) {
margin-right: 0 !important;
margin-left: 1.4em !important;
}
.ns-0 .mw-body-content .mw-parser-output > .infobox,
.ns-0 .mw-body-content .mw-parser-output > .sidebar,
.ns-0 .mw-body-content .mw-parser-output > .floatright,
.ns-0 .mw-body-content .mw-parser-output > .tright {
min-width: 330px !important;
}
.ns-0 .mw-body-content .mw-parser-output > .infobox,
.ns-0 .mw-body-content .mw-parser-output > .sidebar,
.ns-0 .mw-body-content .mw-parser-output > .tright > .thumbinner {
width: 330px !important;
box-sizing: border-box;
}
.ns-0 .mw-body-content .mw-parser-output > .tright .thumbimage {
width: 100%;
height: auto;
}
.ns-0 .mw-body-content .mw-parser-output > .mw-halign-right > :not(figcaption) .mw-file-element,
.ns-0 .mw-body-content.mw-content-ltr .mw-parser-output > figure[typeof~='mw:File/Thumb']:not(.mw-halign-left, .mw-halign-none, .mw-halign-center) > :not(figcaption) .mw-file-element ,
.ns-0 .mw-body-content.mw-content-ltr .mw-parser-output > figure[typeof~='mw:File/Frame']:not(.mw-halign-left, .mw-halign-none, .mw-halign-center) > :not(figcaption) .mw-file-element {
width: 330px !important;
box-sizing: border-box;
height: auto;
}
.ns-0 .mw-body-content .mw-parser-output > #toc,
.ns-0 .mw-body-content .mw-parser-output > .floatleft,
.ns-0 .mw-body-content .mw-parser-output > .tleft,
.ns-0 .mw-body-content .mw-parser-output > .mw-halign-left,
.ns-0 .mw-body-content.mw-content-rtl .mw-parser-output > figure[typeof~='mw:File/Thumb']:not(.mw-halign-right, .mw-halign-none, .mw-halign-center),
.ns-0 .mw-body-content.mw-content-rtl .mw-parser-output > figure[typeof~='mw:File/Frame']:not(.mw-halign-right, .mw-halign-none, .mw-halign-center) {
margin-right: 1.4em !important;
}
.ns-0 .mw-body-content .mw-parser-output > table,
.ns-0 .mw-body-content .mw-parser-output > .center,
.ns-0 .mw-body-content .mw-parser-output > .navbox {
max-width: calc( 100% - 350px );
}
}
@media ( min-width: 1900px ) {
.ns-0:not(.page-Main_Page) .mw-body-content .mw-parser-output > * {
margin-left: 350px !important;
}
.ns-0 .mw-body-content .mw-parser-output > #toc {
box-sizing: border-box;
float: left;
}
.ns-0 .mw-body-content .mw-parser-output > #toc,
.ns-0 .mw-body-content .mw-parser-output > .floatleft,
.ns-0 .mw-body-content .mw-parser-output > .mbox-small-left,
.ns-0 .mw-body-content .mw-parser-output > .tleft,
.ns-0 .mw-body-content .mw-parser-output > .mw-halign-left,
.ns-0 .mw-body-content.mw-content-rtl .mw-parser-output > figure[typeof~='mw:File/Thumb']:not(.mw-halign-right, .mw-halign-none, .mw-halign-center),
.ns-0 .mw-body-content.mw-content-rtl .mw-parser-output > figure[typeof~='mw:File/Frame']:not(.mw-halign-right, .mw-halign-none, .mw-halign-center) {
margin-left: 0 !important;
}
.ns-0 .mw-body-content .mw-parser-output > #toc,
.ns-0 .mw-body-content .mw-parser-output > .floatleft,
.ns-0 .mw-body-content .mw-parser-output > .tleft {
min-width: 330px !important;
max-width: 330px !important;
}
.ns-0 .mw-body-content .mw-parser-output > .tleft > .thumbinner {
width: 330px !important;
box-sizing: border-box;
}
.ns-0 .mw-body-content .mw-parser-output > .tleft .thumbimage {
width: 100%;
height: auto;
}
.ns-0 .mw-body-content .mw-parser-output > .mw-halign-left > :not(figcaption) .mw-file-element,
.ns-0 .mw-body-content.mw-content-rtl .mw-parser-output > figure[typeof~='mw:File/Thumb']:not(.mw-halign-right, .mw-halign-none, .mw-halign-center) > :not(figcaption) .mw-file-element,
.ns-0 .mw-body-content.mw-content-rtl .mw-parser-output > figure[typeof~='mw:File/Frame']:not(.mw-halign-right, .mw-halign-none, .mw-halign-center) > :not(figcaption) .mw-file-element {
width: 330px !important;
box-sizing: border-box;
height: auto;
}
/* Do this in all namespaces */
:not( .ns-0 ) .mw-body-content .mw-parser-output {
max-width: 1900px;
margin-left: auto;
margin-right: auto;
}
.ns-0 .mw-body > :not(.mw-body-content),
.ns-0 .mw-body-content > :not(#mw-content-text) {
max-width: calc( 1900px - 700px );
margin-left: auto;
margin-right: auto;
}
/* 700 is 350+350 (right side bar + left side bar) */
.ns-0 .mw-body-content .mw-parser-output > table,
.ns-0 .mw-body-content .mw-parser-output > .center,
.ns-0 .mw-body-content .mw-parser-output > .navbox {
max-width: calc( 100% - 700px );
}
/* We increase the font size a bit */
.skin-vector .mw-body-content {
font-size: 0.95em;
}
}
@media only screen and ( max-width: 600px ) and ( -webkit-min-device-pixel-ratio: 2 ),
only screen and ( max-width:600px ) and ( min-resolution: 2dppx ) {
/* We reduce the font size a bit, since retina screens rule */
.skin-vector .mw-body-content {
font-size: 0.75em;
}
.skin-vector .mw-body h1,
.skin-vector .mw-body h2,
.skin-vector .mw-body h3 {
font-size: 1em;
font-weight: bold;
}
}
pgc26bhve838eqqwgx97ehrm9fdd2hf
MediaWiki:Gadget-responsiveContentBase
8
53781
310976
2026-10-25T14:33:13Z
Isma4l
41797
/* */
310976
wikitext
text/x-wiki
Muuqaal la soo hagaajiyay ee taleefannada gacanta, shaashadaha cidhiidhiga ah iyo kuwa ballaadhan. Waxaa adeegsada Gadget-responsiveContent
9q47bu2x079r0h6cc5a83zx91md9pk0
MediaWiki:Gadget-responsiveContentBaseTimeless.css
8
53782
310977
2026-10-25T14:33:48Z
Isma4l
41797
Abuuray
310977
css
text/css
/*
* Need to override Timeless being a little aggressive with tables in
* the 720-850 range
*/
@media (min-width: 720px) and (max-width: 850px) {
table.ambox:not(.mbox-small-left),
table.cmbox,
table.imbox,
table.ombox:not(.mbox-small),
table.tmbox:not(.mbox-small) {
width: 80%;
}
}
@media only screen and ( max-width: 550px ) {
/* !important to ignore inline styles */
/* .mw-body-content to increase specificity */
.mw-body-content table {
float: none !important;
margin-left: auto !important;
margin-right: auto !important;
}
.mw-body-content table {
overflow: auto;
overflow-y: hidden;
overflow-x: auto;
max-width: 100% !important;
}
.mw-body-content .thumb,
.mw-body-content figure[typeof~='mw:File/Thumb'],
.mw-body-content figure[typeof~='mw:File/Frame'] {
float: none;
clear: none;
margin: 0.5em auto;
}
.mw-body-content .thumbinner {
margin: 0 auto;
max-width: 100%;
box-sizing: border-box;
border: 0;
background-color: transparent;
}
.mw-body-content .thumbinner .thumbimage {
max-width: 100%;
height: auto;
object-fit: contain;
}
.mw-body-content .thumbimage {
border: 0;
background-color: transparent;
}
.mw-body-content figure[typeof~='mw:File/Thumb'],
.mw-body-content figure[typeof~='mw:File/Frame'],
.mw-body-content figure[typeof~='mw:File/Thumb'] > figcaption,
.mw-body-content figure[typeof~='mw:File/Frame'] > figcaption {
border: 0;
background-color: transparent;
padding: 0;
}
.mw-body-content figure[typeof~='mw:File/Thumb'] > :not(figcaption) .mw-file-element,
.mw-body-content figure[typeof~='mw:File/Frame'] > :not(figcaption) .mw-file-element {
margin: 0 auto 0.5em auto;
max-width: 100% !important;
height: auto;
object-fit: contain;
box-sizing: border-box;
border: 0;
background-color: transparent;
}
.mw-body-content .thumbcaption > .magnify {
display: none;
}
.mw-body-content figure[typeof~='mw:File/Thumb'] > figcaption::before,
.mw-body-content figure[typeof~='mw:File/Thumb'] > .mw-file-description::after,
.mw-body-content figure[typeof~='mw:File/Thumb'] > .mw-file-magnify::after {
content: none;
}
/* amboxes become normal blocks */
.mw-body-content table.ambox > tbody,
.mw-body-content table.ambox > tbody > tr {
display: block;
}
/* of which we hide some parts by default to shorten them */
.mw-body-content .ambox .mbox-image,
.mw-body-content .ambox .mbox-text .hide-when-compact {
display: none;
cursor: pointer;
}
.mw-body-content table.ambox {
font-size: 80%;
background-color: transparent;
margin-left: 0 !important;
padding: 0 !important;
border-width: 0 0 0 3px;
}
.mw-body-content .ambox .mbox-text-span {
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
display: block;
}
/* But we can flip a class to undo the hiding */
.ambox.mbox-expand .mbox-text-span {
text-overflow: initial;
white-space: normal;
overflow: auto;
}
.ambox.mbox-expand .mbox-text .hide-when-compact {
display: inline;
}
#firstHeading .mw-editsection,
#coordinates {
display: none;
}
.mw-body-content .infobox,
.mw-body-content .navbox,
.mw-body-content .navbox > .navbox-inner {
width: 100% !important;
box-sizing: border-box;
display: table;
}
.mw-body-content .image > img {
max-width: 100%;
min-width: 20px;
height: auto;
object-fit: contain;
}
.mw-body-content {
word-wrap: break-word;
}
}
@media only screen and ( max-width: 550px ) and ( -webkit-min-device-pixel-ratio: 1.5 ),
only screen and ( max-width: 550px ) and ( min-resolution: 1.5dppx ) {
@supports ( object-fit: contain ) {
.mw-body-content div.thumbinner,
.mw-body-content figure[typeof~='mw:File/Thumb'],
.mw-body-content figure[typeof~='mw:File/Frame'] {
width: 100% !important;
padding: 0 !important;
}
.mw-body-content div.thumbinner .thumbimage,
.mw-body-content figure[typeof~='mw:File/Thumb'] > :not(figcaption) .mw-file-element,
.mw-body-content figure[typeof~='mw:File/Frame'] > :not(figcaption) .mw-file-element {
width: 100%;
object-fit: contain;
max-height: 60vh;
}
}
}
ienenytxjxyw7g03hnhqryosjcrdkz9
MediaWiki:Gadget-responsiveContentBaseTimeless
8
53783
310978
2026-10-25T14:34:30Z
Isma4l
41797
/* */
310978
wikitext
text/x-wiki
Nuxurka jawaabta ee loogu talagalay Base Timeless
hzkbkh9tthyuqu5u4wg406hspv5h0px
MediaWiki:Gadget-HideInterwikiSearchResults.css
8
53784
310979
2026-10-25T14:35:28Z
Isma4l
41797
Abuuray
310979
css
text/css
.mw-searchresults-has-iw #mw-interwiki-results {
display: none !important
}
n4hv1ko85kefcpds8m0x7op0rq7qbnu
MediaWiki:Gadget-HideInterwikiSearchResults
8
53785
310980
2026-10-25T14:36:19Z
Isma4l
41797
/* */
310980
wikitext
text/x-wiki
Ha tusin natiijooyinka raadinta ee mashaariicda walaalaha ah bogga natiijooyinka raadinta
6phjxkrgsa8gwupxoyxskom9o1dng0r
MediaWiki:Gadget-XTools-ArticleInfo.js
8
53786
310981
2026-10-25T14:36:57Z
Isma4l
41797
Abuuray
310981
javascript
text/javascript
/**
* XTools PageInfo gadget
* Based on meta.wikimedia.org/wiki/User:Hedonil/XTools
* Documentation: mediawiki.org/wiki/XTools/PageInfo_gadget
* Released under GPL 3.0+ license
* For updates, please copy and paste from https://xtools.wmcloud.org/pageinfo-gadget.js
*/
$(function () {
if (mw.config.get('wgArticleId') === 0 || // no deleted articles, no special pages
mw.config.get('wgCurRevisionId') !== mw.config.get('wgRevisionId') || // only current revision
mw.config.get('wgAction') !== 'view') { // only when viewing a page, not editing
return;
}
var $result,
markup = "<div id='xtools' style='font-size:84%; line-height:1.2em;" +
"width:auto;'><span id='xtools_result'>.</span></div>";
$(markup).insertBefore('#contentSub');
$result = $('#xtools_result');
var loadinganimation = window.setInterval(function () {
if ($result.html() === '. ') {
$result.html(' . ');
} else if ($result.html() === ' . ') {
$result.html(' .');
} else {
$result.html('. ');
}
}, 300);
$.get(
'https://xtools.wmcloud.org/api/page/pageinfo/' +
mw.config.get('wgServerName') + '/' +
mw.config.get('wgPageName').replace(/["?%&+\\]/g, escape) + '?format=html' +
'&uselang=' + mw.config.get('wgUserLanguage')
).done(function (result) {
$result.html(result);
clearInterval(loadinganimation);
});
});
4gl0dz3mnklq1pou1zqhda2l2qfmo0v
MediaWiki:Gadget-XTools-ArticleInfo
8
53787
310982
2026-10-25T14:37:36Z
Isma4l
41797
/* */
310982
wikitext
text/x-wiki
[[mw:XTools|XTools]]: si firfircoon u tusi tirakoobka ku saabsan taariikhda bogga hoosta cinwaanka bogga
mk5uwu7bqtt0ukovs8qypluxb52h5y8
MediaWiki:Gadget-StickyTableHeaders.css
8
53788
310983
2026-10-25T14:38:25Z
Isma4l
41797
Abuuray
310983
css
text/css
/**
* Make thead top and tfoot bottom sticky for JS wikitables and sortable tables.
*
* Issues:
* - Broken borders. https://bugs.webkit.org/show_bug.cgi?id=128486
* - Sticky sorttop/sortbottom after sort: T355492.
* - Timeless wide tables in overflowable boxes, so not sticky.
* - Mobile tables in overflowable boxes (display:block), so not sticky.
* - Other tables in overflowable boxes not sticky without vertical scroll.
*/
@media screen {
/* Make sticky. */
.jquery-tablesorter > thead,
.mw-sticky-header > thead {
position: -webkit-sticky;
position: sticky;
top: 0;
z-index: 10;
}
.jquery-tablesorter > tfoot,
.mw-sticky-header > tfoot {
bottom: 0;
position: -webkit-sticky;
position: sticky;
z-index: 10;
}
/* Adjust to other sticky elements. */
@media (min-width: 1120px) {
.skin-vector-2022.vector-sticky-header-visible .jquery-tablesorter > thead {
top: 3.125rem;
}
.skin-vector-2022.vector-sticky-header-visible [style*="overflow"] .jquery-tablesorter > thead {
top: 0;
}
.client-js.vector-sticky-header-enabled [style*="overflow"] .mw-sticky-header .mw-sticky-header-element {
top: 0 !important; /* T289817. */
}
}
@media (min-width: 851px) {
.skin-timeless .content-table-wrapper:not(.overflowed) .jquery-tablesorter > thead,
.skin-timeless .content-table-wrapper:not(.overflowed) .mw-sticky-header > thead {
top: 3.51em;
}
.skin-timeless [style*="overflow"] .content-table-wrapper:not(.overflowed) .jquery-tablesorter > thead,
.skin-timeless [style*="overflow"] .content-table-wrapper:not(.overflowed) .mw-sticky-header > thead {
top: 0;
}
}
/* Fix transparent sticky sorttop/sortbottom (after sort). */
.jquery-tablesorter > thead,
.jquery-tablesorter > tfoot {
background-color: inherit;
}
}
nbajwe5vjgt7kpa3cagebn2ph0ohdtg
MediaWiki:Gadget-remove-sticky-decoration
8
53789
310984
2026-10-25T14:39:25Z
Isma4l
41797
/* */
310984
wikitext
text/x-wiki
Ka saar walxaha dheggan (sticky elements) bogagga isticmaalayaasha (eeg [[:en:WP:STICKYDECO|tilmaamaha ku saabsan sida tani u shaqeyso]])
3to44qbu6tcue4mg1ngd21ga5i1qxex
MediaWiki:Gadget-InterProjectLinks.js
8
53790
310985
2026-10-25T14:40:36Z
Isma4l
41797
Abuuray
310985
javascript
text/javascript
$( function() {
'use strict';
var
iwlinks = $( 'div.interProject' ),
wb = $( '#p-wikibase-otherprojects' ),
pproject,
wbul;
if ( !iwlinks.length ) {
return;
}
if ( wb.length ) {
wbul = wb.find( 'ul' );
if ( !wbul.length ) {
return;
}
iwlinks.each( function( i, e ) {
var
t = $( e ),
a = t.find( 'a' );
if ( t.hasClass( 'commons' ) && !wb.find( '.wb-otherproject-commons' ).length ) {
a.unwrap().wrap( '<li class="' + t.attr( 'class' ) + '"></li>' ).parent().appendTo( wbul );
}
else if ( t.hasClass( 'wiktionary' ) && !wb.find( '.wb-otherproject-wiktionary' ).length ) {
a.unwrap().wrap( '<li class="' + t.attr( 'class' ) + '"></li>' ).parent().appendTo( wbul );
}
else if ( t.hasClass( 'wikinews' ) && !wb.find( '.wb-otherproject-wikinews' ).length ) {
a.unwrap().wrap( '<li class="' + t.attr( 'class' ) + '"></li>' ).parent().appendTo( wbul );
}
else if ( t.hasClass( 'wikisource' ) && !wb.find( '.wb-otherproject-wikisource' ).length ) {
a.unwrap().wrap( '<li class="' + t.attr( 'class' ) + '"></li>' ).parent().appendTo( wbul );
}
else if ( t.hasClass( 'wikibooks' ) && !wb.find( '.wb-otherproject-wikibooks' ).length ) {
a.unwrap().wrap( '<li class="' + t.attr( 'class' ) + '"></li>' ).parent().appendTo( wbul );
}
else if ( t.hasClass( 'wikiquote' ) && !wb.find( '.wb-otherproject-wikiquote' ).length ) {
a.unwrap().wrap( '<li class="' + t.attr( 'class' ) + '"></li>' ).parent().appendTo( wbul );
}
else if ( t.hasClass( 'wikiversity' ) && !wb.find( '.wb-otherproject-wikiversity' ).length ) {
a.unwrap().wrap( '<li class="' + t.attr( 'class' ) + '"></li>' ).parent().appendTo( wbul );
}
else if ( t.hasClass( 'wikidata' ) && !wb.find( '.wb-otherproject-wikidata' ).length ) {
a.unwrap().wrap( '<li class="' + t.attr( 'class' ) + '"></li>' ).parent().appendTo( wbul );
}
else if ( t.hasClass( 'wikibase' ) && !wb.find( '.wb-otherproject-wikibase-item' ).length ) {
a.unwrap().wrap( '<li class="' + t.attr( 'class' ) + '"></li>' ).parent().appendTo( wbul );
}
else if ( t.hasClass( 'wikivoyage' ) && !wb.find( '.wb-otherproject-wikivoyage' ).length ) {
a.unwrap().wrap( '<li class="' + t.attr( 'class' ) + '"></li>' ).parent().appendTo( wbul );
}
else if ( t.hasClass( 'wikispecies' ) && !wb.find( '.wb-otherproject-species' ).length ) {
a.unwrap().wrap( '<li class="' + t.attr( 'class' ) + '"></li>' ).parent().appendTo( wbul );
}
else if ( t.hasClass( 'mediawiki' ) && !wb.find( '.wb-otherproject-mediawiki' ).length ) {
a.unwrap().wrap( '<li class="' + t.attr( 'class' ) + '"></li>' ).parent().appendTo( wbul );
}
else if ( t.hasClass( 'meta' ) && !wb.find( '.wb-otherproject-meta' ).length ) {
a.unwrap().wrap( '<li class="' + t.attr( 'class' ) + '"></li>' ).parent().appendTo( wbul );
}
else if ( t.hasClass( 'incubator' ) && !wb.find( '.wb-otherproject-incubator' ).length ) {
a.unwrap().wrap( '<li class="' + t.attr( 'class' ) + '"></li>' ).parent().appendTo( wbul );
}
else if ( t.hasClass( 'wikimania' ) && !wb.find( '.wb-otherproject-wikimania' ).length ) {
a.unwrap().wrap( '<li class="' + t.attr( 'class' ) + '"></li>' ).parent().appendTo( wbul );
}
/*DEBUG[
else {
a.unwrap().wrap( '<li>' ).parent().appendTo( wbul );
}]*/
} );
} else {
pproject = $( '#p-tb' ).clone().attr( 'id', 'p-wikibase-otherprojects' ).insertAfter( '#p-tb' );
if ( pproject.attr( 'aria-labelledby' ) ) {
pproject.attr( 'aria-labelledby', 'p-wikibase-otherprojects-label' );
}
pproject.find( 'h3' ).attr( 'id', 'p-wikibase-otherprojects-label' ).text( 'Mashaariicda kale' );
pproject.find( 'ul' ).addClass( 'interProject' ).empty().append( iwlinks );
iwlinks.replaceWith( function() {
return $( '<li>' ).addClass( $(this).attr( 'class' ) ).append( $(this).contents() );
} );
}
} );
olcmjswv4d8how2i8x0o84eac2x4vze
MediaWiki:Gadget-InterProjectLinks.css
8
53791
310986
2026-10-25T14:41:41Z
Isma4l
41797
Abuuray
310986
css
text/css
/* taken from [[:nl:MediaWiki:Gadget-InterProjectLinks.css]] */
#p-wikibase-otherprojects ul,
ul.interProject {
list-style: none;
padding-left: 0;
margin-left: 0;
}
#p-wikibase-otherprojects li.interProject,
#p-wikibase-otherprojects li.wb-otherproject-link {
background-repeat: no-repeat;
background-position: left center;
padding-left: 18px;
}
body.skin-vector-legacy #p-wikibase-otherprojects li.interProject,
body.skin-vector-legacy #p-wikibase-otherprojects li.wb-otherproject-link {
margin-left: -18px;
}
li.commons,
.wb-otherproject-commons {
background-image: url("//upload.wikimedia.org/wikipedia/commons/4/4a/Commons-logo.svg");
background-size: 16px 22px;
}
li.wiktionary,
.wb-otherproject-wiktionary {
background-image: url("//upload.wikimedia.org/wikipedia/commons/f/f9/Wiktionary_small.svg");
background-size: 16px 16px;
}
li.wikibooks,
.wb-otherproject-wikibooks {
background-image: url("//upload.wikimedia.org/wikipedia/commons/f/fa/Wikibooks-logo.svg");
background-size: 16px 16px;
}
li.wikiquote,
.wb-otherproject-wikiquote {
background-image: url("//upload.wikimedia.org/wikipedia/commons/f/fa/Wikiquote-logo.svg");
background-size: 16px 16px;
}
li.wikisource,
.wb-otherproject-wikisource,
.wb-otherproject-sources {
background-image: url("//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg");
background-size: 16px 17px;
}
li.wikinews,
.wb-otherproject-wikinews {
background-image: url("//upload.wikimedia.org/wikipedia/commons/c/c8/Wikinews_waves_Left.svg");
background-size: 16px 16px;
}
li.wikispecies,
.wb-otherproject-species {
background-image: url("//upload.wikimedia.org/wikipedia/commons/d/df/Wikispecies-logo.svg");
background-size: 16px 19px;
}
li.wikivoyage,
.wb-otherproject-wikivoyage {
background-image: url("//upload.wikimedia.org/wikipedia/commons/8/8a/Wikivoyage-logo.svg");
background-size: 16px 16px;
}
li.wikiversity,
.wb-otherproject-wikiversity {
background-image: url("//upload.wikimedia.org/wikipedia/commons/9/91/Wikiversity-logo.svg");
background-size: 16px 22px;
}
li.wikidata,
.wb-otherproject-wikidata,
.wb-otherproject-wikibase-dataitem {
background-image: url("//upload.wikimedia.org/wikipedia/commons/4/4a/Wikidata_Favicon_color.svg");
background-size: 16px 16px;
}
li.meta,
.wb-otherproject-meta {
background-image: url("//upload.wikimedia.org/wikipedia/commons/7/75/Wikimedia_Community_Logo.svg");
background-size: 16px 16px;
}
li.incubator,
.wb-otherproject-incubator {
background-image: url("//upload.wikimedia.org/wikipedia/commons/e/e3/Incubator-logo.svg");
background-size: 16px 16px;
}
li.mediawiki,
.wb-otherproject-mediawiki {
background-image: url("//upload.wikimedia.org/wikipedia/commons/c/c6/MediaWiki-2020-small-icon.svg");
background-size: 16px 16px;
}
li.wikimania,
.wb-otherproject-wikimania {
background-image: url("//upload.wikimedia.org/wikipedia/commons/5/57/Wikimania.svg");
background-size: 16px 17px;
}
li.wikifunctions,
.wb-otherproject-wikifunctions {
background-image: url("//upload.wikimedia.org/wikipedia/commons/0/0c/Wikifunctions-logo.svg");
background-size: 16px 17px;
}
li.outreach,
li.wb-otherproject-outreach {
background-image: url("//upload.wikimedia.org/wikipedia/commons/8/81/Wikimedia-logo.svg");
background-size: 16px 16px;
}
li.outreach,
li.wb-otherproject-foundation {
background-image: url("//upload.wikimedia.org/wikipedia/commons/8/8b/Wikimedia-logo_black.svg");
background-size: 16px 16px;
}
li.abstract,
li.wb-otherproject-abstract {
background-image: url("//upload.wikimedia.org/wikipedia/commons/c/c5/Abstract-Wikipedia-favicon.svg");
background-size: 16px 16px;
}
1rgfenoqd21hftnahja2tsck8tlqtsn
MediaWiki:Gadget-InterProjectLinks
8
53792
310987
2026-10-25T14:42:34Z
Isma4l
41797
/* */
310987
wikitext
text/x-wiki
InterProjectLinks: Muuji "Mashaariicda kale" ee maqaallada (adigoo adeegsanaya {{tl|InterProject}}).
6kjsh8ef44yui7vsfihxchvs2zeqzci
Template:InterProject
10
53793
310988
2026-10-25T14:43:12Z
Isma4l
41797
/* */
310988
wikitext
text/x-wiki
<div id="interProject" style="border: dotted #AAA; border-width: 2px 0; margin: 2em 1ex 0; display: none; speak: none;">
<p id="sisterProjects" style="background: #efefef; font-weight: bold; margin: 0 0 -0.2em;"><span>{{ #ifeq: {{int:Sisterprojects}} || {{MediaWiki:Sisterprojects}} | {{int:Sisterprojects}} }}</span></p>
<div title="Links to other Wikimedia-Projects">{{
#if: {{{meta|}}}|[[meta:{{{meta}}}|Meta]]
}}{{#if: {{{metaglobal|}}}|[[meta:{{{metaglobal}}}|Meta (global)]]
}}{{#if: {{{commons|}}}|[[commons:{{{commons}}}|Commons]]
}}{{#if: {{{b|}}}|[[b:{{{b}}}|Wikibooks]]
}}{{#if: {{{n|}}}|[[n:{{{n}}}|Wikinews]]
}}{{#if: {{{q|}}}|[[q:{{{q}}}|Wikiquote]]
}}{{#if: {{{s|}}}|[[s:{{{s}}}|Wikisource]]
}}{{#if: {{{v|}}}|[[v:{{{v}}}|Wikiversity]]
}}{{#if: {{{d|}}}|[[d:{{{d}}}|Wikidata]]
}}{{#if: {{{wikt|}}}|[[wikt:{{{wikt}}}|Wiktionary]]
}}{{#if: {{{voy|}}}|[[voy:{{{voy}}}|Wikivoyage]]
}}{{#if: {{{species|}}}|[[species:{{{species}}}|Wikispecies]]
}}{{#if: {{{incubator|}}}|[[incubator:{{{incubator}}}|Incubator]]
}}{{#if: {{{mw|}}}|[[mw:{{{mw}}}|Mediawiki]]}}
</div>
</div><noinclude>
{{Documentation}}
</noinclude>
62x2di5wctrdz9weog6ovd5skvlnomj
MediaWiki:Gadget-remove-sticky-decoration.css
8
53794
310989
2026-10-25T14:43:59Z
Isma4l
41797
Abuuray
310989
css
text/css
.sticky-decoration {
display: none !important;
}
et3rwtinuzeppksgh83q9r5mv21rf1y
MediaWiki:Gadget-section-horumarsan
8
53795
310990
2026-10-25T14:44:41Z
Isma4l
41797
/* */
310990
wikitext
text/x-wiki
Horumarsan
7tv8ulms6ufgit2v8np4vlh685wkyml
MediaWiki:Gadget-RegexMenuFramework.js
8
53796
310991
2026-10-25T14:45:13Z
Isma4l
41797
Abuuray
310991
javascript
text/javascript
/* Script: [[m:User:Pathoschild/Scripts/Regex menu framework]]
* RegexMenuFramework: creates a sidebar menu of user-defined regex tools
* Documentation: [[m:User:Pathoschild/Scripts/Regex menu framework]]
* Written by: Pathoschild
*
*/
// load script
mw.loader.load('//meta.wikimedia.org/w/index.php?title=User:Pathoschild/Scripts/Regex_menu_framework.js&action=raw&ctype=text/javascript');
// default menu links
function gadget_rmflinks() {
regexTool('Custom regex','custom()'); // a default tool which performs regex input in a dynamic form
}
pp5s5j3ilydfk5akoiio9o6ewxkrjvv
MediaWiki:Gadget-RegexMenuFramework
8
53797
310992
2026-10-25T14:45:56Z
Isma4l
41797
/* */
310992
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-sister}}">(S)</abbr></sup> <sup><abbr title="{{int:gadgets-user}}">(U)</abbr></sup> Ku dar menu-ga dhinaca ee qalabka regex-ka ee uu qeexay isticmaalaha, oo wata foom firfircoon oo loogu talagalay hal-mar oo isla markiiba la isticmaalo regex ([[m:User:Pathoschild/Scripts/Regex menu framework|dukumiintiga]])
13uglzhqqse8uz28c5xb7ryfggy0win
MediaWiki:Gadget-ShowMessageNames.js
8
53798
310993
2026-10-25T14:46:35Z
Isma4l
41797
Abuuray
310993
javascript
text/javascript
/* _____________________________________________________________________________
* | |
* | === WARNING: GLOBAL GADGET FILE === |
* | Changes to this page affect many users. |
* | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. |
* |_____________________________________________________________________________|
*
* Add a toolbox link to display the current page with MediaWiki message names replacing their text
* Revision: 1.0
* Author: Edokter
*/
$(function() {
mw.util.addPortletLink(
'p-tb',
location.href.replace( location.hash, '' ) + ( location.search ? '&' : '?' ) + 'uselang=qqx',
'Message names',
't-messagenames',
'Display the current page with MediaWiki message names replacing their text'
);
});
87j2v2yn0izslqese79sfb8deqmecr2
MediaWiki:Gadget-ShowMessageNames
8
53799
310994
2026-10-25T14:47:18Z
Isma4l
41797
/* */
310994
wikitext
text/x-wiki
Ku dar xiriirka qalabka si dib loogu raro bogga hadda iyadoo magacyada fariimaha nidaamka [[Special:AllMessages|system message names]] la muujiyay
8fepyv35ifugvb82hkdpi8x25jj1bl8
310995
310994
2026-10-25T14:47:41Z
Isma4l
41797
/* */
310995
wikitext
text/x-wiki
Ku dar xiriirka qalabka si dib loogu raro bogga hadda iyadoo [[Special:AllMessages|magacyada fariimaha nidaamka ]] la muujiyay
8rhussov3la4zed14ug4dtbwnzvf7wx
MediaWiki:Gadget-DebugMode.js
8
53800
310996
2026-10-25T14:48:22Z
Isma4l
41797
Abuuray
310996
javascript
text/javascript
/* _____________________________________________________________________________
* | |
* | === WARNING: GLOBAL GADGET FILE === |
* | Changes to this page affect many users. |
* | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. |
* |_____________________________________________________________________________|
*
* Add a toolbox link to reload the current page with debug mode enabled
* Revision: 1.0
* Author: Edokter
*/
$(function() {
mw.util.addPortletLink(
'p-tb',
location.href.replace( location.hash, '' ) + ( location.search ? '&' : '?' ) + 'debug=true',
'Debug mode',
't-debugmode',
'Reload the current page with debug mode enabled'
);
});
inqyup4nzpa6sb2r0jnexr4sgz7nnzc
MediaWiki:Gadget-DebugMode
8
53801
310997
2026-10-25T14:49:13Z
Isma4l
41797
/* */
310997
wikitext
text/x-wiki
Ku dar xiriirka qalabka si dib loogu raro bogga hadda iyadoo Resource Loader uu ku jiro [[mw:ResourceLoader/Features#Debug mode|habka cilmi-baarista]]
luqu0uk2zduny6d4a4r3uec9zbbmsb0
MediaWiki:Gadget-contribsrange.js
8
53802
310998
2026-10-25T14:50:15Z
Isma4l
41797
Abuuray
310998
javascript
text/javascript
// _________________________________________________________________________________________
// | |
// | === DIGTOOR: FAYLKA GADGET-KA CAALAMIGA AH === |
// | Isbeddellada boggan waxay saameeyaan isticmaaleyaal badan. |
// | Fadlan kala hadal isbeddellada bogga wadahadalka ama [[Wikipedia_talk:Gadget]] ka hor inta |
// | aadan wax ka beddelin. |
// |_________________________________________________________________________________________|
//
// Laga soo dejiyay nooca 312947638 laga bilaabo Sebtembar 10, 2009 ka [[User:Splarka/contribsrange.js]]
// Eeg qoraallada hoose
/* Special:Contributions Wildcard/CIDR raadinta, nooca [0.2.7]
Asal ahaan ka timid: https://en.wikipedia.org/wiki/User:Splarka/contribsrange.js
Qoraallada:
* Waxay isticmaashaa API-ga kaas oo ka dhaqso badan qalabka wax ku biirinta ee CIDR-ka badan.
** Waxay u baahan tahay 1.14 r42198+ horay u socodka sareeya.
* Hadda waxay isticmaashaa GET json iyada oo loo marayo <script src=""> si looga fogaado dhibaatooyinka ajax.
* Kaliya waxay shaqeysaa haddii la gudbiyo (ama uu waco URL parameter, tusaale Special:Contributions/User).
** Waxay hubisaa namespace iyo xulashooyinka taariikhda ee foomka.
** Sidoo kale waxay isticmaashaa &ucstart iyo &ucend parameters-ka taariikhda haddii la bixiyo gacanta (lagu taageero UI-ga ma aha).
*** Parameters-kani waxay ka adkaadaan xulashooyinka taariikhda foomka.
* Isticmaala: Gudbi wax kasta oo IP CIDR range ah /16 ama laga bilaabo /24 ilaa /32. Gudbi xarfo kasta (ugu yaraan 3 xaraf) oo wata xiddig dhamaadka ah (*).
** tusaale: [123.123.123.0/24 ] ama [123.123.123.* ] ama [Willy* ].
* Hadda wuxuu sii wadaa raadinta ilaa uu ka helayo crMax (ama weligii oo wata crshowall=true URI parameter).
** Wuxuu geliyaa xidhmo div ah oo la laab-laabay, sida wax-ka-beddelladii dhowaa ee la hagaajiyay.
* Xaddidayaasha /25 iyo /26 hadda waa la curyaamiyay, maadaama ay yihiin kuwo aan sax ahayn (xadka 50 parameters ah), fadlan isticmaal /24 (ucuserprefix) ama /27 (32 parameters)
Waxa la qaban doono:
* isticmaal ajax (u oggolow sysops/bots = 5000)?
*/
/*jshint scripturl:true*/
/*global jQuery, mediaWiki, prefixContribs, prefixContribsToggleDiv, prefixContribsToggleAll */
( function ( mw, $ ) {
function prefixContribsInit() {
var options;
var show = document.getElementById('contentSub') || document.getElementById('topbar');
if(show) show.appendChild(document.createTextNode(' \u2022 JavaScript-enhanced contributions lookup 0.2 enabled. Waxaad gelin kartaa CIDR range ama ku dari kartaa xiddig si aad u samayso raadinta hordhaca ah. IPv6, waa inaad isticmaashaa xarfo waaweyn (capital letters) si uu gadget-ku u waafajiyo; raadinta wax-ka-beddelka dhabta ah xarfaha yaryar iyo kuwa waaweyn waynu kala saartaa.'));
var ucfrm = document.getElementsByTagName('form')[0];
if(!ucfrm.target) return;
// xulashooyinka guud ee ka madax bannaan nooca raadinta.
var opt_ns = "";
if( typeof ucfrm.namespace != "undefined" ) {
opt_ns = (parseInt(ucfrm.namespace[ucfrm.namespace.selectedIndex].value) > -1) ? '&ucnamespace=' + ucfrm.namespace[ucfrm.namespace.selectedIndex].value : '';
}
var opts_ts = '';
var dateStart = ucfrm.start.value;
var dateEnd = ucfrm.end.value;
if(dateStart) opts_ts += '&ucstart=' + dateStart + 'T23:59:59Z';
if(dateEnd) opts_ts += '&ucend=' + dateEnd + 'T23:59:59Z';
var opts_se = '';
if(queryString('ucstart')) opts_se += '&ucstart=' + encodeURIComponent(queryString('ucstart'));
if(queryString('ucend')) opts_se += '&ucend=' + encodeURIComponent(queryString('ucend'));
if(opts_se === '') {
options = opt_ns + opts_ts + '&ucdir=newer';
} else {
options = opt_ns + opts_se + '&ucdir=newer';
}
var patternCIDR = /(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/(2[7-9]|3[0-2]|24|16)/i ;
var patternWild = /^.{3,}\*$/i ;
var url = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?action=query&format=json&callback=prefixContribs&rawcontinue=&list=usercontribs' + options + '&uclimit=' + parseInt(crLimit);
if(ucfrm.target.value.search(patternCIDR) === 0) {
prefixContribsStartbox(ucfrm.parentNode);
var cidr = ucfrm.target.value.match(patternCIDR)[0];
var range = cidr.match(/[^\/]\d{1,2}$/i)[0];
if(range == 24 || range == 16) {
// CIDR hordhac leh, aan sameyno
if(range == 24) {
cidr = cidr.match(/\d{1,3}\.\d{1,3}\.\d{1,3}\./)[0];
} else {
cidr = cidr.match(/\d{1,3}\.\d{1,3}\./)[0];
}
url += '&ucuserprefix=' + cidr;
} else {
// CIDR adag, aan ogaano
var oct3 = cidr.match(/\.\d{1,3}\//i)[0].replace(/(\.|\/)/g,'');
cidr = cidr.match(/\d{1,3}\.\d{1,3}\.\d{1,3}\./)[0];
var num = Math.pow(2,32 - range);
var start = oct3 - oct3 % num;
url += '&ucuser=';
for(var i=start;i<=start + num;i++) {
url += '' + cidr + i;
if(i != start + num) url += '|';
}
}
} else if(ucfrm.target.value.search(patternWild) === 0) {
// wildcard aad u fudud, aan sameyno
prefixContribsStartbox(ucfrm.parentNode);
var prefix = ucfrm.target.value.replace(/\*$/,'');
prefix = prefix.substr(0,1).toUpperCase() + prefix.substr(1);
url += '&ucuserprefix=' + prefix;
}
mw.loader.load(url);
crContURI = url;
}
/**
* Ku lifaaq sanduuqa wax-ka-beddellada int u dhaxaysa sida carruur ahaan node-ka la bixiyay.
* @param {Node} parent Node-ka lagu lifaaqayo sanduuqa.
*/
function prefixContribsStartbox(parent) {
var res = document.createElement('div');
res.setAttribute('id','results-from-CIDR');
$('.mw-userpage-userdoesnotexist').hide();
addlinkchild(res,'javascript:prefixContribsToggleAll();','toggle all','prefixcontribs-tog');
var spin = document.createElement('span');
spin.setAttribute('id','prefixcontribs-prog');
spin.appendChild(document.createTextNode('Raadinaya.'));
res.appendChild(spin);
mw.loader.using('jquery.spinner', function () {
if (!loadingReady) {
$(spin).injectSpinner('prefixcontribs-spin');
}
});
parent.appendChild(res);
}
/**
* Baara natiijada wicitaanka API (JSONP callback function). Dukumiintiga API:
* https://en.wikipedia.org/w/api.php?action=help&modules=query+usercontribs
* @param {object} obj Shayga jawaabta API.
*/
window.prefixContribs = function (obj) {
if(!obj.query || !obj.query.usercontribs) return;
var cidr = obj.query.usercontribs;
var res = document.getElementById('results-from-CIDR');
if(!cidr.length) {
res.appendChild(document.createTextNode(' Wax isbeddel ah looma helin wildcard/CIDR range-kan.'));
removeSpinner();
return;
}
for(var i=0;i<cidr.length;i++) {
var id = 'cr-' + escapeID(cidr[i].user);
// u kooxee natiijo kasta iyadoo ku saleysan magaca isticmaalaha, samee div cusub magacyada cusub
if(!document.getElementById(id)) {
var hdiv = document.createElement('div');
hdiv.setAttribute('id','d-' + id);
addlinkchild(hdiv,'javascript:prefixContribsToggleDiv("' + id +'")',cidr[i].user,'m-' + id,'cr-toggle-hidden');
res.appendChild(hdiv);
res.appendChild(document.createTextNode('\n'));
var rul = document.createElement('ul');
rul.setAttribute('id',id);
rul.setAttribute('class','cr-list');
rul.style.display = 'none';
res.appendChild(rul);
res.appendChild(document.createTextNode('\n'));
}
var ul = document.getElementById(id);
ul.appendChild(document.createTextNode('\n'));
var li = document.createElement('li');
li.appendChild(document.createTextNode(cidr[i].timestamp.replace(/T[\d:]*Z/,' ')));
addlinkchild(li, mw.util.getUrl( 'Special:Contributions/' + cidr[i].user ), cidr[i].user);
li.appendChild(document.createTextNode(' ('));
addlinkchild(li, mw.util.getUrl( 'User_talk:' + cidr[i].user ), 'sheeko','','mw-mightexist');
li.appendChild(document.createTextNode(') wax ka beddelay ('));
addlinkchild(li, mw.util.getUrl( cidr[i].title, { curid: cidr[i].pageid, diff: 'prev', oldid: cidr[i].revid } ), 'farqi');
li.appendChild(document.createTextNode(') '));
addlinkchild(li, mw.util.getUrl( cidr[i].title, { curid: cidr[i].pageid } ), cidr[i].title);
if(cidr[i].comment) li.appendChild(document.createTextNode(' (' + cidr[i].comment + ')'));
ul.appendChild(li);
}
mw.hook( 'wikipage.content' ).fire($('.cr-list'));
// sii wad?
crMax = crMax - cidr.length;
var prog = document.getElementById('prefixcontribs-prog');
if(!obj['query-continue'] || !obj['query-continue'].usercontribs || !obj['query-continue'].usercontribs.uccontinue) {
removeSpinner();
prog.parentNode.removeChild(prog);
prefixContribsNumerate();
return;
}
var url = crContURI + '&uccontinue='+ obj['query-continue'].usercontribs.uccontinue;
if(crMax <= 0 && queryString('crshowall') != 'true') {
prog.appendChild(document.createTextNode(' Hooyo! Waxyaabo badan ayaa la helay. Si aad dhammaan u aragto guji '));
var ga = document.createElement('a');
var gaurl = document.location.href;
if(gaurl.indexOf('#') != -1) gaurl = gaurl.substr(0,gaurl.indexOf('#'));
if(gaurl.indexOf('?') == -1) gaurl += '?';
gaurl += '&crshowall=true';
ga.setAttribute('href',gaurl);
ga.appendChild(document.createTextNode('halkan'));
prog.appendChild(ga);
prog.appendChild(document.createTextNode('. (Digtoor: Waxay culeys saari kartaa browser-ka!)'));
removeSpinner();
prefixContribsNumerate();
} else {
prog.appendChild(document.createTextNode('.'));
mw.loader.load(url);
}
};
/**
* Ka saar jQuery spinner haddii module-ka spinner ee ResourceLoader uu diyaar yahay.
* Haddii uusan weli diyaar ahayn, spinner-ka lama darin meesha
* ugu horreysa; u deji `loadingReady` run si looga hortago ku daristiisa
* mustaqbalka.
*/
function removeSpinner() {
loadingReady = true;
if (mw.loader.getState('jquery.spinner') === 'ready') {
$.removeSpinner('prefixcontribs-spin');
}
}
/**
* Ku dar tirada wax-ka-beddellada agtiisa isticmaale kasta ee la helay. Tani waxay furaysaa
* oo kaliya wax-ka-beddellada isticmaalaha la helay haddii uu jiro hal kaliya.
*/
function prefixContribsNumerate() {
var lsts = $( 'ul.cr-list' );
for(var i=0;i<lsts.length;i++) {
var dv = document.getElementById('d-' + lsts[i].getAttribute('id'));
dv.appendChild(document.createTextNode(' ' + lsts[i].getElementsByTagName('li').length + ' la helay'));
}
if(lsts.length == 1) prefixContribsToggleDiv(lsts[0].id);
}
/**
* Rog liiska wax-ka-beddellada dhammaan isticmaaleyaasha. Jihooyinka waxay ku xiran yihiin
* xaaladda liiska isticmaalaha koowaad: haddii la laabay, dhammaan isticmaaleyaasha waa la furay;
* haddii la furay, dhammaan isticmaaleyaasha waa la laabay.
*/
window.prefixContribsToggleAll = function () {
var lsts = $( 'ul.cr-list' );
if(!lsts.length) return;
var togglefrom = lsts[0].style.display;
for(var i=0;i<lsts.length;i++) {
if(lsts[i].style.display == togglefrom) prefixContribsToggleDiv(lsts[i].id);
}
};
/**
* Rog liiska wax-ka-beddellada ee isticmaale la bixiyay.
* @param {string} id ID-ga isticmaalaha ee la rogayo.
*/
window.prefixContribsToggleDiv = function (id) {
var i = document.getElementById(id);
var m = document.getElementById('m-' + id);
if(!i || !m) return;
if(i.style.display == 'none') {
i.style.display = 'block';
m.className = 'cr-toggle-shown';
} else {
i.style.display = 'none';
m.className = 'cr-toggle-hidden';
}
};
/**
* Abuur xiriir oo ku dar curiyaha la bixiyay.
* @param {Node} obj Curiyaha lagu darayo xiriirka carruur ahaan.
* @param {string} href Bartilmaameedka xiriirka.
* @param {string} text Qoraalka xiriirka.
* @param {string} [id] ID-ga xiriirka anchor-ka.
* @param {string} [classes] Fasallada lagu dabaqayo xiriirka oo ah liis meel bannaan kala soocay.
* @returns {HTMLAnchorElement} Curiyaha xiriirka ee la äbuuray cusub.
*/
function addlinkchild(obj,href,text,id,classes) {
if(!obj || !href || !text) return false;
var a = document.createElement('a');
a.setAttribute('href',href);
a.appendChild(document.createTextNode(text));
if(id) a.setAttribute('id',id);
if(classes) a.setAttribute('class',classes);
obj.appendChild(a);
return a;
}
/**
* Ka baxsii qoraal si uu ugu habboonaado in loogu isticmaalo HTML ID ahaan.
* @param {string} txt Qoraalka laga baxsanayo.
* @returns {string} Qoraalka la sifeeyey.
*/
function escapeID(txt) {
var id = txt;
id = id.replace(/ /g,'_');
id = encodeURIComponent(id);
id = id.replace(/\%3A/g,':');
id = id.replace(/\%/g,'.');
return id;
}
/**
* Ka hel qayb query string ah URL-ka dukumiintiga.
* @param {string} p Magaca qaybta.
* @returns {string|null} Qiimaha qaybta, ama `null` haddii
* qaybta la waayo.
*/
function queryString(p) {
var re = RegExp('[&?#]' + p + '=([^&#]*)');
var matches = re.exec(document.location);
if (matches) {
try {
return decodeURI(matches[1]);
} catch (e) {
}
}
return null;
}
if(mw.config.get('wgCanonicalSpecialPageName') == 'Contributions'
|| mw.config.get('wgCanonicalSpecialPageName')=='IPContributions'
) {
var crContURI = ''; // query URI si loo sii wado goor dambe
var crLimit = 500; // xadka query kasta
var crMax = 10000; // ka gudub adigoo isticmaalaya &crshowall=true URI parameter
var loadingReady = false; // in raritaanku dhammaaday iyo in aysan habboonayn in spinner-ka la daro mar dambe
var crImgHid = '//upload.wikimedia.org/wikipedia/commons/a/ad/Arr_r.png';
var crImgSho = '//upload.wikimedia.org/wikipedia/commons/f/f0/Arr_d.png';
mw.util.addCSS('.cr-list {padding-left:5px;}\n.cr-toggle-hidden {padding-left:16px;background: transparent no-repeat center left url("' + crImgHid + '")}' +
'\n.cr-toggle-shown {padding-left:16px;background: transparent no-repeat center left url("' + crImgSho + '")}\n.mw-mightexist {font-style:italic;}' +
'\n#results-from-CIDR {border:1px solid black;padding:.5em}\n#prefixcontribs-tog {float:right;border:1px solid black;text-decoration:none;color:black;padding:0 5px;}');
$(prefixContribsInit);
}
}( mediaWiki, jQuery ) );
btbed915w8ck2wbc9zivxw1af0vb1uv
MediaWiki:Gadget-contribsrange
8
53803
310999
2026-10-25T14:51:06Z
Isma4l
41797
/* */
310999
wikitext
text/x-wiki
U oggolow noocyada kala duwan ee [[CIDR]] ee /16, /24 iyo /27 – /32 foomamka [[Special:Contributions]], hamigana ku dar raadinta hordhaca ah ee wildcard-ka (tusaale, "Splark*") ([[MediaWiki talk:Gadget-contribsrange.js|soo gudbi dhibaatooyinka]])
2ejj8hg4v5gul46aa7cucrq5qt3ry1u
MediaWiki:Gadget-libExtraUtil.js
8
53804
311000
2026-10-25T14:54:10Z
Isma4l
41797
Abuuray
311000
javascript
text/javascript
/* _____________________________________________________________________________
* | |
* | === DIGTOOR: FAYLKA GADGET-KA CAALAMIGA AH === |
* | Isbeddellada boggan waxay saameeyaan isticmaaleyaal badan. |
* | Fadlan kala hadal isbeddellada bogga wadahadalka ama [[WT:Gadget]] ka hor inta|
* | aadan wax ka beddelin. |
* |_____________________________________________________________________________|
*
* ###############################################################################
* # |
* # Qoraalkan wuxuu ku leeyahay imtixaanno qaybta /testcases.js hoose. Fadlan |
* # rakib qoraalka WikiUnit [[User:Evad37/WikiUnit]] oo wad imtixaannada ka hor |
* # inta aadan kaydin. |
* # |
* ###############################################################################
*
* Laga soo dejiyay nooca 924857650 oo ahaa 14 Nofeembar 2019 laga Bilaabo [[User:Evad37/extra.js]]
* Fariimaha caawinta ee caadiga ah (loo abuuray XFDcloser, laakiin laga yaabaa inay u roon yihiin qoraallada kale)
* Qoraa: Evad37
*
* Iska jir in aad soo rarto modules-ka habboon ee resource loader, sida loo cayimay hawl kasta.
* Eeg < https://www.mediawiki.org/wiki/mw.loader >
*/
/* jshint esversion: 5, laxbreak: true, undef: true, maxerr: 999*/
/* globals window, $, mw, OO, extraJs */
// <nowiki>
window.extraJs = { version: '2.3.0' };
/**
* makeApiErrorMsg
*
* Waxay samaysaa fariin qalad ah, oo ku habboon in loo soo bandhigo isticmaalaha, laga soo bilaabo qiyamka
* ee MediaWiki Api u gudbiyo shaqada callback ee fashilantay, tusaale.
* `new mw.Api.get(queryObject}).done(successCallback).fail(failureCallback)`
*
* @param {string} code
* Halbeegga koowaad ee loo gudbiyay shaqada callback ee fashilantay.
* @param {jQuery.jqXHR} jqxhr
* Halbeegga labaad ee loo gudbiyay shaqada callback ee fashilantay.
* @return {string} Faahfaahinta fariinta qaladka, oo ku jirta qaab sida
* "(API|HTTP) error: details"
*/
extraJs.makeErrorMsg = function(code, jqxhr) {
var details = '';
if ( code === 'http' && jqxhr.textStatus === 'error' ) {
details = 'Qaladka HTTP ' + jqxhr.xhr.status;
} else if ( code === 'http' ) {
details = 'Qaladka HTTP: ' + jqxhr.textStatus;
} else if ( code === 'ok-but-empty' ) {
details = 'Qalad: Wax jawaab ah kama helin server-ka';
} else {
details = 'Qaladka API: ' + code;
}
return details;
};
/**
* makeLink
*
* Waxay samaysaa xiriir ku socda bogga Wikipedia ee Ingiriiska kaas oo ka furmaya tab/daaqad cusub.
*
* @requires {Module} mediawiki.util
* @param {string} linktarget
* Bogga bartilmaameedka ah.
* @param {string} linktext
* Qoraalka lagu muujinayo xiriirka. Ikhtiyaari ah, haddii aan la bixin bartilmaameedka ayaa la isticmaali doonaa.
* @return {jQuery} Shayga jQuery ee ka kooban curiyaha `<a>`.
*/
extraJs.makeLink = function(linktarget, linktext) {
if ( linktext == null ) {
linktext = linktarget;
}
return $('<a>').attr({
'href': mw.util.getUrl(linktarget),
'target':'_blank'
}).text(linktext);
};
/**
* makeTooltip
*
* Samee calaamadda su'aasha oo ku jirta goobo taas oo tusaysa 'tooltip' marka la dul-istaago
*
* @deprecated Isticmaal addTooltip halkii aad ka isticmaali lahayd tan.
*
* @param {string} tipText
* Qoraalka loogu talagalay tooltip-ka.
* @return {jQuery} Shayga jQuery ee ka kooban curiyaha tooltip-ka
*/
extraJs.makeTooltip = function(tipText) {
// Ku dar xeerka CSS, haddii aan horay loo darin
if ( !extraJs.tooltipStyle ) {
var s = mw.loader.addStyleTag('.ejs-tooltip { border:1px solid #33a; border-radius:10px; '+
'font-weight:bold; font-size:80%; color:#22a; padding:0px; cursor:help }');
extraJs.tooltipStyle = s.sheet || s.styleSheet || s;
}
return $('<span>').attr({'title':tipText, 'class':'ejs-tooltip'}).html(' ? ');
};
/**
* addTooltip
*
* Waxay ku lifaaqdaa calaamadda su'aasha ee goobo ku jirta curiyaha, waxayna tusaysaa
* 'tooltip' marka la dul-istaago curiyaha
*
* @param {jQuery} $el Curiyaha jQuery ee lagu darayo tooltip-ka.
* @param {string} tipText Qoraalka loogu talagalay tooltip-ka.
* @return {jQuery} Curiyaha jQuery ee wata tooltip-ka
*/
extraJs.addTooltip = function($el, tipText) {
// Ku dar xeerka CSS, haddii aan horay loo darin
if ( !extraJs.tooltipStyles ) {
var s = mw.loader.addStyleTag(
".ejs-tooltips { display: inline-block; border-bottom: 1px dotted black; cursor:help; } "+
".ejs-tooltipstext-container { visibility: hidden; position: absolute; z-index: 2000; width:auto; max-width:500px; padding:2px 0 0 10px; white-space:normal; } "+
".ejs-tooltips:hover .ejs-tooltipstext-container { visibility: visible; } "+
".ejs-tooltips .ejs-tooltipstext { display:inline-block; background-color: #333; color: #ddd; text-align: center; border-radius: 5px; padding: 5px; } "+
".ejs-tooltips-symbol { border:1px solid #33a; border-radius:20px; font-weight:bold; font-size:80%; color:#22a; padding:0px; cursor:help }"
);
extraJs.tooltipStyles = s.sheet || s.styleSheet || s;
}
return $el.addClass("ejs-tooltips").append(
$("<span class='ejs-tooltips-symbol'> ? </span>"),
$("<div class='ejs-tooltipstext-container'>").append(
$("<span class='ejs-tooltipstext'>").text(tipText)
)
);
};
/**
* multiButtonConfirm
*
* Waxay isticmaashaa OOjs UI si ay u abuurto wadahadal xaqiijin badhamo badan leh.
*
* @requires {Modules} oojs-ui-core, oojs-ui-windows, mediawiki.util
* @param {string} title
* Cinwaanka wadahadalka.
* @param {string} message
* Fariinta wadahadalka. Calaxyada qaar ee HTML waa la baxsadaa, jilayaasha cusub waa la iska indhatiraa.
* @param {object[]} buttons
* Array ka kooban walxo mid walba matalaysa badhan lagu tuso xagga hoose ee codsiga.
* Shay kasta wuxuu noqon karaa qaabka
* `{
* label: {string},
* action: {string|null},
* flags: {string|null},
* }`
* halkaas oo `label` uu yahay calaamadda lagu tusayo badhanka, `action` waa qiimaha loo gudbiyo shaqada
* callback haddii badhankaas uu doorto isticmaalaha, iyo `flags` waa mid ka mid ah "safe", "primary",
* "progressive", ama "destructive", sida ku xusan https://www.mediawiki.org/wiki/OOjs_UI/Elements/Flagged
* @param {function} callback
* Shaqada callback ee la fuliyo ka dib marka la doorto badhan (oo loo gudbiyay qiimaha `action` ee badhankaas)
* @param {object} options
* Xulashooyinka bandhigga:
* @param {boolean} options.verbose
* Muuji qaabaynta fariinta ee faahfaahsan (bidix halkii laga waafajin lahaa dhexda)
* @param {boolean} options.unescape
* Ka bixi calaamadaha fudud ee HTML ee soo socda (sifooyin la'aan) fariinta ku dhex jira:
* <br>, <p>, <ul>, <li>, <pre> (iyo calaamadaha xiritaanka ee u dhigma ama kuwa isku xidhay).
* Calaxyada ku dhex jira calaamadaha <pre> lama soo celin doono.
* @param {boolean} options.wikilinks
* U beddel [[wikilinks]] xiriirada dhabta ah. Haddii `options.unescape` loo dejiyo `true`, wikilinks-ka
* ku dhex jira calaamadaha <pre> lama beddeli doono.
*/
extraJs.multiButtonConfirm = function(title, message, buttons, callback, options) {
// Haddii loo baahdo, abuur array ka kooban deferreds
if ( !extraJs.multiButtonConfirm.dfd ) {
extraJs.multiButtonConfirm.dfd = [$.Deferred().resolve()];
}
// Ku dar Deferred, si loo xalliyo marka daaqaddii hore ay dhammaato
var dfdIndex = extraJs.multiButtonConfirm.dfd.push($.Deferred()) - 1;
// Fur daaqadda marka daaqaddii hore ee Deferred la xalliyo
extraJs.multiButtonConfirm.dfd[dfdIndex-1].done(function(){
extraJs.multiButtonConfirm.windowManager = new OO.ui.WindowManager();
var windowManager = extraJs.multiButtonConfirm.windowManager;
var messageDialog = new OO.ui.MessageDialog();
$('body').append( windowManager.$element );
windowManager.addWindows( [ messageDialog ] );
var instance = windowManager.openWindow( messageDialog, {
title: title,
message: message,
verbose: options && options.verbose,
actions: buttons
} );
instance.opened.then( function() {
if ( options && ( options.unescape || options.wikilinks ) ) {
// Qoraalka fariinta ee la baxsaday
var msg = $('label.oo-ui-messageDialog-message')
.filter(':visible')
.text();
// Ka bixi html-ka la baxsaday - calaamadaha pre
if ( options.unescape ) {
// Marka hore baara calaamadaha pre (sidan oo kale <`s ee aan la baxsanin waxay noqon doonaan kuwa pre tags)
msg = msg.replace(/<(\/?pre\s?\/?)>/g,'<$1>');
}
// Ka dhig wikilinks xiriirada dhabta ah
if ( options.wikilinks ) {
var path = 'https:' + mw.config.get('wgServer') + '/wiki/';
// Marka hore xiriirada la dhuuxay, ka dib xiriirada fudud (haddaanay ku jirin <pre> tags)
msg = msg.replace(
/\[\[([^\|\]]*?)\|([^\|\]]*?)\]\](?![^<]*?<\/pre>)/g,
'<a href="' + path + mw.util.wikiUrlencode('$1') + '" target="_blank">$2</a>'
).replace(
/\[\[([^\|\]]+?)]\](?![^<]*?<\/pre>)/g,
'<a href="' + path + mw.util.wikiUrlencode('$1') + '" target="_blank">$1</a>'
);
}
// Ka bixi html-ka la baxsaday - calaamadaha kale
if ( options.unescape ) {
// Baara calaamadaha kale, haddaanay ku jirin calaamadaha <pre> tags
msg = msg.replace(/<(\/?(?:br|p|ul|li)\s?\/?)>(?![^<]*?<\/pre>)/g,'<$1>');
}
// Beddel fariinta
$('label.oo-ui-messageDialog-message')
.filter(':visible')
.html(msg);
// Dib u cabbir wadahadalka si uu ugu habboonaado
messageDialog.updateSize();
}
} );
instance.closed.then( function ( data ) {
if ( data && data.action ) {
callback(data.action);
} else {
callback(null);
}
windowManager.destroy();
// Xalli daaqaddan Deferredkeeda
extraJs.multiButtonConfirm.dfd[dfdIndex].resolve();
} );
});
};
/** Template
*
* @class
* Waxay matalaysaa qoraalka wikitext ee template transclusion. Waxaa isticmaala #parseTemplates.
* @prop {String} name Magaca template-ka
* @prop {String} wikitext Wikitext-ka buuxa ee transclusion-ka
* @prop {Object[]} parameters Halbeegyada lagu isticmaalay transclusion-ka, oo kala horeeya, qaabka:
{
name: {String|Number} magaca halbeegga, ama booska halbeegyada aan la magacaabin,
value: {String} Wikitext loo gudbiyay halbeegga (meelaha bannaan la jaray),
wikitext: {String} Wikitext-ka buuxa (oo ay ku jiraan tuubbada hordhaca ah, magaca halbeegga/calaamadda isla eegaynta (haddii ay khuseyso), qiimaha, iyo meel kasta oo bannaan)
}
* @constructor
* @param {String} wikitext Wikitext ee template transclusion, oo ka bilaabmaya '{{' kuna dhammaanaya '}}'.
*/
extraJs.Template = function(wikitext) {
this.wikitext = wikitext;
this.parameters = [];
};
extraJs.Template.constructor = extraJs.Template;
extraJs.Template.prototype.addParam = function(name, val, wikitext) {
this.parameters.push({
'name': name,
'value': val,
'wikitext': '|' + wikitext
});
};
/**
* Hel xogta halbeegga iyadoo la adeegsanayo magaca halbeegga
*/
extraJs.Template.prototype.getParam = function(paramName) {
return this.parameters.find(function(p) { return p.name == paramName; });
};
extraJs.Template.prototype.setName = function(name) {
this.name = name.trim();
};
/**
* parseTemplates
*
* Waxay baartaa templates-ka wikitext-ka.
* Waxay ku saleysan tahay nooca SD0001 ee <https://en.wikipedia.org/wiki/User:SD0001/parseAllTemplates.js>.
* Waxay soo celisaa array ka kooban faahfaahinta template-ka:
* var templates = parseTemplates("Hello {{foo |Bar|baz=qux |2=loremipsum|3=}} world");
* console.log(templates[0]); // --> object
{
name: "foo",
wikitext:"{{foo |Bar|baz=qux | 2 = loremipsum |3=}}",
parameters: [
{
name: 1,
value: 'Bar',
wikitext: '|Bar'
},
{
name: 'baz',
value: 'qux',
wikitext: '|baz=qux '
},
{
name: '2',
value: 'loremipsum',
wikitext: '| 2 = loremipsum '
},
{
name: '3',
value: '',
wikitext: '|3='
}
],
getParam: function(paramName) {
return this.parameters.find(function(p) { return p.name == paramName; });
}
}
*
*
* @param {String} wikitext
* @param {Boolean} recursive U deji `true` si aad sidoo kale u baarto templates-ka ka dhex dhaca templates-ka kale,
* halkii ay ahaan lahaayeen templates-ka heerka sare ah oo kaliya.
* @return object[]
*/
extraJs.parseTemplates = function(wikitext, recursive) {
var strReplaceAt = function(string, index, char) {
return string.slice(0,index) + char + string.slice(index + 1);
};
var result = [];
var processTemplateText = function (startIdx, endIdx) {
var text = wikitext.slice(startIdx, endIdx);
var template = new extraJs.Template('{{' + text.replace(/\1/g,'|') + '}}');
// beddel tuubbada ku jirta xiriirada adigoo adeegsanaya dabeecadda xakamaynta \1
// [[File: ]] waxay yeelan kartaa tuubooyin badan, markaa waxaa laga yaabaa inay u baahato baaritaanno badan
while ( /(\[\[[^\]]*?)\|(.*?\]\])/g.test(text) ) {
text = text.replace(/(\[\[[^\]]*?)\|(.*?\]\])/g, '$1\1$2');
}
var chunks = text.split('|').map(function(chunk) {
// u beddel dabeecadaha xakamaynta '\1' dib loogu celiyo tuubooyinka
return chunk.replace(/\1/g,'|');
});
template.setName(chunks[0]);
var parameterChunks = chunks.slice(1);
var unnamedIdx = 1;
parameterChunks.forEach(function(chunk) {
var indexOfEqualTo = chunk.indexOf('=');
var indexOfOpenBraces = chunk.indexOf('{{');
var isWithoutEquals = !chunk.includes('=');
var hasBracesBeforeEquals = chunk.includes('{{') && indexOfOpenBraces < indexOfEqualTo;
var isUnnamedParam = ( isWithoutEquals || hasBracesBeforeEquals );
var pName, pNum, pVal;
if ( isUnnamedParam ) {
// Hel lambarka xiga ee aan weli ay isticmaalin halbeeg aan la magacaabin, ama halbeeg
// la magacaabay sida `|1=val`
while ( template.getParam(unnamedIdx) ) {
unnamedIdx++;
}
pNum = unnamedIdx;
pVal = chunk.trim();
} else {
pName = chunk.slice(0, indexOfEqualTo).trim();
pVal = chunk.slice(indexOfEqualTo + 1).trim();
}
template.addParam(pName || pNum, pVal, chunk);
});
result.push(template);
};
var n = wikitext.length;
// tirada xirmooyinka aan la xirin
var numUnclosed = 0;
// miyaannu ku jirnaa faallo, ama int u dhaxaysa nowiki tags, ama {{{parameter}}} dhexdiisa?
var inComment = false;
var inNowiki = false;
var inParameter = false;
var startIdx, endIdx;
for (var i=0; i<n; i++) {
if ( !inComment && !inNowiki && !inParameter ) {
if (wikitext[i] === '{' && wikitext[i+1] === '{' && wikitext[i+2] === '{' && wikitext[i+3] !== '{') {
inParameter = true;
i += 2;
} else if (wikitext[i] === '{' && wikitext[i+1] === '{') {
if (numUnclosed === 0) {
startIdx = i+2;
}
numUnclosed += 2;
i++;
} else if (wikitext[i] === '}' && wikitext[i+1] === '}') {
if (numUnclosed === 2) {
endIdx = i;
processTemplateText(startIdx, endIdx);
}
numUnclosed -= 2;
i++;
} else if (wikitext[i] === '|' && numUnclosed > 2) {
// beddel tuubooyinka ku jira templates-ka hoose dabeecadda \1
wikitext = strReplaceAt(wikitext, i,'\1');
} else if ( /^<!--/.test(wikitext.slice(i, i + 4)) ) {
inComment = true;
i += 3;
} else if ( /^<nowiki ?>/.test(wikitext.slice(i, i + 9)) ) {
inNowiki = true;
i += 7;
}
} else { // waxaan ku jirnaa faallo ama nowiki ama {{{parameter}}}
if (wikitext[i] === '|') {
// beddel tuubooyinka dabeecadda \1
wikitext = strReplaceAt(wikitext, i,'\1');
} else if (/^-->/.test(wikitext.slice(i, i + 3))) {
inComment = false;
i += 2;
} else if (/^<\/nowiki ?>/.test(wikitext.slice(i, i + 10))) {
inNowiki = false;
i += 8;
} else if (wikitext[i] === '}' && wikitext[i+1] === '}' && wikitext[i+2] === '}') {
inParameter = false;
i += 2;
}
}
}
if ( recursive ) {
var subtemplates = result.map(function(template) {
return template.wikitext.slice(2,-2);
})
.filter(function(templateWikitext) {
return /\{\{(?:.|\n)*\}\}/.test(templateWikitext);
})
.map(function(templateWikitext) {
return extraJs.parseTemplates(templateWikitext, true);
});
return result.concat.apply(result, subtemplates);
}
return result;
};
/**
* toSentenceCase
*
* Waxay ka dhigtaa xarafka ugu horreeya ee xarigga mid weyn (capital).
*
* @param {String} input
* Xarigga la beddelayo.
* @param {Boolean} lc
* U beddel jilayaasha ka dambeeya xarafka koowaad kuwa yaryar (lowercase)
* @returns {String} Xarigga la beddelay.
*/
extraJs.toSentenceCase = function(input, lc) {
return input.slice(0,1).toUpperCase() +
(( lc ) ? input.slice(1).toLowerCase() : input.slice(1));
};
/**
* uniqueArray
*
* Waxay sifeysaa qiyamka suurtagalka ah ee nuqulka ah ee ka imanaya array ka kooban xarigyo.
*
* @param {String[]} a Array la sifeynayo.
* @return {String[]} Array-ga la sifeeyey.
*/
extraJs.uniqueArray = function(a) {
var table = {};
a.forEach(function(e) {
table[e] = true;
});
return Object.keys(table);
};
/**
* unlink
*
* Shaqo lagu tirtiro iyo/ama laga saaro xiriirada iyo isticmaalka faylasha qayb ka mid ah wikitext.
* Laga soo qaatay XFDcloser < https://en.wikipedia.org/wiki/User:Evad37/XFDcloser.js >
*
* @requires {Module} mediawiki.util, User:SD0001/parseTemplate.js
* @param {string} wikitext
* Wikitext ee laga raadinayo xiriirada ama isticmaalka faylasha.
* @param {string[]} unlinkThese
* Array ka kooban cinwaannada bogagga ee la tirtirayo xiriirkooda.
* @param {number} ns
* Lambarka namespace-ka uu wikitext ku jiro.
* @param {boolean} isDab
* Wikitext waa bogga caddeynta (disambiguation).
* @return {string} Wikitext-ka la cusboonaysiiyay. Haddii aan la helin wax xiriiro ama isticmaalka faylal ah, tani waxay ahaan doontaa
* mid la mid ah wikitext-ka la geliyay.
*/
extraJs.unlink = function(wikitext, unlinkThese, ns, isDab) {
// Ka saar isticmaalka sawirka/faylka, haddii cinwaannada qaar ay yihiin faylal
var unlinkFiles = unlinkThese.filter(function(t){ return /^File:/i.test(t); });
if ( unlinkFiles.length > 0 ) {
// Bilow dhisidda xargaha regex
var normal_regex_str = "(";
var gallery_regex_str = "(";
var free_regex_str = "(";
var filename, filename_regex_str;
for ( var i=0; i<unlinkFiles.length; i++ ) {
// Ka saar hordhaca namespace-ka
filename = unlinkFiles[i].replace(/^.*?:/, "");
// Wixii ku saabsan regex matching: xarafka koowaad wuxuu noqon karaa mid weyn ama yar, xarfaha gaarka ah
// waxay u baahan yihiin in la baxsado, meelaha bannaanka/hoose waxaa noqon kara meelo bannaan ama hoose
filename_regex_str = "[" + mw.util.escapeRegExp(filename.slice(0, 1).toUpperCase()) +
mw.util.escapeRegExp(filename.slice(0, 1).toLowerCase()) + "]" +
mw.util.escapeRegExp(filename.slice(1)).replace(/(?: |_)/g, "[ _]");
// Ku dar xargaha regex
normal_regex_str += "\\[\\[\\s*(?:[Ii]mage|[Ff]ile)\\s*:\\s*" + filename_regex_str +
"\\s*\\|?.*?(?:(?:\\[\\[.*?\\]\\]).*?)*\\]\\]";
gallery_regex_str += "^\\s*(?:[Ii]mage|[Ff]ile):\\s*" + filename_regex_str + ".*?$";
free_regex_str += "\\|\\s*(?:[\\w\\s]+\\=)?\\s*(?:(?:[Ii]mage|[Ff]ile):\\s*)?" +
filename_regex_str;
if ( i+1 !== unlinkFiles.length ) {
normal_regex_str += "|";
gallery_regex_str += "|";
free_regex_str += "|";
}
}
// Xir xargaha regex
normal_regex_str += ")(?![^<]*?-->)";
gallery_regex_str += ")(?![^<]*?-->)";
free_regex_str += ")(?![^<]*?-->)";
// Hubi isticmaalka faylka caadiga ah, tusaale [[File:Foobar.png|...]]
var normal_regex = new RegExp( normal_regex_str, "g");
wikitext = wikitext.replace(normal_regex, "");
// Hubi isticmaalka gallery-ga, tusaale tusaalooyinka ay tahay inay ka bilowdaan saf cusub, ugu dambeyn
// waxaa ka horreeya meel bannaan, waana inay ku jiraan hordhaca File: ama Image:
var gallery_regex = new RegExp( gallery_regex_str, "mg" );
wikitext = wikitext.replace(gallery_regex, "");
// Hubi isticmaalka xorta ah, tusaale ahaan dood ahaan template, waxaa laga yaabaa in hordhaca File: ama Image:
// la reebo, laakiin waa inay horay u sii socoto |
var free_regex = new RegExp( free_regex_str, "mg" );
wikitext = wikitext.replace(free_regex, "");
}
// Ka saar xiriirada/templates-ka portal-ka, haddii ay jiraan
var unlinkPortals = unlinkThese.filter(function(t){ return /^Portal:/i.test(t); });
if ( unlinkPortals.length > 0 ) {
// Dhis xarigga regex
var portal_regex_str = "(" +
unlinkPortals.map(function(portal) {
// Ka saar hordhaca namespace-ka
var portalname = portal.replace("Portal:", "");
// Wixii ku saabsan regex matching: xarafka koowaad wuxuu noqon karaa mid weyn ama yar, xarfaha gaarka ah
// waxay u baahan yihiin in la baxsado, meelaha bannaanka/hoose waxaa noqon kara meelo bannaan ama hoose
return "[" + mw.util.escapeRegExp(portalname.slice(0, 1).toUpperCase()) +
mw.util.escapeRegExp(portalname.slice(0, 1).toLowerCase()) + "]" +
mw.util.escapeRegExp(portalname.slice(1)).replace(/(?: |_)/g, "[ _]");
}).join('|') +
")(?![^<]*?-->)"; // Xir xarigga regex
var portal_regex = new RegExp(portal_regex_str);
// Raadi templates si looga saaro halbeegyada, ama looga saaro gebi ahaanba
var templatesInWikitext = extraJs.parseTemplates(wikitext, true);
// templates-ka isticmaala halbeegyada lambarsan/aan la magacaabin, tusaale {{Portal|Foo|Bar}}
var numberedParameterTemplates = [
// {{Portal}} iyo redirection-keeda:
'portal', 'portalpar', 'portal box', 'ports', 'portal-2',
// {{Portal-inline}} iyo redirection-keeda:
'portal-inline', 'portal inline', 'portal frameless', 'portal-inline-template',
// {{Portal bar}} iyo redirection-keeda:
'portal bar', 'portalbar'
];
// templates-ka isticmaala halbeegyada la magacaabay, tusaale {{Subject bar |portal=Foo |portal2=Bar}}
var namedParameterTemplates = ['subject bar'];
// shaqooyinka caawinta ee sifeynta/khariidadaha
var isNumberedParameter = function(param) {
return !isNaN(Number(param.name));
};
var isNamedPortalParameter = function(param) {
return /portal\d*/.test(param.name);
};
/**
* @param {TemplateObject[]} existingTemplates Qayb ka mid ah TemplateObjects ka yimid extraJs.parseTemplates
* @param {Function(ParamObject)=>boolean} paramTypeFilter Shaqada soo celineysa `true` haddii
* halbeegga la soo gudbiyay uu ku jiro portal, iyo `false` haddii kale
* @param {Function(ParamObject[])=>boolean} keepFilter Shaqada soo celineysa `true` haddii
* template-ka la hayn lahaa (iyo la beddeli lahaa), ama `false` haddii template-ka la saari lahaa
* @sideEffect wax ka beddelaya doorsoomaha `wikitext`
*/
var editOrRemoveTemplates = function( existingTemplates, paramTypeFilter, keepFilter ) {
existingTemplates.forEach(function(template) {
var paramsToKeep = template.parameters.filter(function(param) {
return !paramTypeFilter(param) || !portal_regex.test(param.value);
});
if ( paramsToKeep.length === template.parameters.length ) {
// Wax isbeddel ah looma baahna
return;
}
if ( keepFilter(paramsToKeep) ) {
var updatedTemplateWikitext = template.wikitext.replace(/\|(.|\n)*/, '') +
paramsToKeep.map(function(p) { return p.wikitext; }).join('') +
'}}';
wikitext = wikitext.replace(template.wikitext, updatedTemplateWikitext);
} else {
// Ka saar wikitext-ka template-ka, oo ay ku jiraan calaamadaha * ama : ee horreeya:
// - haddii ay tahay safkeeda, ka saar kala-goynta safka
wikitext = wikitext.replace(
new RegExp('\\n[\\*\\:]*[\\t ]*' + mw.util.escapeRegExp(template.wikitext) + '\\n'),
'\n'
)
// - haddii wax kale uu ku jiro safka, iska daa kala-goynta safka
.replace(
new RegExp('[\\*\\:]*[\\t ]*' + mw.util.escapeRegExp(template.wikitext)),
''
);
}
});
};
// Wax ka qabo templates-ka halbeegyada lambarsan
editOrRemoveTemplates(
templatesInWikitext.filter(function(template) {
var name = template.name.toLowerCase().replace(/_/g, ' ');
return numberedParameterTemplates.includes(name);
}),
isNumberedParameter,
function(params) { return params.some(isNumberedParameter); }
);
// Wax ka qabo templates-ka halbeegyada la magacaabay
editOrRemoveTemplates(
templatesInWikitext.filter(function(template) {
var name = template.name.toLowerCase().replace(/_/g, ' ');
return namedParameterTemplates.includes(name);
}),
isNamedPortalParameter,
function(params) { return params.length > 0; }
);
// Ka saar qaybaha "See also" ee hadda madhan
var seeAlsoSection = /(==+)\s*[Ss]ee [Aa]lso\s*==+([.\n]*?)(?:(==+)|$)/g.exec(wikitext);
if ( seeAlsoSection ) {
var hasSubsection = seeAlsoSection[1] && seeAlsoSection[3] && seeAlsoSection[3].length > seeAlsoSection[1].length;
var isEmpty = seeAlsoSection[2].trim() === '';
if ( isEmpty && !hasSubsection ) {
wikitext = wikitext.replace(seeAlsoSection[0], seeAlsoSection[3]);
}
}
}
// Ka saar xiriirada
// Bilow dhisidda xargaha regex
var simple_regex_str = "\\[\\[\\s*:?\\s*(";
var named_regex_str = "\\[\\[\\s*:?\\s*(?:";
for ( var ii=0; ii<unlinkThese.length; ii++ ) {
// Wixii ku saabsan regex matching: xarafka koowaad wuxuu noqon karaa mid weyn ama yar, xarfaha gaarka ah
// waxay u baahan yihiin in la baxsado, meelaha bannaanka/hoose waxaa noqon kara meelo bannaan ama hoose
var unlink_regex_str = "[" + mw.util.escapeRegExp(unlinkThese[ii].slice(0, 1).toUpperCase()) +
mw.util.escapeRegExp(unlinkThese[ii].slice(0, 1).toLowerCase()) + "]" +
mw.util.escapeRegExp(unlinkThese[ii].slice(1)).replace(/(?: |_)/g, "[ _]");
// Ku dar xargaha regex
simple_regex_str += unlink_regex_str;
named_regex_str += unlink_regex_str;
if ( ii+1 !== unlinkThese.length ) {
simple_regex_str += "|";
named_regex_str += "|";
}
}
// Xir xargaha regex
simple_regex_str += ")(?:#[^\\|\\]]*?)?\\s*\\]\\](?![^<]*?-->)";
named_regex_str += ")(?:#[^\\|\\]]*?)?\\s*\\|([^\\[\\]\\n\\r]+?)\\]\\](?![^<]*?-->)";
var simple_regex = new RegExp( simple_regex_str, "g" );
var named_regex = new RegExp( named_regex_str, "g" );
// Deji maqaallada tusaha magacyada, kuwaas oo loola dhaqmi doono sida bogagga caddeynta, waxay yeelan doonaan
// mid ka mid ah templates-kan
var name_set_index_regex = /\{\{\s*(?:[Gg]iven[ _]name|[Ss]urnames?|[Nn]ickname|[Ff]irst[ _]name|[Ff]orename|[Dd]isambigN(?:ame|m)?)\s*(?:\|.*?)*?\}\}/g;
if ( name_set_index_regex.test(wikitext) ) {
isDab = true;
}
// Ka saarista walxaha liiska:
if ( ns === 10 ) {
// Gudaha templates-ka navbox, ka saar xiriirada gebi ahaanba, oo ay ku jiraan *'s horreeya iyo safka ku xiga
var navbox_regex = new RegExp("\\{\\{[Nn]avbox(?: with collapsible groups| with columns)?\\s*\\|" +
"(?:.|\\n)*?(?:(?:\\{\\{" + // xisaabtan ku saabsan templates-ka gudaha navbox
"(?:.|\\n)*?(?:(?:\\{\\{" + // xisaabtan ku saabsan templates-ka gudaha templates-ka gudaha navbox
"(?:.|\\n)*?" +
"\\}\\})(?:.|\\n)*?)*?" +
"\\}\\})(?:.|\\n)*?)*" +
"\\}\\}", "g");
var navbox_simple_regex = new RegExp( "\\*+\\s*" + simple_regex_str + "[\\r\\t\\f\\v ]*\\n", "g" );
var navbox_named_regex = new RegExp( "\\*+\\s*" + named_regex_str + "[\\r\\t\\f\\v ]*\\n", "g" );
// Raadi templates-ka navbox
var navboxes = wikitext.match(navbox_regex);
if ( navboxes ) {
// ka saar kulannada regex ee wikitext
var replacement;
for ( var jj=0; jj<navboxes.length; jj++ ) {
replacement = navboxes[jj].replace(navbox_simple_regex, "").replace(navbox_named_regex, "");
wikitext = wikitext.replace(navboxes[jj], replacement);
}
}
} else if ( isDab ) {
// Bogagga caddeynta, gebi ahaanba ka saar walxaha liiska ee wata backlink, oo ay ku jiraan
// *'s horreeya iyo safka ku xiga (laakiin iska indhatiraya walxaha liiska ee wata xiriirada badan)
var dab_simple_regex = new RegExp( "\\*+[^\\[\\]\\n\\r]*" + simple_regex_str + "[^\\[\\]\\n\\r]*\\n", "g" );
var dab_named_regex = new RegExp( "\\*+[^\\[\\]\\n\\r]*" + named_regex_str + "[^\\[\\]\\n\\r]*\\n", "g" );
wikitext = wikitext.replace(dab_simple_regex, "").replace(dab_named_regex, "");
} else {
// Qaybaha See also, gebi ahaanba ka saar walxaha liiska ee wata backlink, oo ay ku jiraan
// *'s horreeya iyo safka ku xiga (laakiin iska indhatiraya walxaha liiska ee wata xiriirada badan)
var seealso_regex = /==+\s*[Ss]ee [Aa]lso\s*==+\n+(?:^.*\n*)*?(?:(?===+)|$)/gm;
var seealso_simple_regex = new RegExp( "\\*+[^\\[\\]\\n\\r]*" + simple_regex_str + "[^\\[\\]\\n\\r]*\\n", "g" );
var seealso_named_regex = new RegExp( "\\*+[^\\[\\]\\n\\r]*" + named_regex_str + "[^\\[\\]\\n\\r]*\\n", "g" );
var seealso = wikitext.match(seealso_regex);
if ( seealso ) {
// ka saar kulannada regex ee wikitext
var replacement_seealso;
for ( var kk=0; kk<seealso.length; kk++ ) {
replacement_seealso = (seealso[kk]+"\n").replace(seealso_simple_regex, "").replace(seealso_named_regex, "");
wikitext = wikitext.replace(seealso[kk].trim(), replacement_seealso.trim());
}
}
// Liisaska kale waxay u baahan yihiin dib u eegis gacanta ah, haddii shayga la hayn lahaa iyada oo aan la xiriirin (tusaale liisaska dhammaystiran ee [[WP:CSC]])
}
// Calaamadi walxaha liiska ee kale ee wata backlinks dib u eegis gacanta ah, iyadoo la adeegsanayo {{subst:void}}
var manual_review_regex = new RegExp(
'^(\\*+.*)(' +
simple_regex_str.replace(/([^\\])\(([^?])/g, "$1(?:$2") + // beddel kooxaha soo qabashada kooxo aan soo qabanayn
'|' +
named_regex_str.replace(/([^\\])\(([^?])/g, "$1(?:$2") + // beddel kooxaha soo qabashada kooxo aan soo qabanayn
')(.*)$', 'gm' );
wikitext = wikitext.replace(manual_review_regex, '{{subst:void}}$1{{subst:^|<strong>}}$2{{subst:^|</strong>}}$3');
// Dhammaan xiriirada kale, ku beddel qoraal aan la xiriirin
wikitext = wikitext.replace(simple_regex, "$1").replace(named_regex, "$1");
return wikitext;
};
/**
* val2key
*
* Shayga `obj` ee leh lammaanaha key:value, soo celi furaha u dhigma qiimaha.
*
* @param {string|number} val
* Qiimaha la raadinayo.
* @param {object} obj
* Shayga laga dhex raadinayo.
* @return {string|number} Furaha u dhigma qiimaha la geliyay.
*/
extraJs.val2key = function(val, obj) {
for ( var k in obj ) {
if ( obj[k] === val ) {
return k;
}
}
};
// </nowiki>
nxojxb20qa551rs9rnxvuui2vpvcde2
MediaWiki:Gadget-libExtraUtil
8
53805
311001
2026-10-25T14:55:06Z
Isma4l
41797
/* */
311001
wikitext
text/x-wiki
Qalabka adeegga. Waa inaadan awoodin inaad tan ka aragto Special:Preferences.
o9a81s9oo9sifknfb02ndsf3bt7rt4l
MediaWiki:Gadget-section-tijaabo
8
53806
311002
2026-10-25T14:55:56Z
Isma4l
41797
/* */
311002
wikitext
text/x-wiki
Tijaabinta iyo horumarinta
pzngx7p00lcyw3yui7di8b47ktyeimw
MediaWiki:Gadget-mobile-sidebar.js
8
53807
311003
2026-10-25T14:56:50Z
Isma4l
41797
Abuuray
311003
javascript
text/javascript
/* _____________________________________________________________________________
* | |
* | === DIGTOOR: FAYLKA GADGET-KA CAALAMIGA AH === |
* | Isbeddellada boggan waxay saameeyaan isticmaaleyaal badan. |
* | Fadlan kala hadal isbeddellada bogga wadahadalka ama [[WT:Gadget]] ka hor inta|
* | aadan wax ka beddelin. |
* |_____________________________________________________________________________|
*
* Laga soo guuriyay [[meta:User:Brion VIBBER/mobile-sidebar.js]] laga bilaabo cusboonaysiintii ugu dambaysay (2014-10-13, [[meta:Special:Permalink/10185490]])
* Sidoo kale eeg https://github.com/brion/MediaWiki-MobileSidebar
*
* Gadget-ka hordhaca dhinaca mobilada (Mobile sidebar preview gadget)
*
* Hack degdeg ah si loo tuso sida bogagga ugu eg yihiin mobilada
* inta la dhex mushaaxayo bogga desktop-ka.
*
* Brion Vibber <bvibber@wikimedia.org>
* 2014-10-10
* Waxaa nadiifiyay oo hagaajiyay prtksxna
* Waxaa sii nadiifiyay Brion :D
*/
$(function () {
// Cabbirkii duuga ahaa ee iPhone, ugu yaraan ee aan badanaa aragno
var width = 320, height = 480;
// @todo malaha ka dhig cabbirka mid la dooran karo oo laga helayo xulashooyin qaar...
// Ogow in cabbirada pixel ay yihiin kuwo marin habaabin ku ah mobilada, maadaama inta badan uu jiro
// cufnaanta factor-ka. Tusaale ahaan shaashadaha 480x800 ee 1.5x waxay dabooli lahaayeen
// oo kaliya 320x533 ama wax la mid ah. Hana gelinina arinta iPhone 6 Plus!
function showSidebar() {
localStorage['mw-mobile-sidebar-state'] = 'show';
var $content = $('#content');
var top = $content.position().top,
page = mw.config.get('wgPageName'),
src = '/wiki/' + encodeURIComponent(page) + '?useformat=mobile',
lang = mw.config.get('wgContentLanguage');
var $container = $('<div>').attr('id', 'mobile-sidebar');
var $mobileLink = $('<a>')
.text( 'Mobil' )
.addClass ( 'mobile_link' )
.attr( 'href', src )
.attr( 'target', '_blank')
.appendTo( $container );
var $egg = $( '<div>' )
.addClass( 'egg' )
.append(
$( '<img>' ).attr( 'src', 'https://upload.wikimedia.org/wikipedia/commons/thumb/8/81/Wikimedia-logo.svg/240px-Wikimedia-logo.svg.png' ),
$( '<p>' ).html( 'Haddii aad lumiso fadlan ugu soo celi <a href="https://meta.wikimedia.org/wiki/User:Brion_VIBBER">Brion Vibber</a>' )
)
.appendTo( $container )
.hide();
// @todo ogaado scrollbars oo magdhab ballaca
var $frame = $('<iframe>')
.attr('src', src)
.css('width', width + 'px')
.css('height', height + 'px')
.appendTo($container);
var $close = $('<a>')
.html(' ×')
.addClass('close')
.click( hideSidebar )
.appendTo( $container );
$container.on( 'dblclick', function () {
$egg.toggle();
$mobileLink.toggle();
$close.toggle();
$frame.toggle();
} );
var frame = $frame[0];
$frame.on('load',function () {
// ka fogow TypeError: null is not an object (evaluating 'frame.contentDocument.querySelector')
if(!frame.contentDocument) return;
// Magdhab scrollbars-ka browser-ada ku dara
var scrollBarWidth = width - frame.contentDocument.querySelector('body').clientWidth;
if ( scrollBarWidth > 0 ) {
$frame.css( 'width', ( width + scrollBarWidth ) + 'px' );
}
// Maaree navigation-ka xiriirka ee dhexda u ah dokumentiga hordhaca mobilada
$(frame.contentDocument).on('click', 'a', function (e) {
e.preventDefault();
if ($(this).attr('href') && $(this).attr('href').indexOf('#') !== 0) {
window.location = this.href;
}
});
});
if ( mw.config.get( 'skin' ) === 'vector-2022' && window.innerWidth >= 1800 && document.body.classList.contains( 'vector-feature-limited-width-enabled' ) ) {
// Uma baahna in la wareejiyo nuxurka maadaama ballaca nuxurka xaddidan ee Vector 2022 uu shaqaynayo oo firfircoon yahay
} else {
$('#content').css('margin-right', '360px');
}
$('#content').after($container);
}
function hideSidebar() {
localStorage['mw-mobile-sidebar-state'] = 'hidden';
$('#mobile-sidebar').remove();
$('#content').css('margin-right', '0');
}
function toggleState() {
if (localStorage['mw-mobile-sidebar-state'] !== 'hidden') {
hideSidebar();
} else {
showSidebar();
}
}
if (mw.config.get('wgAction') == 'view') {
var item = mw.util.addPortletLink( 'p-views', '#', 'Mobil', 'ca-mobile', 'Toggle mobile view sidebar' );
if ( item ) {
item.classList.remove( 'vector-tab-noicon' );
if ( mw.config.get( 'skin' ) === 'vector-2022' ) {
item.querySelector('a').classList.add( 'cdx-button',
'cdx-button--fake-button',
'cdx-button--fake-button--enabled',
'cdx-button--weight-quiet',
'cdx-button--icon-only' );
} else {
item.classList.add( 'icon' );
}
$(item).click( toggleState );
}
if (localStorage['mw-mobile-sidebar-state'] == 'hidden') {
hideSidebar();
} else {
showSidebar();
}
}
});
gnsj0mqwdaqfrxuv66hfkro041vtipw
MediaWiki:Gadget-mobile-sidebar
8
53808
311004
2026-10-25T14:57:43Z
Isma4l
41797
/* */
311004
wikitext
text/x-wiki
Hordhaca dhinaca mobilada: ku tusi bogga qaabka mobilada intaad dhex mushaaxayso bogga desktop-ka (kaliya maqaarka [[mw:Skin:Vector|Vector]])
jznor3s742kuq4fhc0fwmsra8o3vjlt
MediaWiki:Gadget-mobile-sidebar.css
8
53809
311005
2026-10-25T14:58:16Z
Isma4l
41797
Abuuray
311005
css
text/css
/*
* Copied from [[meta:User:Brion VIBBER/mobile-sidebar.css]] as of last update (2014-10-13, [[meta:Special:Permalink/10181319]])
*/
#mobile-sidebar {
position: fixed;
bottom: 20px;
right: 20px;
background: #444;
box-shadow: 0 0 20px #333;
border-radius: 10px;
padding: 5px;
text-align: center;
border-top: 5px solid #666;
-webkit-user-select: none; /* webkit (safari, chrome) browsers */
-moz-user-select: none; /* mozilla browsers */
-khtml-user-select: none; /* webkit (konqueror) browsers */
-ms-user-select: none; /* IE10+ */
user-select: none;
}
#mobile-sidebar iframe {
background: #fff;
border: none;
}
#mobile-sidebar a.close {
display: block;
background: #333;
color: #fff;
text-decoration: none;
height: 40px;
width: 40px;
line-height: 40px;
border-radius: 100%;
margin: 10px auto;
cursor: pointer;
text-align: center;
font-size: 16px;
font-weight: bold;
border-bottom: 1px solid #aaa;
}
#mobile-sidebar a.close:hover {
background: #222;
}
#mobile-sidebar a.mobile_link {
display: block;
color: #aaa;
font-size: 11px;
text-decoration: none;
margin: 4px;
}
#mobile-sidebar .egg {
width: 320px;
height: 566px;
text-align: center;
}
#mobile-sidebar .egg img {
width: 100px;
margin-top: 60px;
}
#mobile-sidebar .egg p {
color: #aaa;
margin-top: 345px;
}
#mobile-sidebar .egg p a {
color: #ddd;
}
/* Workaround lack of support for icons in Vector 2022 menu */
.vector-menu-tabs .mw-list-item.vector-tab-noicon > a.mw-ui-icon-mobile {
padding-top: 7px;
}
.mw-ui-icon-mobile:before {
background-image: url(https://upload.wikimedia.org/wikipedia/commons/2/2a/Phone-apple-iphone.svg);
}
.skin-vector-2022 #ca-mobile.icon a {
background: none;
}
#ca-mobile.icon a {
background-image: url(https://upload.wikimedia.org/wikipedia/commons/2/2a/Phone-apple-iphone.svg);
background-repeat: no-repeat;
margin: 0px;
padding: 3.1em 0px 0px;
display: block;
width: 36px;
height: 0px;
overflow: hidden;
background-position: 5px 60%;
background-size: 24px 24px;
}
.skin-vector-2022 #ca-mobile a {
padding: 0;
}
.skin-vector-2022 #ca-mobile a span {
background-image: url(https://upload.wikimedia.org/wikipedia/commons/2/2a/Phone-apple-iphone.svg);
background-repeat: no-repeat;
background-position: 5px 60%;
background-size: 24px 24px;
color: transparent;
}
48pw9m4likqxmn8lrkem10fv14lsc7u
MediaWiki:Gadget-addMe.js
8
53810
311006
2026-10-25T14:59:32Z
Isma4l
41797
Abuuray
311006
javascript
text/javascript
/* ______________________________________________________________________________________
* | |
* | === DIGTOOR: FAYLKA GADGET-KA === |
* | Isbeddellada boggan waxay saameeyaan isticmaaleyaal badan. |
* | Fadlan kala hadal isbeddellada bogga wadahadalka ama [[MediaWiki_talk:Gadgets-definition]]|
* | ka hor inta aadan wax ka beddelin. |
* |_____________________________________________________________________________________|
*
* Muuqaalka "Endorse & Join" (Taageer & Ku Biir), waxaa isticmaali doona Barnaamijka Deeqaha ee Wikimedia Foundation
*/
//<nowiki>
// Stylesheet-ka wata dhammaan qaababka gadget-ka taageeridda & ku biiridda
mw.loader.load( '//meta.wikimedia.org/w/index.php?title=MediaWiki:Gadget-addMe.css&action=raw&ctype=text/css', 'text/css' );
/*
* Adeegyada caadiga ah ee labada gadget ee taageeridda & ku biiridda
*/
var gadgetUtilities = function (){
// Tixraaca shayga
var that = this;
// Duubista mw si loo galo API-ga
var api = new mw.Api();
/*
* Fariimaha interface-ka ama xargaha waxaa lagu hayaa interfaceMessagesPath & qiimaha config tusaale,
* section-header, qaybta lagu daro faallooyinka iwm waxaa lagu hayaa configPath
*/
this.interfaceMessagesPath = 'MediaWiki:Gadget-addMe/InterfaceText';
this.configPath = 'MediaWiki:Gadget-addMe/Config';
// Waqtiga ay qaadanayso in boggu u guuro xumbo hadalka jawaab-celinta (milliseconds)
this.feedbackScrollTime = 2000;
// Waqtiga ay qaadanayso in xumbada hadalka jawaab-celinta ay baaba'do (milliseconds)
this.feedbackDisappearDelay = 10000;
/*
* Shaqadan waxaa loo isticmaalaa in lagu dejiyo cookie si loo tuso xumbada hadalka
* marka bogga dib loo soo raro (page reload)
*/
this.setFeedbackCookie = function(value){
$.cookie(value,true);
};
/*
* Shaqadan waxaa loo isticmaalaa in lagu hubiyo haddii cookie uu dejiyeen shaqada kore
* si loo tuso xumbada hadalka marka bogga dib loo soo raro
*/
this.checkFeedbackCookie = function(value){
if($.cookie(value)){
$.cookie(value,null);
return true;
}
else{
return false;
}
};
/*
* Si loo tuso fariin qalad ah marka qalad dhaco
* gadget-ka dhexdiisa
*/
this.showErrorMessage = function(gadget,type){
var errorAttr = '[localize=error-'+type+']';
var gadgetID = '.'+gadget;
$(gadgetID + ' ' + errorAttr).show();
};
/*
* Si meesha looga saaro fariinta qaladka ah ee ay soo bandhigtay shaqada kore
*/
this.removeErrorMessage = function(gadget){
var gadgetID = '.'+gadget;
$(gadgetID + ' [localize^="error-"]').hide();
};
/*
* Si loo ogaado nooca deeqda. IEG, PEG iwm
*/
this.grantType = function(config){
var grant = mw.config.get('wgTitle').split('/')[0].replace(/ /g,'_');
if (grant in config){
return config[grant];
}
else{
return config['default'];
}
};
/*
* Si loo ogaado luqadda caadiga ah ee isticmaalaha
*/
this.userLanguage = function(){
return mw.config.get('wgUserLanguage');
};
/*
* Si loo ogaado luqadda bogga
*/
this.contentLanguage = function(){
return mw.config.get('wgContentLanguage');
};
/*
* Si meesha looga saaro meelaha bannaanka ah ee dheeraadka ah & loo nadiifiyo xarigga faallooyinka
*/
this.cleanupText = function(text){
text = $.trim(text)+' ';
var indexOf = text.indexOf('~~~~');
if ( indexOf == -1 ){
return text;
}
else{
return text.slice(0,indexOf)+text.slice(indexOf+4);
}
};
/*
* Faylasha config ee lagu turjumi karo caawinta qalabka turjumaadda
* waxay soo saaraan dict iyadoo qiimayaashu ay leeyihiin meelo bannaan oo badan
* oo ku jira lammaanaha furaha iyo qiimaha. Shaqadani waxay ka saaraysaa meelaha bannaanka.
*/
this.stripWhiteSpace = function(dict){
for (key in dict){
// Hagaajin ku meel gaar ah oo loogu talagalay cinwaanka qaybta (section header)
if(key == 'section-header'){
dict['section-header-read'] = dict[key].replace(/ /g,'_');
dict['section-header-write'] = dict[key];
}
dict[key] = typeof(dict[key]) == 'object' ? that.stripWhiteSpace(dict[key]) : $.trim(dict[key]);
}
return dict;
};
/*
* Shaqadani waxay abuurtaa markup-ka xiriirka ee ku socda bogga isticmaalaha
*/
this.addToInfobox = function(username){
return username;
};
/*
* Si loo tarjumo fariimaha interface-ka gadget-ka iyadoo la saleynayo dejinta luqadda isticmaalaha
*/
this.localizeGadget = function (gadgetClass,localizeDict){
$(gadgetClass+' [localize]').each(function(){
var localizeValue = localizeDict[$(this).attr('localize')];
if($(this).attr('value')){$(this).attr('value',localizeValue);
}
else if($(this).attr('placeholder')){$(this).attr('placeholder',localizeValue);
}
else if($(this).attr('data-placeholder')){$(this).attr('data-placeholder',localizeValue);
}
else{
$(this).html(localizeValue);
}
});
};
/*
* Shaqadani waxay tusaysaa xumbada hadalka jawaab-celinta ka dib marka taageero la sameeyo
* ama ka dib marka lagu biiro mashruuc
*/
this.showFeedback = function(config,InterfaceMessages){
var li = $('#'+config['section-header-read']).parent().next().find('li').eq(-1);
speechBubble = li.append($('<div class="grantsSpeechBubbleContainer"></div>').html('<div class="grantsSpeechBubble">\
<span localize="message-feedback">Mahadsanid</span></div><div class="grantsSpeechBubbleArrowDown"></div>')).find('.grantsSpeechBubbleContainer');
var width = li.css('display','inline-block').width();
li.css('display','');
li.css('position','relative');
speechBubble.css('left',width/2+'px');
$('[localize=message-feedback]').html(InterfaceMessages['message-feedback']);$("body, html").animate({ scrollTop : li[0].offsetTop}, that.feedbackScrollTime);
setTimeout(function(){ speechBubble.hide();},that.feedbackDisappearDelay);
};
};
/*
* Gadget-ka Taageeridda (Endorse Gadget)
*/
var endorseGadget = function(){
/* Doorsoomayaasha (Variables) */
var util = new gadgetUtilities();
var dialog = null;
var api = new mw.Api();
var that = this;
/*
* Shaqadani waxay abuurtaa sanduuqa wada-hadalka (dialog box) ee gadget-ka.
* Halkani waa sidoo kale meesha lagu qeexayo dhammaan isdhexgalka la xiriira wada-hadalka.
*/
var createDialog = function(){
dialog = $( "<div id='devEndorseDialog'></div>" )
.html(
'<div class="mw-ui-vform">\
<div class="error grantsHide" localize="error-save">Khalad ayaa dhacay</div>\
<div class="error grantsHide" localize="error-login">Khalad ayaa dhacay</div>\
</div>\
<div localize="message-description" class="messageDescription">Sharaxaada taageeradaada waxay hagaajinaysaa hannaanka</div>' + '\
<textarea rows="5" cols="10" placeholder="Ku dar faalladaada" id="devEndorseComment" class="" localize="placeholder-comment"></textarea>\
<span localize="message-signature" class="messageSignature">Saxexayadaada si otomaatig ah ayaa loo dari doonaa</span>\
<div class="gadgetControls">\
<a href="#" localize="button-cancel" class="mw-ui-button cancel mw-ui-quiet">Jooji</a>\
<input type="submit" localize="button-submit" class="mw-ui-button mw-ui-constructive add-endorse" disabled localize="button" value="Hagaag"></input>\
</div>'
).dialog({
dialogClass: 'grantsGadget endorseGadget',
autoOpen: false,
title: 'Faallada Taageerada',
width: '495px',
modal: true,
closeOnEscape: true,
resizable: false,
draggable: false,
close: function( event, ui ) {
$('#devEndorseComment').val('');
}
});
$('.add-endorse').click(function(){
that.addEndorsement(util.cleanupText($('#devEndorseComment').val()));
});
$('#devEndorseComment').on('change keyup paste',function(){
util.removeErrorMessage('endorseGadget');
if($(this).val()){
$('.add-endorse').attr('disabled',false);$('.messageSignature').css('visibility','visible');
}
else{
$('.add-endorse').attr('disabled',true);$('.messageSignature').css('visibility','hidden');
}
});
$('.endorseGadget .ui-dialog-title').attr('localize','title');$('.endorseGadget .cancel').click(function(){
dialog.dialog('close');
});
util.localizeGadget('.endorseGadget',that.interfaceMessages);
$('.messageSignature').css('visibility','hidden');
};
this.Dialog = function () {
if (dialog === null){
createDialog();
}
else{
dialog.dialog('open');
}
};
/*
* Shaqada ugu weyn ee lagu darayo jawaab-celinta/taageerada bogga. Marka hore waxay hubisaa haddii boggu leeyahay qayb taageero ah.
* Haddii uusan lahayn waxay abuurtaa qayb cusub oo lagu magacaabo Endorsements waxayna ku lifaaqdaa faallada jawaab-celinta/taageerada qaybtaas,
* haddii kale waxay ku lifaaqdaa faallada jawaab-celinta/taageerada qaybta Endorsements ee jirta.
* Magaca qaybta taageerada waxaa lagu qeexay config-ga.
*/
this.addEndorsement = function( text ) {
var endorseComment = '\n*' + text + '~~~~' + '\n';
api.get({
'format':'json',
'action':'parse',
'prop':'sections',
'page':mw.config.get('wgPageName'),
}).then(function(result){
var sections = result.parse.sections;
var sectionCount = 1;
var sectionFound = false;
for (var section in sections ){
if ($.trim(sections[section]['anchor']) == that.config['section-header-read'] ){
sectionFound = true;
break;
}
sectionCount++;
}
if (sectionFound){
api.get({
'format':'json',
'action':'parse',
'prop':'wikitext',
'page': mw.config.get('wgPageName'),
'section': sectionCount,
}).then(function(result){
var wikitext = result.parse.wikitext['*'];
var endorsementSection = wikitext + endorseComment;
api.post({
'action' : 'edit',
'title' : mw.config.get('wgPageName'),
'text' : endorsementSection,
'summary' : 'Waxaa taageeray ' + mw.user.getName(),
'section': sectionCount,
'watchlist':'watch',
'token' : mw.user.tokens.get('csrfToken')
}).then(function(){
console.log('Si guul leh ayaa loo daray taageerada');
window.location.reload(true);
util.setFeedbackCookie('endorseFeedback');
},function(){
util.showErrorMessage('endorseGadget','save');
});
});
}
else{
var sectionHeader = that.config['section-header-write'];
api.post({
'action': 'edit',
'title': mw.config.get('wgPageName'),
'section': 'new',
'summary': sectionHeader + ' Waxaa taageeray ' + mw.user.getName(),
'sectiontitle': sectionHeader,
'text': $.trim(endorseComment),
'watchlist':'watch',
token: mw.user.tokens.get('csrfToken')
}).then(function () {
console.log('Si guul leh ayaa loo daray taageerada');
location.reload();
util.setFeedbackCookie('endorseFeedback');
}, function(){
util.showErrorMessage('endorseGadget','save');
});
}
}, function(){
util.showErrorMessage('endorseGadget','save');
});
};
};
/*
* Gadget-ka Ku Biiridda (Join Gadget)
*/
var joinGadget = function(){
/* Doorsoomayaasha (Variables) */
var util = new gadgetUtilities();
var dialog = null;
this.config = null ;
this.interfaceMessages = null;
var infobox = '';
var roleDict = {};
var api = new mw.Api();
var that = this;
/*
* Tirakoob ayaa la hayaa oo ku saabsan xirmooyinka '{{' ee furan
* marka '}}' la kulmo counter-ka waa la dhimayaa.
* Haddii counter-ku gaaro 0 dhammaadka infobox-ka ayaa la helay.
* Haddii kale syntax-ka waa jabay ama dhammaadka infobox-ka kuma jiro
* qaybta koowaad ee bogga.
*/
var extractInfobox = function(markup){
var startIndex = markup.indexOf('{{Probox');
var counter = 0;
var endIndex = 0;
for (i=startIndex;i<markup.length;i++){
if(markup[i] == '}' && markup[i+1] == '}'){
counter++;
}
if(markup[i] == '{' && markup[i+1] == '{'){
counter--;
}
if(counter == 0){
var endIndex = i+2;
break;
}
}
if (counter != 0){
return '';
}
var infobox = {
'infobox' : markup.slice(startIndex,endIndex),
'before' : markup.slice(0,startIndex),
'after' : markup.slice(endIndex),
};
return infobox;
};
/*
* Shaqadani waxay abuurtaa wada-hadalka & waxay qeexaysaa
* isdhexgalka loo baahan yahay ee wada-hadalka dhexdiisa.
*/
var createDialog = function(){
dialog = $( "<div id='devJoinDialog'></div>" )
.html(
'<div class="mw-ui-vform">\
<div class="error grantsHide" localize="error-save">Khalad ayaa dhacay</div>\
<div class="error grantsHide" localize="error-login">Khalad ayaa dhacay</div>\
</div>\
<select class="roleSelect" localize="placeholder-role" data-placeholder="Dooro doorka">\
<option></option>\
</select>\
<div localize="message-description" class="messageDescription">Noo sheeg sida aad jeclaan lahayd inaad caawiso</div>\
<textarea rows="5" cols="10" placeholder="Ku dar faalladaada" id="devJoinComment" class="" localize="placeholder-comment"></textarea>\
<span localize="message-signature" class="messageSignature">Saxexayadaada si otomaatig ah ayaa loo dari doonaa</span>\
<div class="gadgetControls">\
<a href="#" localize="button-cancel" class="mw-ui-button cancel mw-ui-quiet">Jooji</a>\
<input type="submit" localize="button-join" class="mw-ui-button mw-ui-constructive add-join" disabled localize="button" value="Ku biir"></input>\
</div>'
).dialog({
dialogClass: 'grantsGadget joinGadget',
autoOpen: false,
title: 'Faallada Ku Biiridda',
width: '495px',
modal: true,
closeOnEscape: true,
resizable: false,
draggable: false,
close: function( event, ui ) {
$('#devJoinComment').val('');
}
});
$('.add-join').click(function(){
/*
* Abuuritaanka faallada lagu darayo qaybta ka qaybgalayaasha. Faalladu waxay leedahay qaabka
* "Role" Faallada isticmaalaha. Tusaale, Volunteer Waxaan ku caawin karaa siyaabo badan.
*/
var joinRole = $('.roleSelect').val().replace(/_/,' ');
joinRole=joinRole[0].toUpperCase()+joinRole.slice(1);
joinRole = "'''"+ joinRole + "'''" + " ";
that.addjoinment(joinRole+util.cleanupText($('#devJoinComment').val()));
});
$('#devJoinComment').on('change keyup paste',function(){
util.removeErrorMessage('joinGadget');
if($(this).val()){
$('.messageSignature').css('visibility','visible');
if($('.roleSelect').val()){
$('.add-join').attr('disabled',false);
}
}
else{
$('.add-join').attr('disabled',true);
$('.messageSignature').css('visibility','hidden');
}
});
$('.joinGadget .ui-dialog-title').attr('localize','title');
$('.joinGadget .cancel').click(function(){
dialog.dialog('close');
});
util.localizeGadget('.joinGadget',that.interfaceMessages);
$('.messageSignature').css('visibility','hidden');
/*
* Koodhka hoose wuxuu helayaa infobox-ka, wuxuu hubinayaa doorarka furan,
* wuxuu xaqiijinayaa in doorarkani ay u diyaar yihiin kuwa kale
* inay ku biiraan iyagoo ka raadinaya doorarka config-ka waxayna abuurtaa liis hoos u dhacaya (dropdown)
* kaas oo isticmaalahu ka dooran karo door.
*/
api.get({
'format':'json',
'action':'parse',
'prop':'wikitext',
'page': mw.config.get('wgPageName'),
'section': 0
}).then(function(result){
var roles = that.interfaceMessages['roles'];
var wikitext = result.parse.wikitext['*'];
var content = extractInfobox(wikitext);
var infobox = that.infobox = content['infobox'];
that.before = content['before'];
that.after = content['after'];
units = infobox.split('\n');
for (unit in units){
var line = units[unit];
var role = line.match(/[a-zA-z]+/g);
if (role){
role = role.join('');
var elements = line.split('=');
var count = elements[0].match(/[0-9]+/)?elements[0].match(/[0-9]+/)[0]:1;
if (role.indexOf('volunteer') != -1){
roleDict['volunteer']=count;
}
if(role in roles && line.indexOf('=') != -1){
roleDict[role]=count;
if(!$('.roleSelect option[value="'+role+'"]').length){
$('.roleSelect').append('<option value='+role+'>'+roles[role]+'</option>');
}
}
}
}
if(!$('.roleSelect option[value="volunteer"]').length){
$('.roleSelect').append('<option value="volunteer">'+roles['volunteer']+'</option>');
}
$('.roleSelect').chosen({
disable_search: true,
placeholder_text_single: 'Dooro doorka',
width: '50%',
});
$('.roleSelect').on('change',function(){
util.removeErrorMessage('joinGadget');
if($(this).val() && $('#devJoinComment').val()){
$('.add-join').attr('disabled',false);
}
else{
$('.add-join').attr('disabled',true);
}
});
});
};
this.Dialog = function () {
if (dialog === null){
createDialog();
}
else{
dialog.dialog('open');
}
};
/*
* Shaqada ugu weyn ee lagu darayo jawaab-celinta/faallada ku biiridda bogga. Marka hore waxay hubisaa haddii boggu leeyahay qayb Participants ah.
* Haddii uusan lahayn waxay abuurtaa qayb cusub oo lagu magacaabo Participants waxayna ku lifaaqdaa jawaab-celinta/faallada qaybtaas,
* haddii kale waxay ku lifaaqdaa jawaab-celinta/faallada qaybta Participants ee jirta.
*/
this.addjoinment = function( text ) {
var joinComment = '\n*' + text + '~~~~' + '\n';
var userName = mw.config.get('wgUserName')?mw.config.get('wgUserName'):'{{subst:REVISIONUSER}}';
var roleSelected = $('.roleSelect').val();
var units = that.infobox.split('\n');
var emptyRoleAdded = false;
for (unit in units){
if ($.trim(units[unit].split('=')[1]) == ''){
var role = units[unit].match(/[a-zA-z]+/);
if (role){
role = role[0];
if(role == roleSelected){
units[unit] = $.trim(units[unit]) + util.addToInfobox(userName);
emptyRoleAdded = true;
break;
}
}
}
}
var modifiedInfoBox = units.join("\n");
if(!emptyRoleAdded){
var paramCount = roleDict["volunteer"] ? parseInt(roleDict["volunteer"]) + 1 : 1;
var endIndex = modifiedInfoBox.lastIndexOf('}}');
modifiedInfoBox = modifiedInfoBox.slice(0,endIndex)+'|volunteer'+paramCount+'='+util.addToInfobox(userName)+'\n}}';
}
api.post({
'action' : 'edit',
'title' : mw.config.get('wgPageName'),
'text' : that.before + modifiedInfoBox + that.after,
'summary' : 'Waxaa lagu biiray sida ' + roleSelected,
'section': 0,
'watchlist':'watch',
'token' : mw.user.tokens.get('csrfToken')
}).then(function(){
api.get({
'format':'json',
'action':'parse',
'prop':'sections',
'page':mw.config.get('wgPageName'),
}).then(function(result){
var sections = result.parse.sections;
var sectionCount = 1;
var sectionFound = false;
for (var section in sections ){
if ($.trim(sections[section]['anchor']) == that.config['section-header-read'] ){
sectionFound = true;
break;
}
sectionCount++;
}
if (sectionFound){
api.get({
'format':'json',
'action':'parse',
'prop':'wikitext',
'page': mw.config.get('wgPageName'),
'section': sectionCount
}).then(function(result){
var wikitext = result.parse.wikitext['*'];
var joinmentSection = wikitext + joinComment;
api.post({
'action' : 'edit',
'title' : mw.config.get('wgPageName'),
'text' : joinmentSection,
'summary' : 'Ku daridda magacayga qaybta ka qaybgalayaasha',
'section': sectionCount,
'watchlist':'watch',
'token' : mw.user.tokens.get('csrfToken')
}).then(function(){
console.log('Si guul leh loogu daray ka qaybgalayaasha');
location.reload();
util.setFeedbackCookie('joinFeedback');
}, function(){
util.showErrorMessage('joinGadget','save');
});
});
}
else{
var sectionHeader = that.config['section-header-write'];
api.post({
'action': 'edit',
'title': mw.config.get('wgPageName'),
'section': 'new',
'summary': sectionHeader,
'text': $.trim(joinComment),
'watchlist':'watch',
'token': mw.user.tokens.get('csrfToken')
}).then(function () {
console.log('Si guul leh loogu daray ka qaybgalayaasha');
location.reload();
util.setFeedbackCookie('joinFeedback');
}, function(){
util.showErrorMessage('joinGadget','save');
});
}
}, function(){
util.showErrorMessage('joinGadget','save');
});
}, function(){
util.showErrorMessage('joinGadget','save');
});
};
};
/* Dhammaadka shaqooyinka */
mw.loader.using( ['jquery.ui', 'mediawiki.api', 'mediawiki.ui','jquery.chosen'], function() {
$(function() {
(function(){
var namespace = mw.config.get('wgCanonicalNamespace');
if ( $('.wp-join-button,.wp-endorse-button').length) {
if(mw.config.get('wgPageContentLanguage') == 'en'){
var endorse = new endorseGadget();
var join = new joinGadget();
var util = new gadgetUtilities();
var api = new mw.Api();
var interfaceMessagesFullPath = util.interfaceMessagesPath+'/'+util.userLanguage();
var configFullPath = util.configPath+'/'+util.contentLanguage();
api.get({'action':'query','titles':interfaceMessagesFullPath+'|'+configFullPath,'format':'json'}).then(function(data){
for(id in data.query.pages){
if (data.query.pages[id].title == util.interfaceMessagesPath+'/'+util.userLanguage() &&id == -1){
interfaceMessagesFullPath = util.interfaceMessagesPath+'/en';
}
if (data.query.pages[id].title == util.configPath+'/'+util.contentLanguage() && id == -1){
configFullPath = util.configPath+'/en';
}
}
var interfaceMessagesUrl = mw.config.get('wgScript')+'?title='+interfaceMessagesFullPath+'&action=raw&ctype=text/javascript';
var configUrl = mw.config.get('wgScript')+'?title='+configFullPath+'&action=raw&ctype=text/javascript';
$.when(jQuery.getScript(interfaceMessagesUrl),jQuery.getScript(configUrl)).then(function(){
join.config = util.stripWhiteSpace(util.grantType(joinConfig));
join.interfaceMessages = util.stripWhiteSpace(util.grantType(joinInterfaceMessages));
endorse.config = util.stripWhiteSpace(util.grantType(endorseConfig));
endorse.interfaceMessages = util.stripWhiteSpace(util.grantType(endorseInterfaceMessages));
join.Dialog();
$('.wp-join-button').off();$('.wp-join-button').click(function(e){
e.preventDefault();
join.Dialog();
});
if(util.checkFeedbackCookie('joinFeedback')){
util.showFeedback(join.config, join.interfaceMessages);
}
endorse.Dialog();
$('.wp-endorse-button').off();$('.wp-endorse-button').click(function(e){
e.preventDefault();
endorse.Dialog();
});
if(!mw.config.get('wgUserName')){
util.showErrorMessage('endorseGadget','login');
util.showErrorMessage('joinGadget','login');
}
if(util.checkFeedbackCookie('endorseFeedback')){
util.showFeedback(endorse.config, endorse.interfaceMessages);
}
});
});
}
else{
$('.wp-join-button').hide();$('.wp-endorse-button').hide();
}
}
})();
});
});
//</nowiki>
576d2scubv5bxoj7pdp5ni0omiouu7u
MediaWiki:Gadget-addMe
8
53811
311007
2026-10-25T15:00:11Z
Isma4l
41797
/* */
311007
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-sister}}">(S)</abbr></sup> [[m:Meta:AddMe|AddMe]]: taageer ama ku biir mashruuc adigoo adeegsanaya {{tl|Probox}}
jht048vivn3b11s1gvxdgx85qgai5hb
Template:Probox
10
53812
311008
2026-10-25T15:00:53Z
Isma4l
41797
/* */
311008
wikitext
text/x-wiki
<includeonly>{{#invoke:Probox|main}}{{DEFAULTSORT:{{SUBPAGENAME}}}}</includeonly><noinclude>
{{documentation}}
<!-- Categories go in the /doc subpage, and interwikis go in Wikidata. -->
</noinclude>
d6yhwoq5cwhyx3a181p57zf1erxfqb5
Module:Probox
828
53813
311009
2026-10-25T15:01:25Z
Isma4l
41797
Abuuray
311009
Scribunto
text/plain
--
-- This module implements {{Probox}}
--
local getArgs = require('Module:Arguments').getArgs
local TableTools = require('Module:TableTools')
local p = {}
--function GetPageLang (frame) local pagelang = frame:callParserFunction{ name = '#translation:'} if pagelang == nil then pagelang = "/en" end return pagelang end
local function stringStarts(String,Start)
return string.sub(String,1,string.len(Start))==Start
end
local function stringToLowerCase(value)
return mw.ustring.lower(value)
end
local function stringSpacesToUnderscores(value)
return mw.ustring.gsub(value, " ", "_")
end
local function stringFirstCharToUpper(str)
return (str:gsub("^%l", string.upper))
end
local function addTemplates(frame, data, args)
-- adds additional template to the top of the page, above the infobox
local page_template
-- local tmplt_args = {}
local template_div = mw.html.create('div')
for k,v in pairs(data.templates) do -- if there is a matching arg, and it has a table of template possibilities
if (args[k] and string.len(args[k]) > 0 and type(data.templates[k]) == "table") then --convert args to lowercase before checking them against cats
for tmplt_key, tmplt_val in pairs(data.templates[k]) do
if data.templates.passArg == true then
template_div
:cssText("")
:wikitext(frame:expandTemplate{title=data.templates[k][tmplt_key], args={status = stringFirstCharToUpper(args[k])}}) --status is special casing. need to pass generic arg keys
:done()
break
elseif (stringToLowerCase(args[k]) == tmplt_key and mw.title.new("Template:" .. tmplt_val).exists) then
template_div
:cssText("margin-bottom:1em;")
:wikitext(frame:expandTemplate{title=tmplt_val, args={}})
:done()
end
--convert args to lowercase and subs spaces for underscores
--make sure specified template exists
-- if (type(tmplt_val) == "string" and stringToLowerCase(args[k]) == tmplt_key and mw.title.new("Template:" .. tmplt_val).exists) then
end
end
end
page_template = tostring(template_div)
return page_template
end
local function addCategories(frame, data, args, open_roles)
-- will also look for numbered categories
local cat_list = {}
local base_cat = data.categories.base
-- table.insert(cat_list, base_cat) --always need a base category
-- -- adding role categories
if data.categories.default then
table.insert(cat_list, data.categories.default)
end
if data.categories.roles then
role_cat = data.categories.roles
for k,v in pairs(open_roles) do
table.insert(cat_list, base_cat .. k:gsub("^%l", string.upper) .. role_cat)
end
end
for k,v in pairs(data.categories) do -- if there is a matching arg, and it has a table of category possibilities
if (args[k] and string.len(args[k]) > 0) then --convert args to lowercase before checking them against cats
if type(data.categories[k]) == "table" then
for cat_key, cat_val in pairs(data.categories[k]) do
if stringSpacesToUnderscores(stringToLowerCase(args[k])) == cat_key then --convert args to lowercase and subs spaces for underscores before checking them against cats
table.insert(cat_list, base_cat .. cat_val)
break
end
end
elseif type(data.categories[k]) == "string" then --concat the value of the cat field with the default cat directly
table.insert(cat_list, base_cat .. data.categories[k])
end
end
end
local page_categories = ""
-- testing
local pagelang = mw.text.trim(frame:callParserFunction{name='#translation', args="1"})
-- local pagelang = "/" .. mw.text.trim(frame:expandTemplate{title='CURRENTCONTENTLANGUAGE'})
if #cat_list > 0 then
if pagelang == nil then
page_categories = "[[" .. tostring(table.concat(cat_list, "]] [[")) .. "]]"
else
page_categories = "[[" .. tostring(table.concat(cat_list, pagelang .. "]] [[")) .. pagelang .. "]]"
end
end
if(args["status"] == "selected" or args["status"] == "SELECTED") then
maintainer = args["grantee"] or args["organization"] or args["creator"] or args["grantee1"] or args["grantee2"]
--if username is given as wikilink, extract clean username
maintainer = mw.ustring.match(maintainer, "%[%[[Uu]ser:(.+)|") or maintainer
page_categories = page_categories.. "[[Category:WMF grant reports by grantee|"..maintainer.."]]"
category_per_grantee = mw.title.new("Category:"..maintainer)
if category_per_grantee.exists then page_categories = page_categories.. "[[Category:"..maintainer.."]]" end
end
return page_categories
end
local function makeTextField(field, field_div)
-- makes a formatted text field for output, based on parameter
-- values or on default values provided for that field
-- type in the stylesheet
field_div:cssText(field.style)
if field.vtype2 == "body" then
field_div
:tag('span')
:cssText(field.style2)--inconsistent use of styles 2/3 here
:wikitext(field.title)--we probably aren't using this for most things now, after Heather's redesign
:done()
:tag('span')
:cssText(field.style3)
:wikitext(field.values[1])
:done()
elseif field.vtype2 == "title" then
field_div
:tag('span')
:cssText(field.style3)
:wikitext(field.values[1])
:done()
elseif field.vtype2 == "link" then
field_div
:tag('span')
:cssText(field.style3)
:wikitext("[[" .. field.values[1] .. "|<span style='" .. field.style2 .. "'>" .. field.title .."</span>]]")
:done()
end
field_div:done()
return field_div
end
local function makeImageField(field, field_div)
-- makes a formatted image field for output, based on parameter values
-- provided in the calling template or its parent template, or on default
-- values provided in the stylesheet
field_div:cssText(field.style)
field_div
:tag('span')
:cssText(field.style3)
if field.vtype2 == "thumb" then
field_div
:wikitext("[[" .. field.values[1] .. "|right|" .. field.width .."]]")
elseif field.vtype2 == "thumb2" then
field_div
:wikitext("[[" .. field.values[1] .. "|center|" .. field.width .."]]")
elseif field.vtype2 == "link" then
field_div
:wikitext("[[" .. field.values[1] .. "|" .. field.alignment .. "|" .. field.width .."|link=" .. field.link .. "]]")
elseif field.vtype2 == "badge" then
if mw.ustring.find( field.values[1], "http", 1, true ) then
field_div
:wikitext("[[" .. field.icon .. "|" .. field.alignment .. "|" .. field.width .."|link=" .. field.values[1] .. "]] " .. "[" .. field.values[1] .. " " .. field.title .. "]")
end
elseif field.vtype2 == "ui_button" then
field_div
:addClass(field.class)
:wikitext(field.title)
:done()
end
field_div:done()
return field_div
end
local function makeParticipantField(field, ftype)
local field_div = mw.html.create('div')
local title_span
if field.icon then
title_span = "[[" .. field.icon .. "|left" .. "|18px]] " .. field.title
else
title_span = field.title
end
field_div
:cssText(field.style)
:tag('span')
:cssText(field.style2)
:wikitext(title_span)
:done()
if ftype == "filled" then
local i = 1
for k,v in ipairs(field.values) do
if (i > 1 and field.icon) then --only insert extra padding if has icon
field.style3 = "padding-left:25px; display:block"
end
if field.vtype2 then --ideally all configs should at least have this field for participants. FIXME
if field.vtype2 == "username" then
v = "• " .. "[[User:" .. v .. "|" .. v .. "]]"
elseif field.vtype2 == "email" then
v = "• " .. v
end
else
v = "• " .. "[[User:" .. v .. "|" .. v .. "]]"
end
field_div
:tag('span')
:cssText(field.style3)
:wikitext(v)
-- :wikitext("• " .. "[[User:" .. v .. "|" .. v .. "]]")
:done()
i = i + 1
end
end
field_div:allDone()
return field_div
end
local function makeSectionDiv(sec_fields, sec_style)
local sec_div = mw.html.create('div'):cssText(sec_style)
sec_fields = TableTools.compressSparseArray(sec_fields)
for findex, sec_field in ipairs(sec_fields) do -- should put this at the end of the function, and just append the other stuff
sec_div:node(sec_field)
end
return sec_div
end
local function makeParticipantsSection(frame, args, data, filled_role_data, open_roles)
local filled_role_fields = {}
for role, val_table in pairs(filled_role_data) do
local field = data.fields[role]
field.title = mw.text.trim(frame:expandTemplate{title=args.translations, args={field.key}})
field.values = {}
for val_num, val_text in ipairs(filled_role_data[role]) do
field.values[#field.values + 1] = val_text
end
local filled_field_div = makeParticipantField(field, "filled")
filled_role_fields[field.rank] = filled_field_div
end
local sec_div = makeSectionDiv(filled_role_fields, data.styles.section["participants"])
if (data.fields.more_participants and args.more_participants and stringToLowerCase(args.more_participants)) == "yes" then -- really need this here?
-- if (args.portal == "Idealab" or args.portal == "Research") then -- beware, exceptions everywhere
sec_div:tag('span'):cssText("font-style:italic; color: #888888"):wikitext(mw.text.trim(frame:expandTemplate{title=args.translations, args={data.fields.more_participants.key}})):done()
-- elseif args.portal == "Patterns" then
-- sec_div:tag('span'):cssText("font-style:italic; color: #888888"):wikitext("a learning pattern for..."):done()
-- else
for role, val in pairs(open_roles) do -- should make these ordered using compressSparseArray, as above
local field = data.fields[role]
field.title = mw.text.trim(frame:expandTemplate{title=args.translations, args={field.key}})
if field.icon then
field.icon = field.icon_inactive
end
local open_field_div = makeParticipantField(field, "open")
sec_div:node(open_field_div)
end
end
sec_div:allDone()
return sec_div
end
local function makeSectionFields(args, field)
-- ui button is separate
local field_div = mw.html.create('div'):cssText(field.style) --why declare this here?
if field.vtype == "image" then
if (field.isRequired == true or (args[field.arg] and string.len(args[field.arg]) > 0)) then --should move this up, may not just apply to images
field_div = makeImageField(field, field_div)
end
elseif field.vtype == "text" then
field_div = makeTextField(field, field_div)
else
end
return field_div -- make sure div is 'done'
end
local function makeSection(frame, args, data, box_sec)
-- return a div for a section of the box including child divs
-- for each content field in that section
-- local sec_div = mw.html.create('div'):cssText(data.styles.section[box_sec])
local sec_fields = {}
for k,v in pairs(data.fields) do
if data.fields[k].section == box_sec then
local field = data.fields[k]
field.title = mw.text.trim(frame:expandTemplate{title=args.translations, args={field.key}})
field.values = {}
if (args[k] and string.len(args[k]) > 0) then
field.values[1] = args[k] --does not accept numbered args
if field.toLowerCase == true then -- special casing to make IEG status=SELECTED to display in lowercase
field.values[1] = stringToLowerCase(field.values[1])
end
local field_div = makeSectionFields(args, field)
sec_fields[field.rank] = field_div
elseif field.isRequired == true then
if field.vtype == "text" then
field.values[1] = mw.text.trim(frame:expandTemplate{title=args.translations, args={field.default}})
else
field.values[1] = field.default
end
local field_div = makeSectionFields(args, field)
sec_fields[field.rank] = field_div
else
--don't make a section for this field
end
end
end
local sec_div = makeSectionDiv(sec_fields, data.styles.section[box_sec])
return sec_div
end
local function makeInfobox(frame, args, data, filled_role_data, open_roles)
-- builds the infobox. Some content sections are required, others
-- are optional. Optional sections are defined in the stylesheet.
local box = mw.html.create('div'):cssText(data.styles.box.outer)
local inner_box = mw.html.create('div'):cssText(data.styles.box.inner)
if data.sections.above == true then
local sec_top = makeSection(frame, args, data, "above")
box:node(sec_top)
end
if data.sections.nav == true then
local sec_nav = makeSection(frame, args, data, "nav")
box:node(sec_nav)
end
local sec_head = makeSection(frame, args, data, "head")
inner_box:node(sec_head)
local sec_main = makeSection(frame, args, data, "main")
inner_box:node(sec_main)
if data.sections.participants == true then
local sec_participants = makeParticipantsSection(frame, args, data, filled_role_data, open_roles)
inner_box:node(sec_participants)
end
if data.sections.cta == true then
local sec_cta = makeSection(frame, args, data, "cta")
sec_cta:addClass("noprint") -- no much use in print outs
inner_box:node(sec_cta)
inner_box:tag('div'):cssText("clear:both;"):done() --clears buttons in the cta sections
end
inner_box:allDone()
box:node(inner_box)
if data.sections.below == true then
local sec_bottom = makeSection(frame, args, data, "below")
box:node(sec_bottom)
end
box:allDone()
return box
end
local function orderStringtoNumber(array, val, num)
if num > table.getn(array) then
array[#array+1] = val
else
table.insert(array, num, val)
end
return array
end
local function isJoinable(args, data)
if args.more_participants == "NO" then
data.fields.join = nil
if data.fields.endorse then
data.fields.endorse.style = "display:inline; float:right;"
end
end
return data
end
local function deepCopyTable(data)
-- the deep copy is a workaround step to avoid the restrictions placed on
-- tables imported through loadData
if type(data) ~= 'table' then return data end
local res = {}
for k,v in pairs(data) do
if type(v) == 'table' then
v = deepCopyTable(v)
end
res[k] = v
end
return res
end
local function getPortalData(args)
-- loads the relevant stylesheet, if a sub-template was called with a portal
-- argument and a stylesheet exists with the same name. For example, calling
-- {{#invoke:Probox|main|portal=Idealab}} would load the Module:Probox/Idealab
-- stylesheet.
local data_readOnly = {}
local data_writable = {}
if (args.portal and mw.title.makeTitle( 'Module', 'Probox/' .. args.portal).exists) then
data_readOnly = mw.loadData("Module:Probox/" .. args.portal)
else
data_readOnly = mw.loadData("Module:Probox/Default")
end
-- data_writable = TableTools.shallowClone(data_readOnly)
data_writable = deepCopyTable(data_readOnly)
return data_writable
end
local function TCTlookup(args)
local tct_path = tostring(args.translations)
--mw.log(mw.title.getCurrentTitle().subpageText)
local tct_subpage = mw.title.getCurrentTitle().subpageText
if tct_subpage == "en" then
tct_path = tct_path .. "/" .. tct_subpage
elseif (mw.title.new("Template:" .. args.translations .. "/" .. tct_subpage).exists and mw.language.isSupportedLanguage(tct_subpage)) then
tct_path = tct_path .. "/" .. tct_subpage
else
tct_path = tct_path .. "/" .. "en"
end
-- mw.log(tct_path)
return tct_path
end
local function getRoleArgs(args, available_roles)
-- returns:
-- 1) a table of ordered values for valid role params,
-- even if numbered nonsequentially
-- 2) a table of all roles with at least 1 empty param,
-- plus the default volunteer role
local filled_role_data = {}
local open_roles = {}
if available_roles.default then -- some boxes have default role to join
open_roles[available_roles.default] = true
end
for rd_key, rd_val in pairs(available_roles) do
for a_key, a_val in pairs(args) do
if stringStarts(a_key, rd_key) then
if string.len(a_val) == 0 then
open_roles[rd_key] = true
else
if not filled_role_data[rd_key] then filled_role_data[rd_key] = {} end
local arg_num = tonumber(a_key:match('^' .. rd_key .. '([1-9]%d*)$'))
if arg_num then
filled_role_data[rd_key] = orderStringtoNumber(filled_role_data[rd_key], a_val, arg_num)
else
table.insert(filled_role_data[rd_key], 1, a_val)
end
end
end
end
end
return filled_role_data, open_roles
end
function p.main(frame)
local args = getArgs(frame, {removeBlanks = false})
local data = getPortalData(args)
data = isJoinable(args, data)
if not (args.translations and mw.title.new("Template:" .. args.translations).exists) then
args.translations = "Probox/Default/Content"
end
-- mw.log(args.translations)
-- if the TCT content index is under translation, check for translations in the subpage language
if mw.title.new("Template:" .. args.translations .. "/en").exists then
args.translations = TCTlookup(args)
end
if data.sections.cta == true then
args.talk = tostring(mw.title.getCurrentTitle().talkPageTitle) -- expensive
end
local filled_role_data, open_roles = getRoleArgs(args, data.roles)
local box = makeInfobox(frame, args, data, filled_role_data, open_roles)
local infobox = tostring(box)
-- only add cats if not in Template or User or Meta namespace
if (data.categories and (mw.title.getCurrentTitle().nsText ~= "Template" and mw.title.getCurrentTitle().nsText ~= "User" and mw.title.getCurrentTitle().nsText ~= "Meta") and not args.noindex) then
-- FIXME specify namespace in config, so that categories only appear if template is translcuded in that namespace
local page_categories = addCategories(frame, data, args, open_roles)
infobox = infobox .. page_categories
end
if data.templates then
local top_template = addTemplates(frame, data, args)
infobox = top_template .. infobox
end
return infobox
end
return p
cu9wemeygfozw2cxqh7fvfwnt5cnuyc
MediaWiki:Gadget-addMe.css
8
53814
311010
2026-10-25T15:02:03Z
Isma4l
41797
Abuuray
311010
css
text/css
/* _____________________________________________________________________________
* | |
* | === WARNING: GADGET FILE === |
* | Changes to this page affect many users. |
* | Please discuss changes on the talk page or on [[MediaWiki_talk:Gadgets-definition]] before editing. |
* |_____________________________________________________________________________|
*
* "Endorse & Join" feature, to be used by the Wikimedia Foundation's Grants Programme,
*/
.grantsGadget .ui-state-hover{
background: transparent;
border-color: #a1a1a1;
}
.grantsGadget.ui-dialog .ui-icon-closethick{
background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjQsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMTEuMzEzcHgiIGhlaWdodD0iMTEuMzEzcHgiIHZpZXdCb3g9IjAgMCAxMS4zMTMgMTEuMzEzIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMS4zMTMgMTEuMzEzIiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwb2x5Z29uIGZpbGw9IiNCMEIxQjEiIHBvaW50cz0iMTEuMzEzLDIuMTIxIDkuMTkyLDAgNS42NTcsMy41MzUgMi4xMjIsMCAwLDIuMTIxIDMuNTM2LDUuNjU2IDAuMDAxLDkuMTkxIDIuMTIyLDExLjMxMyANCgk1LjY1Nyw3Ljc3NyA5LjE5MiwxMS4zMTIgMTEuMzEzLDkuMTkxIDcuNzc4LDUuNjU2ICIvPg0KPC9zdmc+DQo=) no-repeat 50% 50% !important;
}
.grantsGadget .ui-widget-content{
background: #EEE;
}
.grantsGadget.ui-dialog .ui-widget-header{
border: none;
background: #EEE !important;
padding-left: 11px !important;
margin-top: 25px;
}
.grantsGadget.ui-widget-content{
background: #EEE;
padding: 10px 18px;
color: #444;
border: 1px solid #ddd;
border-bottom: 3px solid #D0D0D0;
border-radius: 1px;
}
.grantsGadget .gadgetControls{
text-align: right;
margin: 10px 0px;
}
/*Check*/
.grantsGadget .messageDescription{
margin: 10px 0px;
}
.grantsGadget textarea{
outline: 0px;
padding: 14px;
resize: none;
background-color: white;
border: 1px solid #DDD;
border-radius: 1px;
margin-bottom: 1em;
}
.grantsGadget textarea:focus{
box-shadow: inset .45em 0 0 #5088f7;
}
.grantsSpeechBubbleContainer{
position: absolute;
top: -50px;
}
.grantsSpeechBubble{
background: #347BFF;
border-radius: 3px;
display: inline-block;
padding: 10px;
border-bottom-color: #1059E1;
border-width: 0 0 3px 0;
border-style: solid;
color: white;
}
.grantsSpeechBubbleArrowDown {
width: 0px;
height: 0px;
border-left: 10px solid transparent;
border-right: 10px solid transparent;
border-top: 10px solid #347BFF;
position: relative;
top: -3px;
left: 10px;
}
div.grantsHide{
display: none;
}
.messageSignature{
font-size: 9px;
}
.grantsGadget mw-ui-vform{
width: 100%;
}
.grantsGadget textarea::-webkit-input-placeholder,
.grantsGadget textarea::-moz-placeholder, /* Firefox 19+ */
.grantsGadget textarea:-ms-input-placeholder {
font-style: italic;
}
/* Join specific*/
/* Dropdown styling */
.joinGadget .chzn-container-single .chzn-single{
background-image: none;
border-radius: 1px;
box-shadow: none;
border: 1px solid #ddd;
padding: .25em;
padding-left: 14px;
}
.joinGadget .chzn-container .chzn-results li {
padding-left: 10px;
}
.joinGadget .chzn-container-active.chzn-with-drop .chzn-single{
/*Get a better color*/
background: #F6F3F3;
border: 1px solid #aaa;
padding: .25em;
padding-left: 14px;
}
.joinGadget .chzn-container .chzn-results .highlighted{
background-image: none;
background-color: #347bff;
}
.joinGadget .chzn-container-single .chzn-single div b{
background-position: 0px 5px;
}
.joinGadget .chzn-container-active.chzn-with-drop .chzn-single div b{
background-position: -18px 5px;
}
0bu9dpay781zjtioptfndm1w6zouvyp
MediaWiki:Gadget-NewImageThumb.js
8
53815
311011
2026-10-25T15:03:00Z
Isma4l
41797
Abuuray
311011
javascript
text/javascript
/* _____________________________________________________________________________
* | |
* | === WARNING: GLOBAL GADGET FILE === |
* | Changes to this page affect many users. |
* | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. |
* |_____________________________________________________________________________|
*
* New image thumb design
*
* @dependencies none
* @source en.wikipedia.org/wiki/MediaWiki:Gadget-NewImageThumb.js
* @revision 1
* @maintainer: Community
*/
mw.hook( 'wikipage.content' ).add( function( $content ) {
$content.find( '.thumbinner' ).not( '.mp-thumb' ).each( function() {
$( this ).css( 'width', ( parseInt( $( this ).css( 'width' ) ) - 2 ) + 'px' );
} );
} );
8taf52h85j1po5zym0q34dgmamru05o
MediaWiki:Gadget-NewImageThumb.css
8
53816
311012
2026-10-25T15:03:43Z
Isma4l
41797
Abuuray
311012
css
text/css
/* _____________________________________________________________________________
* | |
* | === WARNING: GLOBAL GADGET FILE === |
* | Changes to this page affect many users. |
* | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. |
* |_____________________________________________________________________________|
*
* New image thumb design
*
* @dependencies none
* @source en.wikipedia.org/wiki/MediaWiki:Gadget-NewImageThumb.css
* @revision 2
* @author: Edokter ([[User:Edokter]])
*/
.tocnumber {
color: #333;
}
.toc,
#toc,
.catlinks,
.mw-gallery-traditional li.gallerybox div.thumb,
div.thumbinner {
border-width: 1px;
border-style: solid;
border-color: #E0E0E0 #B1B1B1 #B1B1B1 #E0E0E0;
box-shadow: 0.25em 0.25em 0.5em rgba(0, 0, 0, 0.05);
}
div.thumbinner {
padding: 0;
}
div.thumbinner.mp-thumb {
box-shadow: none;
}
html .thumbimage {
border: none;
}
html .thumbcaption {
line-height: 1.5;
padding: 0.5em;
}
.mw-image-border .mw-file-element,
img.thumbborder {
border-width: 1px;
border-style: solid;
border-color: #E0E0E0 #B1B1B1 #B1B1B1 #E0E0E0;
}
.tmulti .tsingle {
margin: 0 !important;
}
figure[typeof~='mw:File/Thumb'],
figure[typeof~='mw:File/Frame'],
figure[typeof~='mw:File/Thumb'] > figcaption,
figure[typeof~='mw:File/Frame'] > figcaption {
border-width: 1px;
border-style: solid;
border-color: #E0E0E0 #B1B1B1 #B1B1B1 #E0E0E0;
box-shadow: 0.25em 0.25em 0.5em rgba(0, 0, 0, 0.05);
}
figure[typeof~='mw:File/Thumb'],
figure[typeof~='mw:File/Frame'] {
border-bottom: 0;
}
figure[typeof~='mw:File/Thumb'] > figcaption,
figure[typeof~='mw:File/Frame'] > figcaption {
border-top: 0;
line-height: 1.5;
}
figure[typeof~='mw:File/Thumb'] > :not(figcaption) .mw-file-element,
figure[typeof~='mw:File/Frame'] > :not(figcaption) .mw-file-element {
margin: 0;
margin-bottom: 6px;
border: none;
}
tlci2etio8o883zrdhbmvq0cnwilptb
MediaWiki:Gadget-NewImageThumb
8
53817
311013
2026-10-25T15:04:23Z
Isma4l
41797
/* */
311013
wikitext
text/x-wiki
Naqshad cusub oo sawirka yar (thumb), iyo hagaajinno kale oo yar yar oo qaabaynta ah (TOC, qaybaha). [[MediaWiki talk:Gadget-NewImageThumb|Kala hadal]].
fmi4f0luh6g7qjrlp1tm275f7loyyj4
311014
311013
2026-10-25T15:04:32Z
Isma4l
41797
/* */
311014
wikitext
text/x-wiki
Naqshad cusub oo sawirka yar, iyo hagaajinno kale oo yar yar oo qaabaynta ah (TOC, qaybaha). [[MediaWiki talk:Gadget-NewImageThumb|Kala hadal]].
8qr1vb5cfjlpvzh67l851uo4d5zxzza
MediaWiki:Gadget-StickyTableHeaders.js
8
53818
311015
2026-10-25T15:05:12Z
Isma4l
41797
Abuuray
311015
javascript
text/javascript
/**
* Find all header rows in a thead-less table and put them in a <thead> tag.
* This only treats a row as a header row if it contains only <th>s (no <td>s)
* and if it is preceded entirely by header rows. The algorithm stops when
* it encounters the first non-header row.
*
* After this, it will look at all rows at the bottom for footer rows
* And place these in a tfoot using similar rules.
*
* This function was copied from MediaWiki's jquery.tablesorter module
* @param {jQuery} $table object for a <table>
*/
function emulateTHeadAndFoot( $table ) {
var $thead, $tfoot, i, len,
$rows = $table.find( '> tbody > tr' );
if ( !$table.get( 0 ).tHead ) {
$thead = $( '<thead>' );
// T289817
$thead.addClass('mw-sticky-header-element');
$rows.each( function () {
if ( $( this ).children( 'td' ).length ) {
// This row contains a <td>, so it's not a header row
// Stop here
return false;
}
$thead.append( this );
} );
$table.find( ' > tbody:first' ).before( $thead );
}
if ( !$table.get( 0 ).tFoot ) {
$tfoot = $( '<tfoot>' );
len = $rows.length;
for ( i = len - 1; i >= 0; i-- ) {
if ( $( $rows[ i ] ).children( 'td' ).length ) {
break;
}
$tfoot.prepend( $( $rows[ i ] ) );
}
$table.append( $tfoot );
}
}
mw.hook('wikipage.content').add( function( $content ) {
// Do this for wikitable, but sortable does it on it's own already
$content.find('.wikitable:not(.sortable) ').each( function ( i, table ) {
if ( table.tBodies && !table.tHead ) {
// No thead found. Look for rows with <th>s and
// move them into a <thead> tag or a <tfoot> tag
emulateTHeadAndFoot( $(table).addClass('mw-sticky-header') );
}
} );
} );
cyndulw7fqh1n2kpbyudbfqn7nz8pjl
MediaWiki:Gadget-StickyTableHeaders
8
53819
311016
2026-10-25T15:05:54Z
Isma4l
41797
/* */
311016
wikitext
text/x-wiki
Ka dhig madaxyada jadwalka kuwo muuqda inta uu jadwalku ku jiro aragtida, tusaale ahaan "sticky" (waxay u baahan tahay Chrome v91+, Firefox v59+, ama Safari)
jbp9gm14fdctlv54jmw9lvjb7tsnbjm
MediaWiki:Gadget-mobilemaps.js
8
53820
311017
2026-10-25T15:06:49Z
Isma4l
41797
Abuuray
311017
javascript
text/javascript
// Sidoo kale eeg: https://github.com/wikimedia/mediawiki-extensions-Kartographer/blob/master/modules/maplink/maplink.js
// Qayb ahaan waxaa laga soo qaatay [[meta:MediaWiki:Wikiminiatlas.js]]
( function ( $, mw ) {
var geohacklinks = [],
routerInited = false,
geohackUrl = '//tools.wmflabs.org/geohack/';
if( !window.wma_settings ) {
window.wma_settings = {};
}
// Isku day inaad damiso wikiminiatlas
window.wma_settings.enabled = false;
function setupKartographer( $content ) {
var geolinks = document.querySelectorAll('[href^="' + geohackUrl + '"]' );
if( !geolinks.length) {
return;
}
mw.loader.using( [
'mediawiki.router',
'ext.kartographer.linkbox',
'ext.kartographer.style'
] ).then( function( require ) {
var router = require( 'mediawiki.router' );
var kartolink = require( 'ext.kartographer.linkbox' );
var uri, title, coord_params, coord_digits, lat, lon, globe, link,
geohack, zoomlevel, marker, marker_symbol;
var geohack_link_filter = /¶ms=([\d.+-]+)_([\d.+-]*)_?([\d.+-]*)_?([NSZ])_([\d.+-]+)_([\d.+-]*)_?([\d.+-]*)_?([EOW])([^&=<>|]{0,250})/;
var globeRegExp = /_globe:([^_&]+)/;
var typeRegExp = /_type:(country|satellite|state|adm1st|adm2nd|adm3rd|city|isle|river|waterbody|event|glacier|mountain|airport|edu|pass|landmark|railwaystation)/;
var dimRegExp = /_dim:([\d.+-]+)(km|m|_|$)/;
var scaleRegExp = /_scale:(\d+)(_|$)/;
Array.prototype.forEach.call(geolinks, function (elem, index) {
if ( !('href' in elem) || !geohack_link_filter.exec(elem.href)) {
return;
}
coord_params = [];
lat = lon = 0;
globe = 'Earth';
zoomlevel = 12;
marker_symbol = 'marker';
// U beddel DMS una beddel DD haddii loo baahdo
lat = (1.0*RegExp.$1) + ((RegExp.$2||0)/60.0) + ((RegExp.$3||0)/3600.0);
if (RegExp.$4!=='N') {
lat *= -1;
}
lon = (1.0*RegExp.$5) + ((RegExp.$6||0)/60.0) + ((RegExp.$7||0)/3600.0);
if (RegExp.$8==='W') {
lon *= -1;
}
coord_params = RegExp.$9;
// Weynee (Zoom) iyadoo lagu saleynayo saxnaanta isku-duwaha N/S
coord_digits = RegExp.$3 ? 4 : RegExp.$2 ? 2 : RegExp.$1.length - (RegExp.$1+'.').indexOf('.') - 1;
zoomlevel = coord_digits * Math.log(10)/Math.log(2);
// Heerka weyneynta ee ku salaysan nooca, iyo soo celinta calaamadaha calaamadaha noocyadaas
if( typeRegExp.exec( coord_params ) ) {
type = RegExp.$1;
switch( type ) {
case 'country':
case 'satellite':
zoomlevel = 5;
break;
case 'state':
zoomlevel = 7;
break;
case 'adm1st':
zoomlevel = 9;
break;
case 'adm2nd':
zoomlevel = 11;
break;
case 'adm3rd':
case 'city':
zoomlevel = 12;
marker_symbol = 'city';
break;
case 'isle':
case 'river':
case 'waterbody':
zoomlevel = 12;
break;
case 'event':
case 'glacier':
case 'mountain':
zoomlevel = 13;
break;
case 'airport':
zoomlevel = 14;
marker_symbol = 'airport';
break;
case 'railwaystation':
marker_symbol = 'rail';
break;
case 'camera edu':
case 'pass':
case 'landmark':
zoomlevel = 15;
break;
default:
}
}
// wma waxay tusaysaa cabbirka qiyaastii 4e7m marka zoomku yahay 0 ama 1.5e8 waa cabbirka zoomlevel 0
if (dimRegExp.exec(coord_params)) {
zoomlevel = Math.log((RegExp.$2==='km' ? 4e4 : 4e7) / RegExp.$1)/Math.log(2);
}
if (scaleRegExp.exec(coord_params)) {
zoomlevel = Math.log(1.5e8/RegExp.$1) / Math.log(2);
}
if (zoomlevel<0) { zoomlevel = 0; }
// Hubi globe-ka ay tahay
if (globeRegExp.test(coord_params)) {
globe = RegExp.$1;
// Dhammaan globes-ka suurtagalka ah: ['Earth','Moon','Mars','Venus','Mercury','Io','Titan']
// Laakiin waxaan maamullaa oo keliya Earth hadda
if( globe.toLowerCase() !== 'earth' ) {
return;
}
}
// Ka soo saar magaca bogga uri-ga haddii ay suurtagal tahay
uri = new mw.Uri( elem.href );
title = uri.query.pagename;
if(title) {
title = title.replace(/_/g,' ');
}
marker = {
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [lon, lat]
},
"properties": {
"name": title,
"marker-color": "#3366cc",
"marker-symbol": marker_symbol,
"marker-size": "medium"
}
};
link = geohacklinks[ index ] = kartolink.link( {
featureType: 'maplink',
container: elem,
center: [ lat, lon ],
zoom: zoomlevel,
data: [marker],
captionText: title,
fullScreenRoute: '/geohacklink/' + index
} );
$(elem).addClass('mw-kartographer-maplink').parent().removeClass('plainlinks');
});
if ( routerInited ) {
return;
}
// fuli qaybtan koodhka ah hal mar oo keliya
routerInited = true;
// Waxay furaysaa maplink shaashadda buuxda. #/geohacklink(/:zoom)(/:latitude)(/:longitude)
// Tusaalooyinka:
// #/geohacklink/0
// #/geohacklink/0/5
// #/geohacklink/0/16/-122.4006/37.7873
router.route( /geohacklink\/([0-9]+)(?:\/([0-9]+))?(?:\/([+-]?\d+\.?\d{0,5})?\/([+-]?\d+\.?\d{0,5})?)?/, function ( maptagId, zoom, latitude, longitude ) {
var link = geohacklinks[ maptagId ],
position;
if ( !link ) {
router.navigate( '' );
return;
}
if ( zoom !== undefined && latitude !== undefined && longitude !== undefined ) {
position = {
center: [ +latitude, +longitude ],
zoom: +zoom
};
}
// // Waxaan u baahanahay hack-kan si aan dhacdooyinkan uga kala saarno dhacdooyinka `open`.
// if ( !link.fullScreenMap && !link.clicked ) {
// mw.track( 'mediawiki.kartographer', {
// action: 'hashopen',
// isFullScreen: true,
// feature: link
// } );
// link.clicked = false;
// }
link.openFullScreen( position );
} );
// Hubi haddii aan u baahanahay inaan ku furno khariidadda shaashad buuxda.
router.checkRoute();
});
if( $( '#coordinates' ).length && mw.config.get('skin') === 'minerva' ) {
mw.loader.using( [
'mediawiki.util',
'oojs-ui.styles.icons-location'
] ).then( function() {
mw.util.addCSS(
'#page-actions .mw-show-on-map, #p-views .mw-show-on-map {' +
' opacity: 0.6;' +
'}'
);
var mapButton = $('<li>')
.addClass('page-actions-menu__list-item')
.removeClass( 'language-selector mw-ui-icon-language-switcher' )
.append(
$('<a>').addClass( 'mw-ui-icon mw-ui-icon-element mw-ui-icon-with-label-desktop mw-show-on-map mw-ui-icon-map' ) /*T240644*/
.attr( {
href: '', /* href madhan si looga fogaado in minerva ay ku darto ... */
title: 'Ku tus khariidadda',
role: 'button'
} )
.text( ' Khariirad' )
.click( openTitleCoord )
);
$( '.page-actions-menu__list > li:first-child' ).after( mapButton );
} );
}
}
function openTitleCoord( e ) {
e.preventDefault(); /*T247664*/
$( '#coordinates .mw-kartographer-link' ).get( 0 ).click();
};
mw.hook( 'wikipage.content' ).add( setupKartographer );
return geohacklinks;
}(
jQuery,
mediaWiki
));
s66gamy3u0iaugb9rthqixegzsiuka8
MediaWiki:Gadget-MobileMaps
8
53821
311018
2026-10-25T15:07:45Z
Isma4l
41797
/* */
311018
wikitext
text/x-wiki
Ku dar popups-ka khariidadda isku duwayasha bogga mobilada
hkkrqbf8eqil2jobo74dj5ejszl2ajp
MediaWiki:Gadget-ShowJavascriptErrors.js
8
53822
311019
2026-10-25T15:08:32Z
Isma4l
41797
Abuuray
311019
javascript
text/javascript
// This only shows alerts for things after this handler is installed of course.
// Because this is a gadget, error reporting can thus be inconsistent.
var originalErrorHandler = window.onerror || null;
// Column and error args are optional
window.onerror = function ( message, url, line, column, error ) {
var $msg = $( '<p>' );
if ( url ) {
$( '<span>' )
.text( url + ' at line ' + line + ': ' )
.appendTo( $msg );
}
$( '<span>' )
.text( message )
.appendTo( $msg );
mw.notify( $msg, {
autoHide: true,
autoHideSeconds: 10,
tag: null,
title: 'Javascript Error',
type: 'error'
} );
if (originalErrorHandler) {
return originalErrorHandler.apply(this, arguments);
}
};
// unbind on leaving the page
$( window )
.on( 'unload', function () {
window.onerror = originalErrorHandler;
} );
a794p5x6z80rddb7zxk1nbc3gmr6e8k
MediaWiki:Gadget-ShowJavascriptErrors
8
53823
311020
2026-10-25T15:09:11Z
Isma4l
41797
/* */
311020
wikitext
text/x-wiki
Soo bandhig digtoon marka aad la kulanto khaladaadka JavaScript-ka
m986z3mzpsbgskepws4bfobe9pd8p65
MediaWiki:Gadget-Page descriptions.js
8
53824
311021
2026-10-25T15:09:53Z
Isma4l
41797
Abuuray
311021
javascript
text/javascript
if ( mw.config.get( 'wgNamespaceNumber' ) === 0 && mw.config.get( 'wgAction' ) === 'view' ) {
mw.loader.using( 'mediawiki.api' ).then( function () {
// Adds a page description just below the "page title"
// Behaves a lot like the mobile version
var wgQid = mw.config.get( 'wgWikibaseItemId' ),
api = new mw.Api(),
callPromise = api.get( {
action: 'query',
titles: mw.config.get( 'wgTitle' ),
prop: 'description',
formatversion: 2
} ),
isEditor = mw.config.get( 'wgUserGroups' ).indexOf( 'autoconfirmed' ) !== -1;
$.when( callPromise, $.ready ).then( function ( results ) {
var pageDescription, $description,
response = results[ 0 ];
if (
response.query &&
response.query.pages &&
response.query.pages[ 0 ].description
) {
pageDescription = response.query.pages[ 0 ].description;
$description = $( '<span>' )
.addClass( 'mw-page-description' )
.text( pageDescription );
if ( response.query.pages[ 0 ].descriptionsource !== 'local' && isEditor ) {
$description.append(
' (',
$( '<a>' )
.attr( 'href', 'https://www.wikidata.org/wiki/Special:SetLabelDescriptionAliases/' + wgQid + '/' + mw.config.get( 'wgContentLanguage' ) )
.css( 'color', 'darkorange' )
.text( 'Wikidata' ),
')'
);
}
$description.append( '. ' );
} else if ( isEditor ) {
$description = $( '<span>' )
.css( 'color', 'red' )
.append(
'Missing ',
$( '<a>' )
.attr( 'href', '/wiki/Template:Short_description' )
.text( 'page description' ),
'. '
);
}
if ( $description ) {
$( '#siteSub' ).prepend( $description );
}
} );
} );
}
tjh8rrhc1rkrlwf09jl062s7svei1r9
MediaWiki:Gadget-PageDescriptions
8
53825
311022
2026-10-25T15:10:42Z
Isma4l
41797
/* */
311022
wikitext
text/x-wiki
Muuji [[:en:Wikipedia:Short description|faahfaahinta bogga]] ee hoosaysa cinwaanka bogga (kuma habboona gadget-ka qiimaynta bogga - Page assessments)
hs61r1csfdgex66bhm0mtxv0tpgsgul
311023
311022
2026-10-25T15:10:51Z
Isma4l
41797
/* */
311023
wikitext
text/x-wiki
Muuji [[:en:Wikipedia:Short description|faahfaahinta bogga]] ee hoosaysa cinwaanka bogga (kuma habboona gadget-ka qiimaynta bogga )
qrrfdmb7mk2whrszzw3vdaselh0qn1t
MediaWiki:Gadget-autonum.js
8
53826
311024
2026-10-25T15:11:37Z
Isma4l
41797
Abuuray
311024
javascript
text/javascript
/******************************************************************************/
/**** BOGGAN WAXAY LA SOCOTAA [[mw:MediaWiki:Gadget-autonum.js]]. FADLAN ISKA HOGGAASHO IN LA WAX KA BEDDELO SI TOOS AH.
/**** ISBEDDELLADA WAA IN LOO SOO JEDIYAA SI TOOS AH [[mw:MediaWiki:Gadget-autonum.js]].
/**** ROBOT WUXUU KACI DOONAA CODSIGA ISBEDDELKA HADDII UU KA DUWANAAHO KAYDKA SARE (UPSTREAM).
/******************************************************************************/
/**
* Tiro-koobka otomaatiga ah ee cinwaannada (Auto-number headings)
*
* @source https://www.mediawiki.org/wiki/Snippets/Auto-number_headings
* @author Krinkle
* @version 2024-07-28
*/
var toc = document.querySelector('#toc');
if (toc) {
document.body.classList.add('tpl-autonum-attr');
// Taageer Parser-kii hore: <h2><span class=mw-headline id=…>
// Taageer Parsoid: <section><div class=mw-heading><h2 id…>
document.querySelectorAll('.mw-parser-output :is(h1,h2,h3,h4,h5,h6) .mw-headline[id], .mw-parser-output .mw-heading [id]:is(h1,h2,h3,h4,h5,h6)').forEach(function (headline) {
var num = toc.querySelector('a[href="#' + CSS.escape(headline.id) + '"] .tocnumber');
if (num) headline.setAttribute('data-autonum', num.textContent);
});
} else {
document.body.classList.add('tpl-autonum');
}
bphsqx7z24e2a23i7d0lyao2nnmvkpo
MediaWiki:Gadget-autonum
8
53827
311025
2026-10-25T15:12:22Z
Isma4l
41797
/* */
311025
wikitext
text/x-wiki
Tiro koobka otomaatiga ah ee cinwaannada: Waxay ku dartaa lambarayn kala-sarreysa cinwaannada ku jira maqaallada ([[:mw:Snippets/Auto-number headings|dokumenti]])
qn3o26r25hrvb3hz28rp6kljlwe75ly
MediaWiki:Gadget-autonum.css
8
53828
311026
2026-10-25T15:12:57Z
Isma4l
41797
Abuuray
311026
css
text/css
/******************************************************************************/
/**** THIS PAGE TRACKS [[mw:MediaWiki:Gadget-autonum.css]]. PLEASE AVOID EDITING DIRECTLY.
/**** EDITS SHOULD BE PROPOSED DIRECTLY to [[mw:MediaWiki:Gadget-autonum.css]].
/**** A BOT WILL RAISE AN EDIT REQUEST IF IT BECOMES DIFFERENT FROM UPSTREAM.
/******************************************************************************/
/**
* Auto-number headings
*
* @source https://www.mediawiki.org/wiki/Snippets/Auto-number_headings
* @author Krinkle
* @version 2024-07-28
*/
/**
* CSS mode:
* Insert numbers on pages without a TOC. This could in principle work for all pages,
* but to ensure consistency between the TOC and heading numbers we let JS follow
* the TOC if there is one.
*/
.tpl-autonum .mw-parser-output {
counter-reset: autonum-h2 autonum-h3 autonum-h4 autonum-h5 autonum-h6;
}
.tpl-autonum .mw-parser-output .mw-heading2 {
counter-increment: autonum-h2;
counter-reset: autonum-h3 autonum-h4 autonum-h5 autonum-h6;
}
.tpl-autonum .mw-parser-output .mw-heading3 {
counter-increment: autonum-h3;
counter-reset: autonum-h4 autonum-h5 autonum-h6;
}
.tpl-autonum .mw-parser-output .mw-heading4 {
counter-increment: autonum-h4;
counter-reset: autonum-h5 autonum-h6;
}
.tpl-autonum .mw-parser-output .mw-heading5 {
counter-increment: autonum-h5;
counter-reset: autonum-h6;
}
.tpl-autonum .mw-parser-output .mw-heading6 {
counter-increment: autonum-h6;
}
.tpl-autonum .mw-parser-output .mw-heading h2::before {
content: counter(autonum-h2) " ";
}
.tpl-autonum .mw-parser-output .mw-heading h3::before {
content: counter(autonum-h2) "." counter(autonum-h3) " ";
}
.tpl-autonum .mw-parser-output .mw-heading h4::before {
content: counter(autonum-h2) "." counter(autonum-h3) "." counter(autonum-h4) " ";
}
.tpl-autonum .mw-parser-output .mw-heading h5::before {
content: counter(autonum-h2) "." counter(autonum-h3) "." counter(autonum-h4) "." counter(autonum-h5) " ";
}
.tpl-autonum .mw-parser-output .mw-heading h6::before {
content: counter(autonum-h2) "." counter(autonum-h3) "." counter(autonum-h4) "." counter(autonum-h5) "." counter(autonum-h6) " ";
}
/**
* JS mode: When a TOC is present, autonum.js sets the data-autonum attribute
* and we display that instead of an automatic counter.
*/
.tpl-autonum-attr .mw-parser-output .mw-headline[data-autonum]:before,
.tpl-autonum-attr .mw-parser-output h2[data-autonum]:before ,
.tpl-autonum-attr .mw-parser-output h3[data-autonum]:before ,
.tpl-autonum-attr .mw-parser-output h4[data-autonum]:before ,
.tpl-autonum-attr .mw-parser-output h5[data-autonum]:before ,
.tpl-autonum-attr .mw-parser-output h6[data-autonum]:before {
content: attr(data-autonum) " ";
}
0538gj6bcagl2lx2wsmqc0gqgbwjd0x
MediaWiki:Gadget-section-qalabka-Tusaalooyinka
8
53829
311027
2026-10-25T15:15:34Z
Isma4l
41797
Bog cusub: Muuqaalka
311027
wikitext
text/x-wiki
Muuqaalka
6qloi3wmlgipm6qz2f38xme5fk45ggj
MediaWiki:Gadget-Vivarium.js
8
53830
311028
2026-10-25T15:16:51Z
Isma4l
41797
Abuuray
311028
javascript
text/javascript
/******************************************************************************/
/**** BOGGAN WAXAY LA SOCOTAA [[mw:MediaWiki:Gadget-Global-Vivarium.js]]. FADLAN ISKA HOGGAASHO IN LA WAX KA BEDDELO SI TOOS AH.
/**** ISBEDDELLADA WAA IN LOO SOO JEDIYAA SI TOOS AH [[mw:MediaWiki:Gadget-Global-Vivarium.js]].
/**** ROBOT WUXUU KACI DOONAA CODSIGA ISBEDDELKA HADDII UU KA DUWANAAHO KAYDKA SARE (UPSTREAM).
/******************************************************************************/
/**
* Vivarium waa hirgelinta Ciyaarta Nolosha ee Conway (Conway's Game of Life)
* Dokumentiga: https://www.mediawiki.org/wiki/Vivarium
* Shatiga: https://www.gnu.org/licenses/gpl-3.0.html
* Qoraa: https://meta.wikimedia.org/wiki/User:Sophivorus
*/
var Vivarium = {
messages: {
'de': {
'cell-button': 'Zelle',
'cell-button-tooltip': 'Zelle hinzufügen oder entfernen',
'move-button': 'Bewegen',
'move-button-tooltip': 'Board bewegen',
'zoom-in-button': 'Einzoomen',
'zoom-in-button-tooltip': 'Einzoomen',
'zoom-out-button': 'Auszoomen',
'zoom-out-button-tooltip': 'Auszoomen',
'grid-button': 'Raster',
'grid-button-tooltip': 'Raster',
'reset-button': 'Zurücksetzen',
'reset-button-tooltip': 'Zurücksetzen',
'play-button': 'Abspielen',
'play-button-tooltip': 'Abspielen',
'pause-button': 'Pause',
'pause-button-tooltip': 'Pause',
'next-generation-button': 'Weiter',
'next-generation-button-tooltip': 'Nächste Generation',
},
'en': {
'cell-button': 'Cell',
'cell-button-tooltip': 'Add or remove cells',
'move-button': 'Move',
'move-button-tooltip': 'Move the board',
'zoom-in-button': 'Zoom in',
'zoom-in-button-tooltip': 'Zoom in',
'zoom-out-button': 'Zoom out',
'zoom-out-button-tooltip': 'Zoom out',
'grid-button': 'Grid',
'grid-button-tooltip': 'Grid',
'reset-button': 'Reset',
'reset-button-tooltip': 'Reset',
'play-button': 'Play',
'play-button-tooltip': 'Play',
'pause-button': 'Pause',
'pause-button-tooltip': 'Pause',
'next-generation-button': 'Next generation',
'next-generation-button-tooltip': 'Next generation',
'generation-counter': 'Generation ',
'population-counter': 'Population ',
},
'es': {
'cell-button': 'Celda',
'cell-button-tooltip': 'Agregar o quitar celdas',
'move-button': 'Mover',
'move-button-tooltip': 'Mover el tablero',
'zoom-in-button': 'Acercar',
'zoom-in-button-tooltip': 'Acercar',
'zoom-out-button': 'Alejar',
'zoom-out-button-tooltip': 'Alejar',
'grid-button': 'Grilla',
'grid-button-tooltip': 'Grilla',
'reset-button': 'Reiniciar',
'reset-button-tooltip': 'Reiniciar',
'play-button': 'Reproducir',
'play-button-tooltip': 'Reproducir',
'pause-button': 'Pausar',
'pause-button-tooltip': 'Pausar',
'next-generation-button': 'Generación siguiente',
'next-generation-button-tooltip': 'Generación siguiente',
'generation-counter': 'Generación ',
'population-counter': 'Población ',
},
'fr': {
'cell-button': 'Cellule',
'cell-button-tooltip': 'Ajouter ou enlever des cellules',
'move-button': 'Déplacer',
'move-button-tooltip': 'Déplacer la carte',
'zoom-in-button': 'Se rapprocher',
'zoom-in-button-tooltip': 'Se rapprocher',
'zoom-out-button': "S'éloigner",
'zoom-out-button-tooltip': "S'éloigner",
'grid-button': 'Grille',
'grid-button-tooltip': 'Grille',
'reset-button': 'Recommencer',
'reset-button-tooltip': 'Recommencer',
'play-button': 'Reproduire',
'play-button-tooltip': 'Reproduire',
'pause-button': 'Mettre sur pause',
'pause-button-tooltip': 'Mettre sur pause',
'next-generation-button': 'Suivant',
'next-generation-button-tooltip': 'Generation suivante',
},
'it': {
'cell-button': 'Cellula',
'cell-button-tooltip': 'Aggiungere o rimuovere le cellule',
'move-button': 'Spostare',
'move-button-tooltip': "Spostare l'asse",
'zoom-in-button': 'Ingrandire',
'zoom-in-button-tooltip': 'Ingrandire',
'zoom-out-button': 'Rimpicciolire',
'zoom-out-button-tooltip': 'Rimpicciolire',
'grid-button': 'Griglia',
'grid-button-tooltip': 'Griglia',
'reset-button': 'Reset',
'reset-button-tooltip': 'Reset',
'play-button': 'Giocare',
'play-button-tooltip': 'Giocare',
'pause-button': 'Pausa',
'pause-button-tooltip': 'Pausa',
'next-generation-button': 'Il prossimo',
'next-generation-button-tooltip': 'Generazione successiva',
},
'pl': {
'cell-button': 'Komórka',
'cell-button-tooltip': 'Dodaj lub odejmij komórki',
'move-button': 'Przejdź dalej',
'move-button-tooltip': "Przestaw planszę",
'zoom-in-button': 'Przybliż',
'zoom-in-button-tooltip': 'Przybliż',
'zoom-out-button': 'Oddal',
'zoom-out-button-tooltip': 'Oddal',
'grid-button': 'Siatka',
'grid-button-tooltip': 'Siatka',
'reset-button': 'Reset',
'reset-button-tooltip': 'Reset',
'play-button': 'Odtwórz',
'play-button-tooltip': 'Odtwórz',
'pause-button': 'Zatrzymaj',
'pause-button-tooltip': 'Zatrzymaj',
'next-generation-button': 'Dalej',
'next-generation-button-tooltip': 'Następne pokolenie',
},
'so': {
'cell-button': 'Unug',
'cell-button-tooltip': 'Ku dar ama ka saar unugyada',
'move-button': 'Dhaqaaq',
'move-button-tooltip': 'Dhaqaaqi looxa',
'zoom-in-button': 'Weynee',
'zoom-in-button-tooltip': 'Weynee',
'zoom-out-button': 'Yaree',
'zoom-out-button-tooltip': 'Yaree',
'grid-button': 'Shabaakad',
'grid-button-tooltip': 'Shabaakad',
'reset-button': 'Dib u deji',
'reset-button-tooltip': 'Dib u deji',
'play-button': 'Ciirsi',
'play-button-tooltip': 'Ciirsi',
'pause-button': 'Hakiso',
'pause-button-tooltip': 'Hakiso',
'next-generation-button': 'Jiilka xiga',
'next-generation-button-tooltip': 'Jiilka xiga',
'generation-counter': 'Jiil ',
'population-counter': 'Dadweyne ',
},
},
/**
* Qoraalka bilaabidda (Initialisation script)
*/
init: function () {
// Deji luqadda interface-ka
var lang = mw.config.get( 'wgUserLanguage' );
if ( ! ( lang in Vivarium.messages ) ) {
lang = 'en'; // Ku noqo Ingiriisiga haddii la waayo
}
mw.messages.set( Vivarium.messages[ lang ] );
$( '.Vivarium' ).each( function () {
var gui = new Vivarium.GUI( this ),
board = new Vivarium.Board( gui ),
game = new Vivarium.Game( board ),
mouse = new Vivarium.Mouse( board, game ),
touch = new Vivarium.Touch( board );
gui.bindEvents( board, game, mouse, touch );
board.init();
if ( $( this ).data( 'autoplay' ) ) {
game.play();
}
});
},
GUI: function ( wrapper ) {
this.wrapper = $( wrapper );
this.container = $( '<div>' ).addClass( 'VivariumContainer' );
this.canvas = $( '<canvas>' ).addClass( 'VivariumCanvas' );
this.generationCounter = $( '<span>' ).addClass( 'VivariumCounter VivariumGenerationCounter' ).text( mw.message( 'generation-counter' ) + 0 );
this.populationCounter = $( '<span>' ).addClass( 'VivariumCounter VivariumPopulationCounter' ).text( mw.message( 'population-counter' ) + 0 );
this.menu = $( '<div>' ).addClass( 'VivariumMenu' );
this.zoomInButton = $( '<img>' ).attr({
'class': 'VivariumButton VivariumZoomInButton',
'src': '//upload.wikimedia.org/wikipedia/commons/2/2e/WikiWidgetZoomInButton.png',
'title': mw.message( 'zoom-in-button-tooltip' ),
'alt': mw.message( 'zoom-in-button' )
});
this.zoomOutButton = $( '<img>' ).attr({
'class': 'VivariumButton VivariumZoomOutButton',
'src': '//upload.wikimedia.org/wikipedia/commons/6/63/WikiWidgetZoomOutButton.png',
'title': mw.message( 'zoom-out-button-tooltip' ),
'alt': mw.message( 'zoom-out-button' )
});
this.gridButton = $( '<img>' ).attr({
'class': 'VivariumButton VivariumGridButton',
'src': '//upload.wikimedia.org/wikipedia/commons/a/a9/WikiWidgetGridButton.png',
'title': mw.message( 'grid-button-tooltip' ),
'alt': mw.message( 'grid-button' )
});
this.resetButton = $( '<img>' ).attr({
'class': 'VivariumButton VivariumResetButton',
'src': '//upload.wikimedia.org/wikipedia/commons/0/0e/WikiWidgetResetButton.png',
'title': mw.message( 'reset-button-tooltip' ),
'alt': mw.message( 'reset-button' )
});
this.playButton = $( '<img>' ).attr({
'class': 'VivariumButton VivariumPlayButton',
'src': '//upload.wikimedia.org/wikipedia/commons/b/b8/WikiWidgetPlayButton.png',
'title': mw.message( 'play-button-tooltip' ),
'alt': mw.message( 'play-button' )
});
this.pauseButton = $( '<img>' ).attr({
'class': 'VivariumButton VivariumPauseButton',
'src': '//upload.wikimedia.org/wikipedia/commons/6/6e/WikiWidgetPauseButton.png',
'title': mw.message( 'pause-button-tooltip' ),
'alt': mw.message( 'pause-button' )
}).hide(); // Badhanka hakisku wuxuu bilaabmaa isagoo qarsan
this.nextGenerationButton = $( '<img>' ).attr({
'class': 'VivariumButton VivariumNextGenerationButton',
'src': '//upload.wikimedia.org/wikipedia/commons/b/bf/WikiWidgetNextFrameButton.png',
'title': mw.message( 'next-generation-button-tooltip' ),
'alt': mw.message( 'next-generation-button' )
});
// Isku keen dhammaanteed
this.menu.append(
this.zoomInButton,
this.zoomOutButton,
this.gridButton,
this.resetButton,
this.playButton,
this.pauseButton,
this.nextGenerationButton
);
this.container.append(
this.canvas,
this.menu,
this.generationCounter,
this.populationCounter
);
this.wrapper.html( this.container );
this.bindEvents = function ( board, game, mouse, touch ) {
// Dhacdooyinka looxa (Board events)
this.zoomOutButton.click( function () { board.zoomOut(); } );
this.zoomInButton.click( function () { board.zoomIn(); } );
this.gridButton.click( function () { board.toggleGrid(); } );
// Dhacdooyinka ciyaarta (Game events)
this.resetButton.click( function () { game.reset(); } );
this.playButton.click( function () { game.play(); } );
this.pauseButton.click( function () { game.pause(); } );
this.nextGenerationButton.click( function () { game.nextGeneration(); } );
// Dhacdooyinka jiirka (Mouse events)
this.canvas.mousedown( function ( event ) { mouse.down( event ) } );
this.canvas.mousemove( function ( event ) { mouse.move( event ) } );
this.canvas.mouseup( function ( event ) { mouse.up( event ) } );
// Dhacdooyinka taabashada (Touch events)
this.canvas.on( 'touchstart', function ( event ) { touch.start( event ) } );
this.canvas.on( 'touchmove', function ( event ) { touch.move( event ) } );
this.canvas.on( 'touchend', function ( event ) { touch.end( event ) } );
};
},
Board: function ( gui ) {
this.gui = gui;
this.canvas = this.gui.canvas[0];
this.context = this.canvas.getContext( '2d' );
this.width = this.canvas.width;
this.height = this.canvas.height;
this.centerX = 0;
this.centerY = 0;
this.cellSize = 4;
this.xCells = Math.floor( this.width / this.cellSize );
this.yCells = Math.floor( this.height / this.cellSize );
this.grid = false;
this.populationCounter = 0;
/**
* Array-yadani waxay hayaan isku-duwayasha unugyada nool
*/
this.newLiveCells = [];
this.oldLiveCells = [];
/**
* Dhisaha (Constructor)
*/
this.init = function () {
this.oldLiveCells = [];
this.newLiveCells = [];
this.centerX = 0;
this.centerY = 0;
this.setPopulationCounter( 0 );
var wrapper = this.gui.wrapper,
width = wrapper.data( 'width' ),
height = wrapper.data( 'height' ),
cells = wrapper.data( 'cells' ),
zoom = wrapper.data( 'zoom' ),
grid = wrapper.data( 'grid' );
if ( width ) {
this.setWidth( width );
}
if ( height ) {
this.setHeight( height );
}
if ( cells ) {
cells = cells.replace( /\s/g, '' ).split( ';' );
for ( var i in cells ) {
this.addCell( cells[ i ] );
}
}
if ( zoom ) {
this.setCellSize( zoom );
}
if ( grid ) {
this.grid = true;
}
this.refill();
};
/* Soo-celiyeyaasha (Getters) */
this.getXcells = function () {
return Math.floor( this.width / this.cellSize );
};
this.getYcells = function () {
return Math.floor( this.height / this.cellSize );
};
/**
* Waxay qaadataa xarig isku-duwaha ah (sida "23,-75")
* waxayna soo celisaa xaaladda unugga
*/
this.getNewState = function ( coords ) {
if ( this.newLiveCells.indexOf( coords ) === -1 ) {
return 0; // Dhintay (Dead)
}
return 1; // Nool (Alive)
};
this.getOldState = function ( coords ) {
if ( this.oldLiveCells.indexOf( coords ) === -1 ) {
return 0; // Dhintay (Dead)
}
return 1; // Nool (Alive)
};
/**
* Waxay qaadataa xarig isku-duwaha ah (sida "23,-75")
* waxayna soo celisaa array ay ku jiraan isku-duwayasha deriska ah
*/
this.getNeighbors = function ( coords ) {
coords = coords.split( ',' );
var x = parseInt( coords[0] ),
y = parseInt( coords[1] );
return [
( x - 1 ) + ',' + ( y - 1 ),
( x - 1 ) + ',' + ( y + 0 ),
( x - 1 ) + ',' + ( y + 1 ),
( x + 0 ) + ',' + ( y + 1 ),
( x + 0 ) + ',' + ( y - 1 ),
( x + 1 ) + ',' + ( y - 1 ),
( x + 1 ) + ',' + ( y + 0 ),
( x + 1 ) + ',' + ( y + 1 )
];
};
/**
* Waxay qaadataa xarig isku-duwaha ah (sida "23,-75")
* waxayna soo celisaa tirada deriska nool
*/
this.getLiveNeighborCount = function ( coords ) {
var neighbors = this.getNeighbors( coords ),
liveNeighborCount = 0;
for ( var i = 0, len = neighbors.length; i < len; i++ ) {
if ( this.oldLiveCells.indexOf( neighbors[ i ] ) > -1 ) {
liveNeighborCount++;
}
}
return liveNeighborCount;
};
/* Dejiyeyaasha (Setters) */
this.setWidth = function ( value ) {
this.width = value;
this.canvas.setAttribute( 'width', value );
this.xCells = this.getXcells();
};
this.setHeight = function ( value ) {
this.height = value;
this.canvas.setAttribute( 'height', value );
this.yCells = this.getYcells();
};
this.setCellSize = function ( value ) {
this.cellSize = parseInt( value );
this.xCells = this.getXcells();
this.yCells = this.getYcells();
};
this.setPopulationCounter = function ( value ) {
this.populationCounter = value;
this.gui.populationCounter.text( mw.message( 'population-counter' ) + value );
};
/* Ficilada (Actions) */
this.zoomIn = function () {
if ( this.cellSize === 32 ) {
return;
}
this.setCellSize( this.cellSize * 2 );
this.refill();
};
this.zoomOut = function () {
if ( this.cellSize === 1 ) {
return;
}
this.setCellSize( this.cellSize / 2 );
this.refill();
};
this.toggleGrid = function () {
this.grid = this.grid ? false : true;
this.refill();
};
this.drawGrid = function () {
if ( this.cellSize < 4 ) {
return; // Unugyadu aad bay u yar yihiin shabaqda
}
this.context.beginPath();
for ( var x = 0; x <= this.xCells; x++ ) {
this.context.moveTo( x * this.cellSize - 0.5, 0 ); // 0.5 waxay ka hortagtaa xargaha caajiska ah (blurry lines)
this.context.lineTo( x * this.cellSize - 0.5, this.height );
}
for ( var y = 0; y <= this.yCells; y++ ) {
this.context.moveTo( 0, y * this.cellSize - 0.5 );
this.context.lineTo( this.width, y * this.cellSize - 0.5 );
}
this.context.strokeStyle = '#333';
this.context.stroke();
};
this.fill = function () {
for ( var i = 0, len = this.newLiveCells.length; i < len; i++ ) {
this.fillCell( this.newLiveCells[ i ] );
}
if ( this.grid ) {
this.drawGrid();
}
};
this.clear = function () {
this.context.clearRect( 0, 0, this.canvas.width, this.canvas.height );
};
this.refill = function () {
this.clear();
this.fill();
};
this.fillCell = function ( coords ) {
coords = coords.split( ',' );
var x = parseInt( coords[0] );
var y = parseInt( coords[1] );
var minX = this.centerX - Math.floor( this.xCells / 2 );
var minY = this.centerY - Math.floor( this.yCells / 2 );
var maxX = minX + this.xCells;
var maxY = minY + this.yCells;
if ( x < minX || y < minY || x > maxX || y > maxY ) {
return; // Haddii unuggu ka baxsan yahay aragtida, ha sawirin
}
var rectX = Math.abs( this.centerX - Math.floor( this.xCells / 2 ) - x ) * this.cellSize,
rectY = Math.abs( this.centerY - Math.floor( this.yCells / 2 ) - y ) * this.cellSize,
rectW = this.cellSize - ( this.grid && this.cellSize >= 4 ? 1 : 0 ), // Ha ku sawirin shabaqda korkeeda
rectH = this.cellSize - ( this.grid && this.cellSize >= 4 ? 1 : 0 );
this.context.fillStyle = 'white';
this.context.fillRect( rectX, rectY, rectW, rectH );
};
this.clearCell = function ( coords ) {
coords = coords.split( ',' );
var x = parseInt( coords[0] );
var y = parseInt( coords[1] );
var minX = this.centerX - Math.floor( this.xCells / 2 );
var minY = this.centerY - Math.floor( this.yCells / 2 );
var maxX = minX + this.xCells;
var maxY = minY + this.yCells;
if ( x < minX || y < minY || x > maxX || y > maxY ) {
return; // Haddii unuggu ka baxsan yahay aragtida, looma baahna in la tirtiro
}
var rectX = Math.abs( this.centerX - Math.floor( this.xCells / 2 ) - x ) * this.cellSize,
rectY = Math.abs( this.centerY - Math.floor( this.yCells / 2 ) - y ) * this.cellSize,
rectW = this.cellSize - ( this.grid && this.cellSize >= 4 ? 1 : 0 ), // Ha tirtirin shabaqda
rectH = this.cellSize - ( this.grid && this.cellSize >= 4 ? 1 : 0 );
this.context.clearRect( rectX, rectY, rectW, rectH );
};
this.addCell = function ( coords ) {
this.newLiveCells.push( coords );
this.fillCell( coords );
this.setPopulationCounter( this.populationCounter + 1 );
};
this.removeCell = function ( coords ) {
var index = this.newLiveCells.indexOf( coords );
this.newLiveCells.splice( index, 1 ); // Ka saar isku-duwayasha array-ga
this.clearCell( coords );
this.setPopulationCounter( this.populationCounter - 1 );
};
},
Game: function ( board ) {
this.board = board;
this.playing = false;
this.generationCounter = 0;
/* Dejiyeyaasha (Setters) */
this.setGenerationCounter = function ( value ) {
this.generationCounter = value;
this.board.gui.generationCounter.text( mw.message( 'generation-counter' ) + value );
};
/* Ficilada (Actions) */
/**
* Habkani waa wadnaha widget-ka
*/
this.nextGeneration = function () {
this.setGenerationCounter( this.generationCounter + 1 );
this.board.oldLiveCells = this.board.newLiveCells.slice(); // Nuqul ka samee array-ga
var liveCells = this.board.oldLiveCells,
coords,
neighbors,
relevantCells = liveCells, // Unugyada khuseeya waa kuwa nool oo lagu daray deriskooda oo laga jaray nuqullada
seen = [],
state,
liveNeighborCount,
i;
for ( i = 0, len = liveCells.length; i < len; i++ ) {
coords = liveCells[ i ];
neighbors = this.board.getNeighbors( coords );
relevantCells = relevantCells.concat( neighbors );
}
for ( i = 0, len = relevantCells.length; i < len; i++ ) {
coords = relevantCells[ i ];
if ( seen.indexOf( coords ) > -1 ) {
continue; // Iska indhatir nuqullada
}
seen.push( coords );
state = this.board.getOldState( coords );
liveNeighborCount = this.board.getLiveNeighborCount( coords );
// Geeri dhalasho-yaraan ama dhalasho-badnaato awgeed
if ( state === 1 && ( liveNeighborCount < 2 || liveNeighborCount > 3 ) ) {
this.board.removeCell( coords );
}
// Taranka
else if ( state === 0 && liveNeighborCount === 3 ) {
this.board.addCell( coords );
}
}
};
this.reset = function () {
// Dib u deji looxa
this.board.init();
// Dib u deji ciyaarta
this.pause();
this.setGenerationCounter( 0 );
};
this.play = function () {
if ( this.playing ) {
return; // Ciyaartu mar hore ayay socotaa
}
var game = this;
this.playing = setInterval( function () { game.nextGeneration(); }, 1 ); // Aqoonsiga interval-ka waxaa lagu kaydiyaa hantida playing
this.board.gui.playButton.hide();
this.board.gui.pauseButton.show();
};
this.pause = function () {
if ( !this.playing ) {
return; // Ciyaartu mar hore ayay hakin tahay
}
clearInterval( this.playing );
this.playing = false;
this.board.gui.playButton.show();
this.board.gui.pauseButton.hide();
};
},
Mouse: function ( board, game ) {
this.board = board;
this.game = game;
/**
* Booska qaraabada ah ee asal ahaan nidaamka isku-duwaha looxa (unugyo, ee ma aha pixels)
*/
this.newX = null;
this.newY = null;
this.oldX = null;
this.oldY = null;
this.state = null; // kor ama hoos (up ama down)
this.drag = false;
/**
* Soo-celiyeyaasha (Getters)
*/
this.getX = function ( event ) {
var offsetX = event.pageX - $( event.target ).offset().left - 1, // -1 waa in la saxo barokac yar
newX = this.board.centerX - Math.floor( this.board.xCells / 2 ) + Math.floor( offsetX / this.board.cellSize );
return newX;
};
this.getY = function ( event ) {
var offsetY = event.pageY - $( event.target ).offset().top - 2, // -2 waa in la saxo barokac yar
newY = this.board.centerY - Math.floor( this.board.yCells / 2 ) + Math.floor( offsetY / this.board.cellSize );
return newY;
};
/**
* Maamulayaasha dhacdooyinka (Event handlers)
*/
this.down = function ( event ) {
this.state = 'down';
this.newX = this.getX( event );
this.newY = this.getY( event );
};
this.move = function ( event ) {
if ( this.state === 'down' ) {
this.oldX = this.newX;
this.oldY = this.newY;
this.newX = this.getX( event );
this.newY = this.getY( event );
if ( this.newX !== this.oldX || this.newY !== this.oldY ) {
this.drag = true;
this.board.centerX += this.oldX - this.newX;
this.board.centerY += this.oldY - this.newY;
this.board.refill();
// Sixitaanka khaladaadka (Bugfix): iyada oo aan tan la joogin, looxu wuu libiqdaa marka la dhaqaaqayo, ma cadda sababta
this.newX = this.getX( event );
this.newY = this.getY( event );
}
}
};
this.up = function ( event ) {
this.state = 'up';
if ( !this.drag ) {
this.game.pause();
var coords = String( this.newX + ',' + this.newY );
if ( this.board.getNewState( coords ) === 0 ) {
this.board.addCell( coords );
} else {
this.board.removeCell( coords );
}
}
this.drag = false;
};
},
Touch: function ( board ) {
this.board = board;
// Masaafada laga bilaabo asalka nidaamka isku-duwaha ee pixels-ka casriga ah (ma aha kuwa dhabta ah)
this.newX = null;
this.newX = null;
this.oldX = null;
this.oldY = null;
this.moved = false;
/**
* Soo-celiyeyaasha (Getters)
*/
this.getX = function ( event ) {
var offsetX = event.originalEvent.changedTouches[0].pageX - $( event.target ).offset().left,
newX = this.board.centerX - Math.floor( this.board.xCells / 2 ) + Math.floor( offsetX / this.board.cellSize );
return newX;
};
this.getY = function ( event ) {
var offsetY = event.originalEvent.changedTouches[0].pageY - $( event.target ).offset().top,
newY = this.board.centerY - Math.floor( this.board.yCells / 2 ) + Math.floor( offsetY / this.board.cellSize );
return newY;
};
/**
* Maamulayaasha dhacdooyinka (Event handlers)
*/
this.start = function ( event ) {
this.newX = this.getX( event );
this.newY = this.getY( event );
};
this.move = function ( event ) {
this.oldX = this.newX;
this.oldY = this.newY;
this.newX = this.getX( event );
this.newY = this.getY( event );
this.board.centerX += this.oldX - this.newX;
this.board.centerY += this.oldY - this.newY;
this.board.refill();
// Sixitaanka khaladaadka (Bugfix): iyada oo aan tan la joogin, looxu wuu libiqdaa marka la dhaqaaqayo, ma cadda sababta
this.newX = this.getX( event );
this.newY = this.getY( event );
this.moved = true;
event.preventDefault();
};
this.end = function ( event ) {
this.moved = false;
};
}
};
jQuery( Vivarium.init );
3txd9w5denjpzdfq8v63hby7230sf37
MediaWiki:Gadget-Vivarium.css
8
53831
311029
2026-10-25T15:22:33Z
Isma4l
41797
Abuuray
311029
css
text/css
/**
* Stylesheet for [[MediaWiki:Gadget-Vivarium.js]]
*/
.VivariumContainer {
position: relative;
}
.VivariumCanvas {
background: black;
display: block;
}
.VivariumMenu {
margin: 5px 0;
}
.VivariumButton {
cursor: pointer;
display: inline;
margin-right: 7px;
padding: 5px;
}
.VivariumButton.active {
background: #a7dcff;
}
.VivariumCounter {
color: white;
font-size: small;
pointer-events: none;
position: absolute;
left: 5px;
text-shadow: 0 0 5px black;
}
.VivariumGenerationCounter {
top: 5px;
}
.VivariumPopulationCounter {
top: 20px;
}
97663rg5bdi35rjtm6y0dzsqksb7uwt
MediaWiki:Gadget-section-muuqaalka
8
53832
311030
2026-10-25T15:23:39Z
Isma4l
41797
Bog cusub: Muuqaalka
311030
wikitext
text/x-wiki
Muuqaalka
6qloi3wmlgipm6qz2f38xme5fk45ggj
MediaWiki:Gadget-edittop.js
8
53833
311031
2026-10-25T15:24:27Z
Isma4l
41797
Abuuray
311031
javascript
text/javascript
// **********************************************************************
// ** ***WARNING GLOBAL GADGET FILE*** **
// ** changes to this file affect many users. **
// ** please discuss on the talk page before editing **
// ** **
// **********************************************************************
// Imported from [[User:Alex Smotrov/edittop.js]], version as of: 2007-06-19T04:28:52
// Updated from [[User:TheDJ/Gadget-edittop.js]], version as of: 2009-04-28T11:54:22
if (
[ 'view', 'purge' ].indexOf( mw.config.get( 'wgAction' ) ) !== -1 &&
mw.config.get( 'wgNamespaceNumber' ) >= 0 &&
!mw.config.get( 'wgMFMode' )
) {
$( function edittopHook() {
var localtitles = {
bg: 'Редактиране на началото',
bn: 'সূচনা অনুচ্ছেদ সম্পাদনা করুন',
cs: 'Editovat úvodní sekci',
en: 'Edit lead section',
fa: 'ویرایش بخش آغازین',
fr: 'Modifier le résumé introductif',
id: 'Sunting bagian atas',
it: 'Modifica della sezione iniziale',
ja: '導入部を編集',
kk: 'Кіріспе бөлімді өңдеу',
min: 'Suntiang bagian ateh',
ko: '도입부를 편집',
pa: 'ਸੋਧ',
pt: 'Editar a seção superior',
'pt-br': 'Editar a seção superior',
sr: 'Уреди уводни део',
th: 'แก้ไขย่อหน้าแรกสุด',
vi: 'Sửa phần mở đầu'
};
var $content = $( '#content, #mw_content' ).first();
var $span1 = $content.find( 'span.mw-editsection:not(.plainlinks)' ).first();
if ( !$span1.length ) {
return;
}
var $span0 = $span1.clone();
$span0.removeClass( 'cdx-button--size-large' );
$( '#mw_header h1, #content h1' ).first().append( $span0 );
$span0.find( 'a' ).each( function () {
var $a = $( this ), href;
$a.attr( 'title', localtitles[ mw.config.get( 'wgUserLanguage' ) ] || localtitles.en );
href = $a.attr( 'href' ) || '#';
if ( !/&(ve|)section=T/.test( $a.attr( 'href' ) ) ) { // not transcluded
$a.attr( 'href', href.replace( /&(ve|)section=\d+/, '&$1section=0' ) );
} else if ( /&vesection=/.test( $a.attr( 'href' ) ) ) { // transcluded, VE
$a.attr( 'href', mw.util.getUrl( mw.config.get( 'wgPageName' ) ) + '?veaction=edit&vesection=0' );
} else { // transcluded, not VE
$a.attr( 'href', mw.util.getUrl( mw.config.get( 'wgPageName' ) ) + '?action=edit§ion=0' );
}
} );
} );
}
kyl1se3tm8o0v6yrbmkdc8pfkfn1j3i
MediaWiki:Gadget-edittop
8
53834
311032
2026-10-25T15:26:02Z
Isma4l
41797
/* */
311032
wikitext
text/x-wiki
Ku dar xiriir [wax ka beddel] ([[:en:Wikipedia:Lead section|qeybta hordhaca ah]]) ee bogga
14dkw547rartzd1e5osmocsv324ppbs
MediaWiki:Gadget-edittop.css
8
53835
311033
2026-10-25T15:26:35Z
Isma4l
41797
Abuuray
311033
css
text/css
/* @noflip */
body.ltr h1.firstHeading .mw-editsection-bracket:first-of-type,
body.rtl h1.firstHeading .mw-editsection-bracket:not(:first-of-type) {
margin-right: 0.25em;
color: #555;
}
/* @noflip */
body.rtl h1.firstHeading .mw-editsection-bracket:first-of-type,
body.ltr h1.firstHeading .mw-editsection-bracket:not(:first-of-type) {
margin-left: 0.25em;
color: #555;
}
/* For desktop Minerva skin T190989 */
.page-heading .mw-editsection a {
display: inline-block;
font-size: 1rem;
vertical-align: middle;
}
s6xz9vcff6oucdq5n3kmfns3pk7m0s5
MediaWiki:Gadget-UTCLiveClock.js
8
53836
311034
2026-10-25T15:27:22Z
Isma4l
41797
Abuuray
311034
javascript
text/javascript
window.UTCLiveClockLocation = 'outside';
mw.loader.load( '//www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-UTCLiveClock.js&action=raw&ctype=text/javascript' );
95msqinjzhmr882u50mcnonvhgm88gy
MediaWiki:Gadget-UTCLiveClock.css
8
53837
311035
2026-10-25T15:27:56Z
Isma4l
41797
Abuuray
311035
css
text/css
/**
* Explicitly set width of the UTC-clock list element, so that we can use a
* hidden peer gadget to add space where the clock would go before it loads.
*/
.skin-vector #utcdate {
width: 6em;
/*
* The default margin-left is 0.75em, but set it again here explicitly, so
* we can be sure of the exact width.
*/
margin-left: 0.75em;
}
.skin-monobook #utcdate {
width: 6.279em;
display: inline-block; /* We need this for the width property to work */
/*
* The default margin-left is 1em, but set it again here explicitly, so
* we can be sure of the exact width.
*/
margin-left: 1em;
}
/* Do not clip the seconds in the date */
.skin-vector-2022 #utcdate a {
width: 100%;
}
2nxlb3tmp6tu1gjr926cwu9krkw4vd0
MediaWiki:Gadget-UTCLiveClock
8
53838
311036
2026-10-25T15:29:20Z
Isma4l
41797
/* */
311036
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-sister}}">(S)</abbr></sup> Ku dar saacad barta qalabka shakhsiga ah taas oo tusaysa waqtiga hadda ee [[UTC]] isla markaana bixisa xiriir lagu ([[:en:Help:Purge|nadiifiyo]]) bogga hadda ([[mw:MediaWiki talk:Gadget-UTCLiveClock.js|dokumenti]])
tvxme7wortfpbieqdd6xqlm6t1fquru
MediaWiki:Gadget-UTCLiveClock-pagestyles.css
8
53839
311037
2026-10-25T15:30:24Z
Isma4l
41797
Abuuray
311037
css
text/css
/**
* This is loaded as a hidden peer gadget of UTCLiveClock.
* Before UTCLiveClock has loaded, it adds space where the clock would go,
* so that the personal toolbar does not "jump".
*/
.client-js > body.skin-monobook #p-personal li {
font-size: 1em;
}
/*
* Reserve space for the clock gadget after the end of the p-personal ul
* element.
*/
.client-js > body.skin-vector-legacy #p-personal ul {
/*
* The clock width plus its left margin, multiplied by the relative font
* size: (6em + 0.75em) * 0.75
*/
margin-right: 5.0625em;
}
.client-js > body.skin-monobook #p-personal ul {
/*
* Clock width: 6.279em
* Left margin: 1em
* Space separator after "log out" link: 0.321em (found through trial and
* error)
* Total space: 6.279em + 1em + 0.321em
*/
margin-right: 7.6em;
}
73n1ix4q7399cahqumdiywqp1i66cwg
MediaWiki:Gadget-purgetab.js
8
53840
311038
2026-10-25T15:31:02Z
Isma4l
41797
Abuuray
311038
javascript
text/javascript
/**
* Add "Purge" content action link.
*
* Dependencies: mediawiki.util, mediawiki.api
*
* @source https://www.mediawiki.org/wiki/Snippets/Purge_action
*/
$( function () {
if ( $( '#ca-purge' ).length || !mw.config.get( 'wgIsArticle' ) ) return;
var node = mw.util.addPortletLink(
'p-cactions',
mw.util.getUrl( null, { action: 'purge' } ),
mw.config.get( 'skin' ) === 'vector' || mw.config.get( 'skin' ) === 'vector-2022' ? 'Purge' : '*',
'ca-purge',
'Purge the server cache of this page',
'*'
);
$(node).on( 'click', function (e) {
new mw.Api().post( { action: 'purge', titles: mw.config.get( 'wgPageName' ) } ).then(function () {
location.reload();
}, function () {
mw.notify( 'Purge failed', { type: 'error' } );
});
e.preventDefault();
});
});
nh2he2vdb8yv2ghzwnyagn106as59fl
MediaWiki:Gadget-purgetab
8
53841
311039
2026-10-25T15:32:17Z
Isma4l
41797
/* */
311039
wikitext
text/x-wiki
Ku dar ikhtiyaar "Nadiifi kaydka" xagga sare ee bogga, kaas oo [[:en:Help:Purge|nadiifinaya]] kaydka bogga
fjcy11xik378vkiwhoyrtiik6vyo5np
MediaWiki:Gadget-UTCLiveClock-pagestyles
8
53842
311040
2026-10-25T15:33:04Z
Isma4l
41797
/* */
311040
wikitext
text/x-wiki
Waxyaabaha ka kooban qalabka UTCLiveClock
qof6bj9cd3jbctkg6uykuhoi2www2mi
MediaWiki:Gadget-externalsearch.js
8
53843
311041
2026-10-25T15:34:31Z
Isma4l
41797
Abuuray
311041
javascript
text/javascript
/** Change Special:Search to use a drop-down menu *******************************************************
*
* Description: Change Special:Search to use a drop-down menu, with the default being
* the internal MediaWiki engine
* Created by: [[User:Gracenotes]]
*/
function SpecialSearchEnhanced() {
var createOption = function(site, action, mainQ, addQ, addV) {
var opt = document.createElement('option');
opt.appendChild(document.createTextNode(site));
window.searchEngines.push([action, mainQ, addQ, addV]);
return opt;
}
if (document.forms.powersearch)
var searchForm = document.forms.powersearch;
if (document.forms.search)
var searchForm = document.forms.search;
if (searchForm.lsearchbox) {
var searchBox = searchForm.lsearchbox;
} else {
var searchBox = searchForm.search;
}
var selectBox = document.createElement('select');
selectBox.id = 'searchEngine';
searchForm.onsubmit = function() {
var optSelected = window.searchEngines[document.getElementById('searchEngine').selectedIndex];
searchForm.action = optSelected[0];
searchBox.name = optSelected[1];
searchForm.title.value = optSelected[3];
searchForm.title.name = optSelected[2];
}
selectBox.appendChild(createOption('Somali Wikipedia', mw.config.get( 'wgScript' ), 'search', 'title', 'Special:Search'));
selectBox.appendChild(createOption('Google', 'https://www.google.com/search', 'q', 'sitesearch', 'so.wikipedia.org'));
selectBox.appendChild(createOption('Yahoo', 'https://search.yahoo.com/search', 'p', 'vs', 'so.wikipedia.org'));
selectBox.appendChild(createOption('Bing', 'https://www.bing.com/search', 'q', 'q1', 'site:https://so.wikipedia.org'));
selectBox.appendChild(createOption('Wikiwix', 'https://www.wikiwix.com/', 'action', 'lang', 'so'));
selectBox.appendChild(createOption('Exalead', 'https://www.exalead.com/wikipedia/results', 'q', 'language', 'en'));
searchBox.style.marginLeft = '0px';
if (document.getElementById('loadStatus')) {
var lStat = document.getElementById('loadStatus');
} else {
var lStat = searchForm.title;
if( typeof lStat === 'object' && typeof lStat.length === 'number' ) lStat = lStat[0];
}
lStat.parentNode.insertBefore(selectBox, lStat);
}
window.searchEngines = [];
// Script is specific to Special:Search
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Search'){
$(SpecialSearchEnhanced);
}
9o4oagyt3819g1k1ttsmcgqdq3sjz71
311042
311041
2026-10-25T15:35:08Z
Isma4l
41797
311042
javascript
text/javascript
/** Change Special:Search to use a drop-down menu *******************************************************
*
* Description: Change Special:Search to use a drop-down menu, with the default being
* the internal MediaWiki engine
* Created by: [[User:Gracenotes]]
*/
function SpecialSearchEnhanced() {
var createOption = function(site, action, mainQ, addQ, addV) {
var opt = document.createElement('option');
opt.appendChild(document.createTextNode(site));
window.searchEngines.push([action, mainQ, addQ, addV]);
return opt;
}
if (document.forms.powersearch)
var searchForm = document.forms.powersearch;
if (document.forms.search)
var searchForm = document.forms.search;
if (searchForm.lsearchbox) {
var searchBox = searchForm.lsearchbox;
} else {
var searchBox = searchForm.search;
}
var selectBox = document.createElement('select');
selectBox.id = 'searchEngine';
searchForm.onsubmit = function() {
var optSelected = window.searchEngines[document.getElementById('searchEngine').selectedIndex];
searchForm.action = optSelected[0];
searchBox.name = optSelected[1];
searchForm.title.value = optSelected[3];
searchForm.title.name = optSelected[2];
}
selectBox.appendChild(createOption('Somali Wikipedia', mw.config.get( 'wgScript' ), 'search', 'title', 'Special:Search'));
selectBox.appendChild(createOption('Google', 'https://www.google.com/search', 'q', 'sitesearch', 'so.wikipedia.org'));
selectBox.appendChild(createOption('Yahoo', 'https://search.yahoo.com/search', 'p', 'vs', 'so.wikipedia.org'));
selectBox.appendChild(createOption('Bing', 'https://www.bing.com/search', 'q', 'q1', 'site:https://so.wikipedia.org'));
selectBox.appendChild(createOption('Wikiwix', 'https://www.wikiwix.com/', 'action', 'lang', 'so'));
selectBox.appendChild(createOption('Exalead', 'https://www.exalead.com/wikipedia/results', 'q', 'language', 'so'));
searchBox.style.marginLeft = '0px';
if (document.getElementById('loadStatus')) {
var lStat = document.getElementById('loadStatus');
} else {
var lStat = searchForm.title;
if( typeof lStat === 'object' && typeof lStat.length === 'number' ) lStat = lStat[0];
}
lStat.parentNode.insertBefore(selectBox, lStat);
}
window.searchEngines = [];
// Script is specific to Special:Search
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Search'){
$(SpecialSearchEnhanced);
}
p2bqt9wg4o08zkqfae0e19dfcps8n2k
MediaWiki:Gadget-ExternalSearch
8
53844
311043
2026-10-25T15:35:58Z
Isma4l
41797
/* */
311043
wikitext
text/x-wiki
Ku dar xulasho bogga [[Special:Search|raadinta]] Wikipedia taas oo u oggolaanaysa adeegsiga mashiinnada raadinta ee dibadda
ipjgs6h69u9uzdm7n1bm50v01cb403j
MediaWiki:Gadget-CollapsibleNav.js
8
53845
311044
2026-10-25T15:36:47Z
Isma4l
41797
Abuuray
311044
javascript
text/javascript
/**
* Collapsible navigation for Vector
* @maintainer Nardog
*/
// CC0
'use strict';
function onToggle( e ) {
var collapsedIds = mw.storage.getObject( 'vector-nav-collapsed' ) || [],
index = collapsedIds.indexOf( this.id );
if ( e.type === 'afterExpand' ) {
// Remove ID from array
if ( index !== -1 ) {
collapsedIds.splice( index, 1 );
}
if ( collapsedIds.length ) {
mw.storage.setObject( 'vector-nav-collapsed', collapsedIds );
} else {
// Remove the data altogether if empty
mw.storage.remove( 'vector-nav-collapsed' );
}
} else {
if ( index === -1 ) {
collapsedIds.push( this.id );
mw.storage.setObject( 'vector-nav-collapsed', collapsedIds );
}
}
}
$( function () {
var collapsedIds = mw.storage.getObject( 'vector-nav-collapsed' ) || [];
$( '#mw-panel .vector-menu' )
.addClass( 'collapsible-nav mw-collapsible' )
.addClass( function () {
if ( collapsedIds.indexOf( this.id ) !== -1 ) {
return 'mw-collapsed';
}
} )
.children( '.vector-menu-heading' )
.addClass( 'mw-collapsible-toggle' )
.end()
.children( '.vector-menu-content' )
.addClass( 'mw-collapsible-content' )
.end()
.makeCollapsible()
.on( 'afterCollapse.mw-collapsible afterExpand.mw-collapsible', onToggle );
} );
efrtvpmvdv6zu7bbzwndg48bj76u8kq
MediaWiki:Gadget-CollapsibleNav.css
8
53846
311045
2026-10-25T15:37:30Z
Isma4l
41797
Abuuray
311045
css
text/css
.collapsible-nav > .mw-collapsible-toggle {
float: none;
cursor: pointer;
}
.collapsible-nav > .mw-collapsible-toggle::before {
display: inline-block;
width: 12px;
content: url(/w/resources/src/mediawiki.icon/images/arrow-expanded.svg?d0685);
}
.collapsible-nav > .mw-collapsible-toggle-collapsed::before {
content: url(/w/resources/src/mediawiki.icon/images/arrow-collapsed-ltr.svg?40e9a);
}
bjkql4b839126w74ddqhaevjzqkdzly
MediaWiki:Gadget-CollapsibleNav
8
53847
311046
2026-10-25T15:41:40Z
Isma4l
41797
/* */
311046
wikitext
text/x-wiki
U oggolow liisaska hagidda inay noqdaan kuwo la soo koobi karo
ar0qrufz06kop55tqpss4hu7mf83sx1
MediaWiki:Gadget-MenuTabsToggle.js
8
53848
311047
2026-10-25T15:42:40Z
Isma4l
41797
Abuuray
311047
javascript
text/javascript
/* _____________________________________________________________________________
* | |
* | === DIGNII: FAYLKA GADGET-KA CAALAMIGA AH === |
* | Isbeddellada faylkan waxay saameeyaan isticmaaleyaal badan. |
* | Fadlan kala hadal isbeddellada bogga wadahadalka ama [[WT:Gadget]] ka hor inta aadan wax ka beddelin.|
* |_____________________________________________________________________________|
*
* Kala beddel liisaska hoos u dhaca (dropdown menus) iyo tabs-ka.
*
* @dependencies mediawiki.cookie
* @source en.wikipedia.org/wiki/MediaWiki:Gadget-MenuTabsToggle.js
* @source waxaa laga soo dejiyay taariikhdu ahayd 2011-10-04 [[User:Edokter/MenuTabsToggle.js]] / [[User:Edokter/MenuTabsToggle.css]]
* @revision 3.4
* @author: Edokter ([[User:Edokter]])
*/
$( document ).ready( function() {
var portlet = [];
var portletId = [];
var portletToggle = [];
var toggleDiv = '<div class="vectorToggle" id="$1"><span><a href="#"></a></span></div>';
/* Qeybaha portlet-ka ee laga reebayo */
var excludePortlets = [ 'p-namespaces', 'p-twinkle' ];
/* MenuToTabs */
function MenuToTabs( portlet, id ) {
portlet.removeClass( 'vector-menu-dropdown' ).addClass( 'vector-menu-tabs' ).css( 'margin-left', '-1px' );
portlet.find( 'li.icon-collapsed' ).removeClass( 'icon-collapsed' ).addClass( 'icon' );
mw.cookie.set( id, 'tabs', { prefix: 'vector-tabs-' } );
}
/* TabsToMenu */
function TabsToMenu( portlet, id ) {
portlet.removeClass( 'vector-menu-tabs' ).addClass( 'vector-menu-dropdown' ).css( 'margin-left', '' );
portlet.find( 'li.icon' ).removeClass( 'icon' ).addClass( 'icon-collapsed' );
mw.cookie.set( id, 'menu', { prefix: 'vector-tabs-' } );
}
/* Bilowga (Initialize) */
if ( mw.config.get( 'skin' ) !== 'vector' ) {
return;
}
// Ka saar dhacdooyinka xiran (unbind) ee vector.js
$( 'nav.vector-menu' ).find( 'h3' ).off();
// Tiri dhammaan portlets-ka
$( '.vector-menu-dropdown, '.vector-menu-tabs' ).each( function(i) {
portlet[i] = $( this );
portletId[i] = portlet[i].attr( 'id' );
// Ka bood portlets-ka la reebay
if ( $.inArray( portletId[i], excludePortlets ) == -1 ) {
// Demi tabs-ka la soo koobi karo
portlet[i].find( 'li.collapsible' ).removeClass( 'collapsible' );
portletToggle[i] = $( toggleDiv.replace( '$1', portletId[i] + '-toggle' ) );
// Bidix mise midig?
if ( portlet[i].parent().attr( 'id' ) == 'left-navigation' ) {
portletToggle[i]
.addClass( 'toggle-left' )
.insertBefore( portlet[i].find( 'ul' ) );
} else {
portletToggle[i]
.addClass( 'toggle-right' )
.insertAfter( portlet[i].find( 'ul' ) );
}
// Menu mise Tabs?
if ( portlet[i].hasClass( 'vector-menu-dropdown' ) ) {
if ( mw.cookie.get( portletId[i], 'vector-tabs-' ) == 'tabs' ) {
MenuToTabs( portlet[i], portletId[i] );
}
}
else if ( portlet[i].hasClass( 'vector-menu-tabs' ) ) {
portlet[i].find( 'h3' )
.wrapInner( '<span></span>' )
.append( '<a href="#"></a>' );
if ( mw.cookie.get( portletId[i], 'vector-tabs-' ) == 'menu' ) {
TabsToMenu( portlet[i], portletId[i] );
}
}
// Meelee furaha iyo dhacdooyinka jiirka
portlet[i].on( 'click', 'h3 a', function( event ) {
event.preventDefault();
} );
portlet[i].on( 'mousedown', 'h3 a', function( event ) {
if ( event.which != 3 ) {
var ul = portlet[i].find( 'ul' );
ul.animate( { height: 'hide' }, 125, function() {
MenuToTabs( portlet[i], portletId[i] );
ul.animate( { width: 'show' }, 125 );
} );
}
} );
portletToggle[i].on( 'click', 'a', function( event ) {
event.preventDefault();
} );
portletToggle[i].on( 'mousedown', 'a', function( event ) {
if ( event.which != 3 ) {
var ul = portlet[i].find( 'ul' );
ul.animate( { width: 'hide' }, 125, function() {
TabsToMenu( portlet[i], portletId[i] );
ul.animate( { height: 'show' }, 125 );
} );
}
} );
}
} );
} );
5yuhfaxvwuhgp5tjwfyofloxtq1ix23
MediaWiki:Gadget-MenuTabsToggle.css
8
53849
311048
2026-10-25T15:43:17Z
Isma4l
41797
Abuuray
311048
css
text/css
/* _____________________________________________________________________________
* | |
* | === WARNING: GLOBAL GADGET FILE === |
* | Changes to this page affect many users. |
* | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. |
* |_____________________________________________________________________________|
*
* Toggle between dropdown menus and tabs.
*
* @dependencies jquery.cookie
* @source en.wikipedia.org/wiki/MediaWiki:Gadget-MenuTabsToggle.css
* @source imported as of 2011-10-04 from [[User:Edokter/MenuTabsToggle.js]] / [[User:Edokter/MenuTabsToggle.css]]
* @revision 3.3
* @author: Edokter ([[User:Edokter]])
*/
div#mw-head div#right-navigation .vector-menu > h3 {
/* @embed */
background-image: url(/w/skins/Vector/resources/skins.vector.styles/images/tab-separator.png);
}
.vector-menu-dropdown#p-variants #mw-vector-current-variant {
display: inline-block;
float: left;
font-size: 0.8em;
padding-left: 0.5em;
padding-top: 1.375em;
font-weight: normal;
border: none;
}
.vector-menu-dropdown {
transition: none;
}
.vector-menu-dropdown ul {
z-index: 101;
}
.vector-menu-dropdown div.vectorToggle {
display: none;
}
.vector-menu-tabs div.vectorToggle {
float: left;
height: 2.5em;
}
div.vectorToggle span a {
padding: 0;
height: 2.5em;
width: 23px;
}
/* @noflip */
div.vectorToggle.toggle-left {
/* @embed */
background: url(/w/skins/Vector/resources/skins.vector.styles/images/arrow-collapsed-ltr.png) 50% 60% no-repeat;
background-image: linear-gradient(transparent, transparent), url(/w/skins/Vector/resources/skins.vector.styles/images/arrow-collapsed-ltr.png);
}
/* @noflip */
div.vectorToggle.toggle-right {
/* @embed */
background: url(/w/skins/Vector/resources/skins.vector.styles/images/arrow-collapsed-rtl.png) 50% 60% no-repeat;
background-image: linear-gradient(transparent, transparent), url(/w/skins/Vector/resources/skins.vector.styles/images/arrow-collapsed-rtl.png);
}
htadmy1cz8ygjbe8647vfrgx30tfclm
MediaWiki:Gadget-MenuTabsToggle
8
53850
311049
2026-10-25T15:44:24Z
Isma4l
41797
/* */
311049
wikitext
text/x-wiki
U oggolow in la kala beddelo tabs-ka iyo liisaska hoos u dhaca ([[:en:User talk:Edokter/MenuTabsToggle.js|warbixinnada cilladaha]])
nylgip6dns7v4bbc2w85j4ob0w72swq
MediaWiki:Gadget-Blackskin.css
8
53851
311050
2026-10-25T15:45:15Z
Isma4l
41797
Abuuray
311050
css
text/css
/** MediaWiki:Gadget-Blackskin.css *******
* Original by [[:it:Utente:Kormoran]]
* Maintained by [[User:Dispenser]] for [[WP:WikiProject Accessibility]]
*/
@media screen {
/* Selection highlight */
::selection { color: #90FF90; background: #008000; }
/* Color buttons, drop downs, and input boxes */
fieldset {
border-color: #004000;
}
legend {
border: 1px solid #004000; /* @theme */
}
input[type="number"],
input[type="text"],
input:not([type]),
select {
background-color: #004000;
border-color: #008000;
color: #00dd00;
}
button,
input[type="button"],
input[type="reset"],
input[type="submit"] {
cursor: pointer;
}
/* Color background */
body, div#globalWrapper {
background-color: #000000;
background-image: none /* Monobook background */;
color: #00dd00;
}
#mw-page-base{
background:none /* Vector background */;
}
#content, .mw-body {
background-color: #000000;
color : #00dd00;
border-color : #008000;
}
.ns-0 #content {
background : #000000;
}
/* Color the links */
a { color: #7070FF; }
a:visited { color: #9090D0; }
a:active, a.new { color: #FF4040; }
a.interwiki, a.external { color: #5386DB; }
a.interwiki:visited, a.external:visited { color: #5386DB; }
a.stub { color: #974253; }
/* De-Color user signature links (black-on-black) */
a:not([class]) font, a:not([class]) span, a:not([class]) bold {
background-color:inherit!important;
color:inherit!important;
}
/* Color user links */
/*
a[title^="User"],
a[title^="Special:Contributions/"] {
background-color:#010!important;
color: #7070FF!important;
}/*-*/
.mw-body-content .external {
background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMBAMAAACkW0HUAAAAFVBMVEUAAAAAAAAAZv8AZswAL14hZIUwYI+U+klIAAAAAXRSTlMAQObYZgAAADxJREFUCNdjgAMmJSUFIBUmKAiimAKBFLOxkSOIElQRCQRSQo5OakBKJEWZlQEo6CTMAKIEwZSxsTHcJAD6JwXY6XjSLgAAAABJRU5ErkJggg==);
}
/* Headings */
h1, #bodyContent h1,
h2, #bodyContent h2,
h3, #bodyContent h3,
h4, #bodyContent h4,
h5, #bodyContent h5,
h6, #bodyContent h6 {
color: #00dd00;
border-color:#008000;
}
/* Color Table of Contents */
#toc, .toc, .mw-warning, .toccolours, body.skin-monobook .toccolours {
background-color: #002000;
border-color: #008000;
}
/* Images */
.mw-body img {
border: 2px solid #008000;
background-color: #000000;
}
/* Fix background of Tex images, which are black on transparent. */
.mw-body img.mwe-math-fallback-image-inline {
background-color: #fff;
filter:invert(100%) hue-rotate(180deg);
border:none;
}
hr {
color: #004000;
background-color: #004000;
}
/* Color explanations with tool tips */
abbr, acronym, .explain {
border-color: #004000;
color: White;
background-color: #002000;
}
/* Color code snippets */
code {
background-color: #00AA00;
color: Black;
border-color: #00AA00;
font-weight:bolder;/*XXX: Increase contrast*/
}
/* Color code blocks */
pre, .mw-code {
border-style:dashed;
border-color:#00AA00;
color: White;
background-color: #002000;
}
/* Color highlighted ref [[MediaWiki:Common.css]] */
body.action-info .mw-body-content :target,
body.mediawiki .citation:target {
background-color: rgba(0, 127, 255, 0.133);
}
/* Table background colors */
table {
background-color: #000000!important;
color: #00dd00!important;
}
table th {
background-color: #1D1C1C!important;
color: #00dd00!important;
}
table td {
background-color: #000000!important;
color: #00dd00!important;
}
table tr {
background-color: #000000!important;
color: #00dd00!important;
}
/* Tabular tables */
table.wikitable {
border-color: #004000 !important;
color: #00dd00!important;
}
table.wikitable th, table.wikitable td {
border-color: #004000 !important;
}
table.wikitable th {
background-color: #1D1C1C!important;
}
table.wikitable td {
background-color: #000000!important;
}
/* JQuery sort arrows */
table.jquery-tablesorter th.headerSort {
background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAJCAYAAADdA2d2AAAAPUlEQVR4AWMgCtxlkAPiA0CsREgpCQaC4X8gfggymJoG/sc0mHIDMQ2mE6DcpfQNU/rHPsJgBWg6VSBGOQB5WklTTHq/UAAAAABJRU5ErkJggg==);
}
table.jquery-tablesorter th.headerSortUp {
background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAECAYAAABhnXSoAAAAKklEQVR4AWMgCtxlkAPiA0CsREgpCQaC4X8gfggymJoG/kczmHIDSTEYACAWJKqhXDSPAAAAAElFTkSuQmCC);
}
table.jquery-tablesorter th.headerSortDown {
background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAECAYAAABhnXSoAAAALUlEQVR4AWPACe4yyAExCP7Hgh8CsRID6QBhMD4DKTQY00BKDVYA4gNgmggAAHjLJKrpYfWaAAAAAElFTkSuQmCC);
}
/* thumbnails */
.ns-0 * #content div.thumb {
border-color: #000000;
}
/* thumbnails */
div.thumb {
margin-bottom: .5em;
border-style: solid;
border-color: #002000;
}
div.thumb div {
border-width: 1px;
border-style: solid;
border-color: #002000;
background-color: #004000;
}
div.thumb div a img {
/* Transparent PNGs assume light color backgrounds :-( */
background-color:#103010;
/* TODO: Use film grain texture, so lines are more noticeable */
border: 1px solid #002000;
}
div.thumb div a img:hover {
/* Increase brightness on hover */
background-color:#EEE;
}
div.thumb div div.thumbcaption {
border: none;
padding: .3em 0 .1em 0;
}
figure[typeof~='mw:File/Thumb'],
figure[typeof~='mw:File/Frame'] {
background-color: #004000;
border: 2px solid #002000;
border-bottom: 0;
}
figure[typeof~='mw:File/Thumb'] > figcaption,
figure[typeof~='mw:File/Frame'] > figcaption {
background-color: #004000;
border: 2px solid #002000;
border-top: 0;
padding: 1px 3px 4px 3px;
}
figure[typeof~='mw:File/Thumb'] > :not(figcaption) .mw-file-element,
figure[typeof~='mw:File/Frame'] > :not(figcaption) .mw-file-element,
li.gallerybox .mw-file-element {
background-color: #103010;
border: 1px solid #002000;
}
figure[typeof~='mw:File/Thumb'] > :not(figcaption) .mw-file-element:hover,
figure[typeof~='mw:File/Frame'] > :not(figcaption) .mw-file-element:hover,
li.gallerybox .mw-file-element {
background-color: #EEE;
}
/* galleries */
table.gallery {
border: 1px solid #002000;
background-color: #004000;
}
table.gallery td {
background-color: #004000;
border: solid 2px white;
}
li.gallerybox div.thumb, body.mediawiki #content .gallerybox div.thumb {
background-color: #004000;
border: 2px solid #002000;
}
li.gallerybox div.thumb div {
background-color: transparent;
border: 0;
}
/* Color category box */
.catlinks {
border-color:#800080;
background-color:#000000;
color: #00FFFF;
}
/* #################################
* Interface Pages
* #################################
*/
.mw-ui-input:focus {
border-color: lime;
box-shadow: inset 0 0 0 1px lime;
}
.postedit, /* untested */
.mw-notification { /* top right bubble */
background-color:#004000;
background-color:rgba(0, 64, 0, 0.93);
border-color:#008000;
}
/*
** Diff rendering
*/
table.diff, td.diff-otitle, td.diff-ntitle {
background-color: #000000;
}
td.diff-addedline {
color: #00a000;
background-color: #004000;
}
td.diff-deletedline {
color: #00a000;
background-color: #004000;
}
td.diff-context {
background-color: #000000;
color: #008000;
}
.diffchange {
color: #00ff00;
}
td.diff-deletedline .diffchange {
background-color:#403618;
}
td.diff-addedline .diffchange {
background-color:#273948;
}
/* Color the edit interface */
.wikiEditor-ui {
background-color: #002000;
}
.wikiEditor-ui-toolbar,
.wikiEditor-ui-toolbar .sections .section {
background-image: none;
background-color: inherit;
}
.tool-button.tool-active, .tool.tool-active.oo-ui-buttonElement-frameless.oo-ui-iconElement {
background-color: inherit;
}
.wikiEditor-ui-toolbar .tabs span.tab a.current, .wikiEditor-ui-toolbar .tabs span.tab a.current:visited {
color: inherit;
}
textarea {
background-color: #001000;
color: #90FF90;
}
.editOptions {
background-color: #002000;
border-color: #008000;
color: #ccc;
}
div#editpage-specialchars a {
background-color: #000000;
border-color: #008000;
}
.mw-editform-legacy input#wpSummary {
background-color: #000000;
color: #90ff90;
}
/* Visual Editor */
.oo-ui-toolbar-bar,
.oo-ui-popupWidget-popup,
.oo-ui-popupToolGroup-active.oo-ui-widget-enabled,
.oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title,
.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
background-color:#002000;
background-image:none;
color:white;
}
.oo-ui-iconElement-icon {
filter: invert(100%); /* Can't style data URI SVGs */
}
.oo-ui-windowManager-modal > .oo-ui-dialog {
background-color: rgba(0, 0, 0, 0.5);
}
.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
background-color:black;
}
.oo-ui-textInputWidget input,
.oo-ui-textInputWidget textarea {
background-color: #001000;
color: #90FF90;
}
.oo-ui-tagItemWidget {
background-color: #333;
background-image: linear-gradient(to bottom,#222 0,#000 100%);
color: #eee;
}
.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
background-color: #111;
background-image: linear-gradient(to bottom, #222 0, #000 100%);
}
.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:focus {
/*border-color: #ace;*/
/*box-shadow: 0 0 2px 2px #ace;*/
}
.oo-ui-buttonElement-framed.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button {
background-color: #070;
background-image: linear-gradient(to bottom, #090 0, #030 100%);
}
.oo-ui-buttonElement > .oo-ui-buttonElement-button {
color:#ccc;
}
.oo-ui-pendingElement-pending {
/* http://en.wikipedia.org/w/resources/lib/oojs-ui/themes/apex/images/textures/pending.gif */
filter:invert(1);
}
/* Color history interface */
#pagehistory li {
border: 1px solid #002000;
}
#pagehistory li.selected {
background-color: #004000;
border: 1px solid #002000;
}
span.autocomment { color: #008000; }
/* Special:Search */
.mw-search-profile-tabs,
#mw-searchoptions {
background-color: #002000;
border-color: #008000;
}
/* Color the file description */
#filetoc {
background-color: #002000;
border-color: #008000;
}
.filehistory a img, #file img:hover {
/* Green checker board */
background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAAAQABVHvbKAAAAEUlEQVQI12P4z8CAFWEX/Q8Afr8P8erzE9cAAAAASUVORK5CYII=");
}
/* #################################
* Interface
* #################################
*/
/* Colors the tabs across the top of the page */
#p-cactions {
background-color: #000000;
}
#p-cactions li {
background-color: #000000;
border-color: #008000;
}
#p-cactions li.selected,
#p-cactions li.new {
background-color: #000000;
}
#p-cactions li a {
background-color: #000000 !important;
color : #7070FF;
}
#p-cactions li.selected a {
background-color:#000000 !important/*HACK?*/;
}
/* Vector Tabs */
.vector-menu-tabs, .vector-menu-tabs span { /* left and right tab breaks */
/* https://en.wikipedia.org/w/skins/Vector/images/tab-break.png */
background-image:none;
}
.vector-menu-tabs { border-left:1px solid black; }
.vector-menu-tabs span { border-right:1px solid black; }
.vector-menu-tabs ul li {
/* https://en.wikipedia.org/w/skins/Vector/images/tab-normal-fade.png */
background-image: linear-gradient(#000000,#004000);
border-bottom:1px solid #008000;
}
.vector-menu-tabs li.selected {
/* https://en.wikipedia.org/w/skins/Vector/images/tab-current-fade.png */
background: #000000;
border-bottom-color:transparent;
}
.vector-menu-tabs span a {
color:#7070FF;
}
.vector-menu-tabs li.selected a,
.vector-menu-tabs li.selected a:visited {
color:#00DD00;
}
/* Vector watch icon -- XXX contrast issues */
#ca-watch.icon a {
filter:invert(1) hue-rotate(80deg);
}
#ca-unwatch.icon a {
filter:hue-rotate(280deg);
}
/* Vector drop down menus */
.vector-menu-dropdown h3 span {
color:#cccccc;
}
.vector-menu ul {
background-color: #000000;
border-color: #a2a9b1;
}
.vector-menu li a {
color:#7070FF;
}
/* User links (preferences, contribs) */
#p-personal ul {
color: #FFFF00;
background: none;
}
#p-personal li a {
color: #FFFF00;
}
#p-personal li a:hover {
color: #FFFF00;
background-color: #636300;
}
/* Bad specificity in originals */
#pt-mytalk a.mw-echo-alert,
#pt-mytalk a.mw-echo-alert:hover {
color: #222;
}
/* Use vector person icon by your username */
body.skin-monobook li#pt-userpage { background-image: url(/w/skins/Vector/images/user-icon.png); }
/* Use black logo */
#p-logo {
background-color: transparent;
}
.mw-wiki-logo:not([href="/wiki/MediaWiki"]):not([href^="/wiki/Wikidata:"]):not([href^="/wiki/Wiktionary:"]) {
/* [[File:WikiGreen.png]] CC-BY-SA */
background-image: url(//upload.wikimedia.org/wikipedia/commons/6/6e/WikiGreen.png);
}
/* Color side portlets */
.portlet {
background: #004000;
color: #00dd00;
}
.portlet h3,
div#mw-panel div.portal h3 {
color:#00dd00;
}
.pBody {
background: #000000;
color: #00dd00;
}
div#mw-panel nav.portal div.vector-menu-content ul li a {
color:#7070FF;
}
div#mw-panel nav.portal div.vector-menu-content ul li a:visited {
color:#9090D0;
}
/* Color main search box - Monobook */
input#searchInput {
/*border: 1px inset; theme/vector conflict */
color: #00dd00;
background : #000000;
}
input.searchButton {
background : #000000;
border: 2px solid;
border-color: #00FFFF #008080 #008080 #00FFFF;
color : #00dd00;
}
/* Color main search box - Vector */
div#simpleSearch,
div#simpleSearch input {
background-color:transparent;
background-image:none; /* https://en.wikipedia.org/w/skins/Vector/images/search-fade.png */
color: #00dd00;
}
div#simpleSearch #searchInput::placeholder {
color:#008800;
}
/* Search results suggestion box */
.suggestions-results,
.suggestions-special {
background-color: #000000;
border: solid 1px #00dd00;
}
.suggestions-special .special-label {
color:#008800;
}
.suggestions-result,
.suggestions-special .special-query {
color:#00dd00;
}
/* Color footer */
#footer {
background-color: Black;
color: #00dd00;
border-color: #FFFF00;
padding-bottom: 1.2em;
}
#footer ul li {/* Vector */
color:inherit;
}
/************************
* COLOR IN TEMPLATES *
************************/
.infobox {
background: #002000;
color:#00DD00;
border-color:#00FFFF;
}
/* Template:Documentation */
.mw-parser-output div.documentation,
.mw-parser-output div.documentation-metadata {
background-color: #001000;
}
/* template RFA, AN/I closed */
div.boilerplate,
.portal > ul {
background-color: #000000!important;
}
/* */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
#mw-protect-cascadeon {
background-color: #700;
color:#fff;
}
.mw-trackedTemplate {
background: #002000 linear-gradient(#333, #000) !important;
border-color: #008000!important;
}
.quotebox, /* Template:Quote */
.shortcutbox {
background-color: #002000!important;
border-color: #008000!important;
}
body.mediawiki .navbox,
body.mediawiki .navbox-subgroup {
}
/* Template:Tmbox */
.tmbox {
border: 1px solid #c0c090 !important; /* Default "notice" gray-brown */
}
.tmbox,
.tmbox th,
.tmbox td {
background: #430 !important;
}
/* Template:Key press */
kbd.keyboard-key {
background: #44372c!important;/* XXX override template gradients */
border-color: #65594d #110e0D #110e0d #65594d!important;
color: #ffffff!important;
}
/* */
table.wikitable td.table-yes {
background-color: #008000!important;
}
table.wikitable td.table-maybe {
background-color: #6c7203!important;
}
table.wikitable td.table-no {
background-color: #ad5053!important;
}
table.wikitable td.table-partial {
background-color: #7e6b45!important;
}
table.wikitable td.table-na, td.table-unknown {
background-color: #6d6d6d!important;
}
/************************
* WIKI-SPECIFIC *
************************/
/* History on Commons */
#histlegend { background-color:inherit!important; }
/* De-color [[mw:CentralNotice]] */
#centralNotice, #cnotice-main { background-color:#000!important; color:inherit!important; }
/* de's Flaggedrev */
.flaggedrevs-color-1 {
background-color: #102;
}
/* enwiki Monobook.css */
body.skin-monobook.skin-monobook #content,
body.skin-monobook.skin-monobook #p-cactions li a:hover,
body.skin-monobook.skin-monobook #p-cactions li.selected a,
body.skin-monobook.skin-monobook #content div.thumb,
body.skin-monobook.skin-monobook #p-cactions li a {
background-color: #000700; /* Light blue */
}
body.skin-monobook.skin-monobook.ns-0 #content,
body.skin-monobook.skin-monobook.ns-0 #p-cactions li a:hover,
body.skin-monobook.skin-monobook.ns-0 #p-cactions li.selected a,
body.skin-monobook.skin-monobook.ns-0 #content div.thumb {
background-color: #000000; /* Set back for articles */
}
body.skin-monobook.skin-monobook.ns-0 #p-cactions li a {
background-color: #101010; /* Light gray inactive tabs in articles */
}
/************************
* GADGETS *
************************/
/* [[WP:Navigation popups]] */
.navpopup {
background:#000;
border-color:inherit;
color:#0d0;
box-shadow: 0 3px 8px rgba( 50,255,50,0.35 );
}
.popup_mainlink a {
color:#0d0;
}
.popup_menu,
.popup_drop:hover .popup_menu,
.popup_drop .popup_menu:hover {
background-color:#000;
}
.popup_menu a:hover {
background-color: #447;
color: #ccf;
}
del.popupDiff {
background-color:#273948;
}
ins.popupDiff {
background-color:#403618;
}
/* [[mw:Reference Tooltips]] */
.referencetooltip li {
/*border-color: #008000;*/
background-color:#001000;
/*box-shadow: 2px 4px 2px rgba(0,224,0,0.3); /* tint #00F000 */
}
/* [[mw:HoverCards]] */
.mwe-popups {
background-color: #000;
box-shadow: /* tint #00F000 */
0 30px 90px -20px rgba(0,224,0,0.3),
0px 0px 1px rgba(0,224,0,0.5);
}
/* callout arrow */
.mwe-popups.mwe-popups-image-tri:after,
.mwe-popups.mwe-popups-no-image-tri:after,
.mwe-popups.mwe-popups-image-tri.flipped_x:after,
.mwe-popups.mwe-popups-no-image-tri.flipped_x:after {
border-bottom-color:#000;
}
.mwe-popups.flipped_y:after,
.mwe-popups.flipped_x_y:after {
border-top-color:#000;
}
/* callout arrow shadow */
.mwe-popups.mwe-popups-image-tri:before,
.mwe-popups.mwe-popups-no-image-tri:before,
.mwe-popups.mwe-popups-image-tri.flipped_x:before,
.mwe-popups.mwe-popups-no-image-tri.flipped_x:before {
border-bottom-color:#004000;
}
.mwe-popups.flipped_y:before,
.mwe-popups.flipped_x_y:before {
border-top-color:#004000;
}
.mwe-popups .mwe-popups-container,
.mwe-popups .mwe-popups-extract {
color:#0d0;
}
.mwe-popups .mwe-popups-extract[dir='ltr']:after {
background-image: linear-gradient(to right,rgba(0,0,0,0),#000 50%);
}
/* [[WP:WikEd]] */
.wikEdDiffFragment,
.wikEdPreviewArticle,
.wikEdDiffNoChange,
.wikEdConsoleWrapper {
background-color:inherit;
}
.wikEdButtonsPreview,
.wikEdButtonBarGrip,
.wikEdButtonBarButtonsWrapperVisible,
.wikEdButtonBarButtonsWrapperHidden {
background-color:#666;
}
img.wikEdButton {
background-color:#999;
}
iframe.wikEdFrame {
background-color: white;
color: black;
filter: invert(1) hue-rotate(180deg);
}
/* [[mw:Echo]] */
.mw-echo-ui-notificationItemWidget-content-message-header,
.mw-echo-ui-notificationItemWidget-unread,
.mw-echo-ui-notificationItemWidget-unread:hover,
.mw-echo-ui-notificationItemWidget,
.mw-echo-ui-notificationItemWidget:hover,
.mw-echo-ui-crossWikiNotificationItemWidget-group,
.mw-echo-ui-bundleNotificationItemWidget-group {
color:#0d0;
background-color:#010;
}
#pt-notifications-alert .mw-echo-notifications-badge:before {
filter:invert(1);
}
#pt-notifications-notice .mw-echo-notifications-badge:before {
filter:invert(1);
}
/* [[mw:MediaViewer]] */
.mw-mmv-post-image {
background-color: navy;
color: yellow;
}
.mw-mmv-image-metadata {
background-color: #003;
}
.mw-mmv-image-links li, .mw-mmv-credit {
color: lime;
}
/* [[mw:Cite]] */
ol.references li:target, sup.reference:target {
background-color: #033;
}
/* [[mw:User:Remember the dot/Syntax highlighter]] */
#wpTextbox0 {
filter:saturate(8) invert(1) hue-rotate(180deg);
}
#wpTextbox0+#wpTextbox1 {
filter:invert(1);
}
/* Wikidata / [[mw:Wikibase]] */
.wikibase-statementgrouplistview .wikibase-statementlistview {
background-color:#000000;
}
.wikibase-statementgroupview .wikibase-statementgroupview-property {
background-color:#002000;
}
.wikibase-statementlistview > .wikibase-toolbar-wrapper {
background-color: #004000;
}
.wikibase-statementgrouplistview .wikibase-statementgroupview-property.wb-edit, .wikibase-statementgroupview-property.wb-edit + .wikibase-statementlistview > .wikibase-toolbar-wrapper {
background-color: #008000;
}
.wikibase-referenceview {
background-color:darkgreen;
}
.wikibase-referenceview .wikibase-referenceview-heading {
background-color:darkgreen;
}
/* Wikidata site language */
.wikibase-sitelinkgroupview .wikibase-sitelinkgroupview-heading-container {
background-color:#008000;
}
.wikibase-sitelinklistview .wikibase-sitelinkview .wikibase-sitelinkview-siteid-container {
background-color:#008000;
}
/* Decolor pblock log */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color : #008000!important;
background-color: #000000!important;
}
/**
A lot of templates use the color: var(--color-base, #000); construct to set their text color
especially after the introduction of the WMF dark mode, explicitly set --color-base as part
of this "skin" so that we don't need to worry about having black on black templates
also @see [[User_talk:SilverLocust#Template:RM_top]]
*/
:root {
--color-base: #00dd00;
}
/* End @media screen */
}
ii8jpkgjp0ra7jjceg0zrpzgbm8v5ku
MediaWiki:Gadget-Blackskin
8
53852
311051
2026-10-25T15:46:01Z
Isma4l
41797
/* */
311051
wikitext
text/x-wiki
Isticmaal asal madow oo ay ku jiraan qoraallo cagaaran
nuwogqaolhakexkh2a5lbrhsmw2hb3n
MediaWiki:Gadget-dark-mode-toggle.js
8
53853
311052
2026-10-25T15:46:50Z
Isma4l
41797
Abuuray
311052
javascript
text/javascript
/**
* Wax a u oggolaanaya ama daminaya gadget-ka qaabka mugdiga (dark-mode).
*
* Qorayaasha: [[User:SD0001]], [[User:Nardog]]
*/
// Fariimaha 'Dark mode' iyo 'Light mode' waa inay la mid yihiin waxa ku jira ee ::before
// [[MediaWiki:Gadget-dark-mode-toggle-pagestyles.css]] iyo [[MediaWiki:Gadget-dark-mode.css]], siday u kala horreeyaan.
// Ha ku dul qorin fariimaha jira, haddii hore loogu sii dejiyay wiki shisheeye ka hor int>**
if (!mw.messages.get('darkmode-turn-on-label')) {
mw.messages.set({
'darkmode-turn-on-label': 'Qaabka mugdiga',
'darkmode-turn-on-tooltip': 'Shid qaabka mugdiga',
'darkmode-turn-off-label': 'Qaabka iftiinka',
'darkmode-turn-off-tooltip': 'Demi qaabka mugdiga',
});
}
var isOn = mw.loader.getState('ext.gadget.dark-mode') === 'ready';
var broadcastChannel = new BroadcastChannel('gadget-dark-mode');
function setThemeColor() {
// Cusboonaysii midabka mowduuca (theme-color) ee ay isticmaalaan qaar ka mid ah daalacayaasha (browsers) si ay u midabeeyaan madaxyada tab-ka iyo UI-ga ku xeeran
$('meta[name="theme-color"]').attr('content', isOn ? '#000000' : '#eaecf0');
}
function setHtmlClass() {
// Fasalka CSS ee qaabaynta ayrada ee qaabka mugdiga adoo adeegsanaya TemplateStyles (ama CSS laga keenay qalab kale ama common.css)
// Libiqsi gaaban oo ah qaababkii asaliga ahaa ayaa dhici doona, markaa tani waxay ku habboon tahay oo kaliya isbeddellada qaabka ee uu libiqsigu la qaadan karo.
// Kuwa kale, si toos ah u cusboonaysii Gadget-dark-mode.css kaas oo la soo raro iyada oo aan FOUC dhicin
$(document.documentElement).toggleClass('client-dark-mode', isOn);
}
function vectorStickyCallback() {
mw.hook('vector.page_title_scroll').remove(vectorStickyCallback);
if (document.getElementById('pt-darkmode-sticky-header')) return;
makePortletLink('p-personal-sticky-header', 'pt-darkmode-sticky-header', '#pt-watchlist-sticky-header');
}
function addPortlets() {
makePortletLink('p-personal', 'pt-darkmode', '#pt-watchlist');
if (mw.config.get('skin') === 'vector-2022') {
mw.hook('vector.page_title_scroll').add(vectorStickyCallback);
}
}
function getMsg(suffix) {
var key = 'darkmode-turn-' + (isOn ? 'off' : 'on') + '-' + suffix;
return mw.msg(key);
}
function makePortletLink(portletId, portletLinkId, nextnode) {
var label = getMsg('label');
var tooltip = getMsg('tooltip');
$(mw.util.addPortletLink(portletId, '#', label, portletLinkId, tooltip, '', nextnode))
.children().on('click', function (e) {
e.preventDefault();
toggleMode();
});
}
function togglePortlets() {
var labelSelector;
switch (mw.config.get('skin')) {
case 'vector':
case 'vector-2022':
case 'minerva':
labelSelector = '#pt-darkmode span:not(:empty), #pt-darkmode-sticky-header span:not(:empty)';
break;
default:
labelSelector = '#pt-darkmode a';
}
$(labelSelector).text(getMsg('label'));
$('#pt-darkmode a, #pt-darkmode-sticky-header a')
.attr('title', getMsg('tooltip'));
}
function actuallyToggleDarkMode() {
// Wax ka beddel curiyaha <link> ee bogga si aad ugu darto/uga saarto qaababka qaabka mugdiga
// Ma isticmaali karno mw.loader maadaama uusan labada dhinacba u shaqaynayn (eeg bogga wadahadalka)
var scriptPath = mw.util.wikiScript('load');
var $gadgetsLink = $('link[rel="stylesheet"][href^="' + scriptPath + '?"][href*="ext.gadget."]');
if ($gadgetsLink.length) {
var url = new URL($gadgetsLink.prop('href'));
if (isOn) {
url.searchParams.set('modules', url.searchParams.get('modules') + ',dark-mode');
} else {
if (url.searchParams.get('modules') === 'ext.gadget.dark-mode') {
// dark-mode waa qaybta kaliya ee ku jirta xiriirkan
$gadgetsLink.remove();
return;
}
url.searchParams.set('modules', url.searchParams.get('modules')
.replace('ext.gadget.dark-mode,', 'ext.gadget.') // dark-mode waa midda kowaad ee liiska qalabka (gadget)
.replace(/,dark-mode(,|$)/, '$1')); // dark-mode waxay ku jirtaa dhexda ama dhammaadka liiska
}
$gadgetsLink.prop('href', url.pathname + url.search);
} else {
// Ma jiraan qaabab qalab wata oo shaqeeya
$('<link>').attr({
rel: 'stylesheet',
href: scriptPath + '?lang=' + mw.config.get('wgUserLanguage') +
'&modules=ext.gadget.dark-mode&only=styles&skin=' + mw.config.get('skin')
}).appendTo(document.head);
}
}
function savePreference() {
new mw.Api().saveOption('gadget-dark-mode', isOn ? '1' : '0');
}
function savePreferenceLocally() {
mw.user.options.set('gadget-dark-mode', Number(isOn));
// Haddii ay dhacdo in isticmaaleha uusan u gudbin bog kale si aad u degdeg ah
mw.storage.session.set('dark-mode-toggled', isOn ? '1' : '0');
}
function notifyOtherTabs() {
// U gudbi isbeddelka xaaladda tab-yada kale
broadcastChannel.postMessage(isOn);
}
function toggleMode(offline) {
isOn = !isOn;
if (!offline) {
savePreference();
notifyOtherTabs();
}
setHtmlClass();
setThemeColor();
savePreferenceLocally();
togglePortlets();
actuallyToggleDarkMode();
}
function toggleBasedOnSystemColourScheme() {
var systemSchemeNow = matchMedia('(prefers-color-scheme: dark)').matches;
var systemSchemeLast = mw.storage.get('dark-mode-system-scheme') === '1';
if (systemSchemeNow !== systemSchemeLast) {
if (systemSchemeNow !== isOn) {
toggleMode();
}
mw.requestIdleCallback(function () {
mw.storage.set('dark-mode-system-scheme', systemSchemeNow ? '1' : '0');
});
}
}
$.when($.ready, mw.loader.using(['mediawiki.util', 'mediawiki.api', 'mediawiki.storage'])).then(function () {
setHtmlClass();
setThemeColor();
addPortlets();
// Soo celi xaaladda haddii navigation-ku uu ahaa mid aad u degdeg ah
var storageState = mw.storage.session.get('dark-mode-toggled');
if (storageState && Number(storageState) !== Number(isOn)) {
toggleMode(true);
}
// Dhageyso isbeddelka xaaladda qaabka mugdiga ee lagu sameeyay tab-yada kale
broadcastChannel.onmessage = function (msg) {
if (msg.data !== isOn) {
toggleMode(true);
}
};
if (window.wpDarkModeAutoToggle) {
toggleBasedOnSystemColourScheme();
// Haddii midabka nidaamku is beddelo inta isticmaalehu daawanayo, beddel si degdeg ah
var mediaQuery = matchMedia('(prefers-color-scheme: dark)');
if (mediaQuery.addEventListener) {
mediaQuery.addEventListener('change', toggleBasedOnSystemColourScheme);
} else if (mediaQuery.addListener) { // Safari 13 iyo ka sii horreeya
mediaQuery.addListener(toggleBasedOnSystemColourScheme);
}
}
});
dullljerid6f7o9qyjji75hpbf62jtj
MediaWiki:Gadget-dark-mode-toggle
8
53854
311053
2026-10-25T15:47:49Z
Isma4l
41797
/* */
311053
wikitext
text/x-wiki
[[:en:Wikipedia:Dark mode (gadget)|Qaabka mugdiga]] beddelaha: Shid baddal lagu isticmaalo qoraal iftiimaya oo ku yaal midabka asalka ah ee mugdiga ah
kv7xdswomgbjjqfejftl6hw93kupycn
MediaWiki:Gadget-VectorClassic.css
8
53855
311054
2026-10-25T15:49:30Z
Isma4l
41797
Abuuray
311054
css
text/css
/**
* Gadget to reset typography refresh
*/
html, body {
font-family: sans-serif;
}
div#content {
color: black;
}
div#content h1,
div#content h2,
div#content .mw-heading1,
div#content .mw-heading2,
div#content #firstHeading,
div#content .mw-editsection {
font-family: inherit;
}
div#content .mw-heading,
div#content h1,
div#content h2,
div#content h3,
div#content h4,
div#content h5,
div#content h6 {
line-height: inherit;
margin: 0;
padding-top: 0.5em;
padding-bottom: 0.17em;
}
div#content #firstHeading {
font-size: 1.6em;
line-height: 1.2em;
margin-bottom: 0.1em;
padding-bottom: 0;
}
div#content .mw-heading1 {
font-size: 188%;
margin-bottom: 0.6em;
}
div#content .mw-heading2 {
font-size: 150%;
margin-bottom: 0.6em;
}
div#content .mw-heading3 {
font-size: 132%;
}
div#content .mw-heading4 {
font-size: 116%;
}
div#content .mw-heading5 {
font-size: 108%;
}
div#content .mw-heading6 {
font-size: 100%;
}
.vector-body {
font-size: 0.8125em;
line-height: 1.5em;
}
5oxqn4vnr2s5e5gpiytqtpp437ojnjm
MediaWiki:Gadget-VectorClassic
8
53856
311055
2026-10-25T15:50:14Z
Isma4l
41797
/* */
311055
wikitext
text/x-wiki
Nuqul qorista caadiga ah ee Vector (isticmaal kaliya farta sans-serif ee maqaarka Vector)
k7hvg05o5htg0h5zsjdvl7wxfy8xxs0
MediaWiki:Gadget-widensearch.css
8
53857
311056
2026-10-25T15:50:47Z
Isma4l
41797
Abuuray
311056
css
text/css
/* Widen the search box in Vector */
div#simpleSearch { width: 20em !important; }
9yshdbhx0ryz0ss8poxffbgwvvvkyzm
MediaWiki:Gadget-widensearch
8
53858
311057
2026-10-25T15:51:47Z
Isma4l
41797
/* */
311057
wikitext
text/x-wiki
Ballaari sanduuqa raadinta ee maqaarka Vector
44rsk15d4l7dp9w8yqgppjswc8ru3ho
MediaWiki:Gadget-DisambiguationLinks.css
8
53859
311058
2026-10-25T15:52:36Z
Isma4l
41797
Abuuray
311058
css
text/css
/**
* Display links to disambiguation pages in orange
* @revision 1.0 (2015-05-27)
* @author Kaldari
*/
a.mw-disambig {
color: hsl(30, 100%, 45%);
}
@media screen {
html.skin-theme-clientpref-night a.mw-disambig {
color: hsl(30, 100%, 60%);
}
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os a.mw-disambig {
color: hsl(30, 100%, 60%);
}
}
38uyha615xwlcr4c9enjlg1cfuio21i
MediaWiki:Gadget-DisambiguationLinks
8
53860
311059
2026-10-25T15:53:24Z
Isma4l
41797
/* */
311059
wikitext
text/x-wiki
Soo bandhig xiriiriyeyaasha ku wajahan [[:en:Help:Disambiguation|bogagga kala soocidda]] midab liin ah
c7czzeivvlntu9viv6pl7g7l48gthz8
MediaWiki:Gadget-SidebarTranslate.js
8
53861
311060
2026-10-25T15:54:39Z
Isma4l
41797
Abuuray
311060
javascript
text/javascript
/* _____________________________________________________________________________
* | |
* | === DIGNII: FAYLKA GADGET-KA CAALAMIGA AH === |
* | Isbeddellada faylkan waxay saameeyaan isticmaaleyaal badan. |
* | Fadlan kala hadal isbeddellada bogga wadahadalka ama [[WT:Gadget]] ka hor inta aadan wax ka beddelin.|
* |_____________________________________________________________________________|
*
* Waxaa laga soo dejiyay [[User:Equazcion/SidebarTranslate.js]] taariikhdu ahayd 2013-11-27
* Eeg [[User:Equazcion/SidebarTranslate]]
* Ogow in marka la is waafajinayo (syncing) la damiyo yeerista importStylesheet.
*/
$( document ).ready( function () {
'use strict';
var $plang, $plangUL, $interwikis,
langReg, gtPre, hardLangs, googleSupported, sortByText;
$plang = $( '#p-lang, #p-lang-btn' );
$plangUL = $plang.find( 'ul' );
$interwikis = $plangUL.find( 'li.interlanguage-link' );
if ( $interwikis.length === 0 ) {
return;
}
$plang.hide();
$interwikis.detach();
langReg = /(.* – )?(.*)/;
gtPre = 'http://translate.google.com/translate?hl=en&sl=auto&tl=en&u=';
hardLangs = {
'lumbaart': 'Lombard',
'tarandíne': 'Tarantino',
'vèneto': 'Venetian',
'беларуская (тарашкевіца)\u200E': 'Belarusian (Taraškievica)',
'буряад': 'Buryat',
'лакку': 'Lak',
'भोजपुरी': 'Bhojpuri',
'تۆرکجه': 'Azerbaijani (South)'
};
googleSupported = ['Afrikaans', 'Albanian', 'Arabic', 'Armenian', 'Azerbaijani', 'Basque', 'Belarusian', 'Bengali', 'Bulgarian',
'Catalan', 'Chinese', 'Croatian', 'Czech', 'Danish', 'Dutch', 'English', 'Esperanto', 'Estonian', 'Filipino', 'Finnish',
'French', 'Galician', 'Georgian', 'German', 'Greek', 'Haitian', 'Creole', 'Hebrew', 'Hindi', 'Hungarian', 'Icelandic',
'Indonesian', 'Irish', 'Italian', 'Japanese', 'Javanese', 'Kannada', 'Korean', 'Khmer', 'Latin', 'Latvian', 'Lithuanian',
'Macedonian', 'Malay', 'Maltese', 'Marathi', 'Norwegian', 'Norwegian (bokmål)', 'Norwegian Nynorsk', 'Persian', 'Polish',
'Portuguese', 'Romanian', 'Russian', 'Serbian', 'Slovak', 'Slovenian', 'Spanish', 'Swahili', 'Swedish', 'Tamil',
'Telugu', 'Thai', 'Turkish', 'Ukrainian', 'Urdu', 'Vietnamese', 'Welsh', 'Yiddish'];
$interwikis.find( 'a.interlanguage-link-target' ).each( function() {
var $linkTarget, origLangName, langMatches,
newLangName, hrefs, origLangPre, $langName,
unsup, $googleLink;
$linkTarget = $( this );
langMatches = langReg.exec( $linkTarget.attr( 'title' ) );
if ( langMatches === null ) {
return;
}
origLangName = $linkTarget.text();
newLangName = ( langMatches[2] in hardLangs ) ? hardLangs[ langMatches[2] ] : langMatches[2];
hrefs = $linkTarget.attr( 'href' );
origLangPre = ( langMatches[1] === undefined ) ? '' : langMatches[1];
$langName = $( '<span>' )
.attr( 'lang', 'en' )
.text( newLangName );
$linkTarget
.text( '' )
.append( $langName )
.attr( 'title', origLangPre + origLangName );
unsup = ( googleSupported.indexOf( langMatches[2]) < 0 ) ? '#FA8540' : '#4085FA';
$googleLink = $( '<a>', {
'text': 'G',
'class': 'external gTrans',
'target': '_blank',
'href': gtPre + hrefs,
'title': 'Google Translate: ' + newLangName + ' to English',
'style': 'color:' + unsup + ';',
'lang': 'en'
} );
$googleLink
.insertAfter( $linkTarget )
.before( ' ' );
if ( $langName.text().length > 17 ) {
$langName.html( $langName.html().replace( '-', '- ' ).replace( ' ', '<br />' ) );
}
$linkTarget.siblings( '.gTrans' ).hover(
function() {
$( this ).css( { 'background-color': unsup, 'color': 'white' } );
},
function() {
$( this ).css( { 'background-color': 'transparent', 'color': unsup } );
}
);
$linkTarget.parent( 'li' ).hover(
function() {
$( this ).find( '.gTrans' ).fadeIn( 200 ).css( 'margin-left', '0' );
},
function() {
$( this ).find( '.gTrans' ).fadeOut( 100 ).css( 'margin-left', '5px' );
}
);
} );
sortByText = function ( a, b ) {
return ( $( b ).text() ) < ( $( a ).text() ) ? 1 : -1;
};
$plangUL.prepend( $interwikis.sort( sortByText ) );
// Haddii xiriiriyeyaasha cawlan ee ay ku dartay Turjumaadda Astaamaha ay jiraan,
// dib ugu celi xagga sare
$plangUL.find( '.cx-new-interlanguage-link' )
.detach()
.prependTo( $plangUL );
$plang.show();
} );
9pcqeh9wv63wudyxf19hgcjfaaxcs6j
MediaWiki:Gadget-SidebarTranslate.css
8
53862
311062
2026-10-25T15:55:10Z
Isma4l
41797
Abuuray
311062
css
text/css
/* _____________________________________________________________________________
* | |
* | === WARNING: GLOBAL GADGET FILE === |
* | Changes to this page affect many users. |
* | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. |
* |_____________________________________________________________________________|
*
* Imported from [[User:Equazcion/SidebarTranslate.css]] on 2013-11-27
* See [[User:Equazcion/SidebarTranslate]]
*/
.gTrans:hover {
text-decoration:none;
}
.gTrans {
display: none;
font-family: serif;
cursor: pointer;
color: white;
background-color: transparent;
border-radius: 2px;
padding: 0 2px;
margin-left: 5px;
transition:
margin-left 200ms ease-out,
background-color 100ms ease-out,
color 100ms ease-out;
}
#p-lang ul {
width:115%;
}
#p-lang li.interlanguage-link {
font-family: inherit;
}
ezdve7u0qo410dcl2bbvo8h4i3um3c1
MediaWiki:Gadget-SidebarTranslate
8
53863
311063
2026-10-25T15:56:20Z
Isma4l
41797
/* */
311063
wikitext
text/x-wiki
[[:en:User:Equazcion/SidebarTranslate|SidebarTranslate]]: ku soo bandhig xiriiriyeyaasha luuqadaha ee dhinaca af soomaali
qgz7ouydrt7y4tbdygdwo7sumckk126
MediaWiki:Gadget-PrettyLog.js
8
53864
311064
2026-10-25T15:57:30Z
Isma4l
41797
Abuuray
311064
javascript
text/javascript
/*
PrettyLog - dib u habaynta bogagga diiwaanka (log pages). Haddii diiwaanku ka kooban yahay gelinta faylasha, ku dar sawirro yaryar (thumbnails)
ee faylasha. Haddii qalabka GalleryDetails sidoo kale la shiday, hubi inuu ku daro xiriiriyaha dhinaca (sidebar link).
Qorayaasha: [[User:Lupo]], Janaayo 2009; [[User:Ilmari Karonen]], Abriil 2010
Shatiga: Shati afar jibaaran ah GFDL, GPL, LGPL iyo Creative Commons Attribution 3.0 (CC-BY-3.0)
*/
/*global mediaWiki, jQuery, GalleryDetailsLoader, stylepath*/
/*jshint laxbreak:true, curly:false*/
if (mediaWiki.config.get('wgCanonicalSpecialPageName') === "Log")
jQuery(document).ready(function () {
'use strict';
var mw = mediaWiki;
var $ = jQuery;
var wgServer = mw.config.get('wgServer');
var maxThumbWidth = 70;
var maxThumbHeight = 70;
var apiBatchSize = 50;
var content = mw.util.$content[0];
if (!content) return;
var list = content.getElementsByTagName("ul")[0];
if (!list) return;
list.className = 'mw-search-results';
// Taasi waa waxa kaliya ee looga baahan yahay qaab-dhismeedka quruxda badan! Koodka hoose oo dhan waa sawirrada yaryar (thumbnails) ee sawirka.
// Hel liiska gelitaanka diiwaanka gelinta (upload), iska jooji goor hore haddii aysan jirin.
var uploads = $(list).children('li.mw-logline-upload');
if (!uploads || uploads.length === 0) return;
// Ka hel xiriiriyeyaasha sawirka gelitaan kasta oo la soo geliyay. Fududeynta awgeed, waxaan u qaadaneynaa in dhammaan xiriiriyeyaasha ay ku jiraan
// qaab qoraal ah oo horudhac caadi ah leh, iyo in dhammaan xiriiriyeyaasha faylasha ay sidaas darteed ku billowdaan ns6prefix. Haddii kale
// waa inaan soo saarnaa oo aan hagaajinaa horudhaca magaca (namespace prefix) oo aan ka raadinno wgNamespaceIds.
var ns6prefix = mw.config.get('wgFormattedNamespaces')[6] + ":";
var imageLocations = {};
var links, title;
for (var i = 0; i < uploads.length; i++) {
links = uploads[i].getElementsByTagName("a");
for (var j = 0; j < links.length; j++) {
title = links[j].title;
if (!title || title.substring(0, ns6prefix.length) !== ns6prefix) continue;
// Ka bood xiriiriyeyaasha cas (redlinks), xiriiriyeyaasha ku jira koobisyada diiwaanka iyo xiriiriyeyaasha isticmaaleyaasha/wadahadalka/tabarucaadka/iwm ee soo geliyeyaasha.
for (var e = links[j]; title && e && e !== uploads[i]; e = e.parentNode) {
if ( /(^|\s)(new|comment|mw-userlink|mw-usertoollinks|mw-revdelundel-link|searchResultImage)(\s|$)/.test(e.className) ) title = null;
}
if (title) {
if (!imageLocations[title]) imageLocations[title] = [];
imageLocations[title].push(uploads[i]);
}
}
}
uploads = links = null; // uma baahnin NodeLists-kan mar dambe
// Hawsha wicitaanka (callback function) si loo tuso sawirrada yaryar (thumbnails):
var prettyLogAddThumbnails = function (result) {
var i;
if (result.error || !result.query || !result.query.pages)
throw new Error("PrettyLog: natiijo API ah oo aan la filayn:\n" + result.toSource());
// rajeynaya inaanan helin wax caadi ka dhigid ah (normalization), laakiin si ay u noqoto mid hubanti ah...
if (result.query.normalized) {
var norm = result.query.normalized;
for (i = 0; i < norm.length; i++) {
imageLocations[norm[i].to] = imageLocations[norm[i].from].concat( imageLocations[norm[i].to] || [] );
}
}
// hadda ku wareeg natiijada oo geli sawirro yaryar (thumbs)
var pages = result.query.pages;
for (var id in pages) {
if (pages.hasOwnProperty(id)) {
var title = pages[id].title;
if (!title) continue; // waa inaysan dhicin
if (pages[id].imagerepository && pages[id].imagerepository === "shared")
continue; // ha tusin sawirrada yaryar sawirrada fog (wuxuu dhici karaa haddii sawir qariya sawirka Commons lagu soo geliyo deegaanka oo la tirtiro)
var info = pages[id].imageinfo;
if (!info || !info.length) continue; // wuxuu dhici karaa haddii sawirka la tirtiray, ama haddii uusan ahayn sawir gabi ahaanba
info = info[0];
if (!info.thumburl) {
// KLUGE: sabab qaar ka mid ah, faylasha maqaliga marmarka qaarkood ma helaan thumburl; ku hagaaji halkan
// TODO(?): waxaa jira astaamo nooc fayl ah oo kale oo aan u dhigmi karno noocyada MIME haddii loo baahdo
if (/^(audio\/|application\/ogg$)/.test(info.mime)) {
info.thumburl = stylepath + "/common/images/icons/fileicon-ogg.png";
} else {
info.thumburl = stylepath + "/common/images/icons/fileicon.png"; // astaanta soo noqoshada guud (generic fallback icon)
}
info.thumbwidth = info.thumbheight = 120; // dhammaan astaamaha hadda waa 120x120
}
if (!info.thumbwidth || !info.thumbheight) continue; // ma dhici karto?
// haddii thumbnail-ka la soo celiyay uu aad u weyn yahay sabab qaar ka mid ah, u cabbir si waafaqsan si uu u habboonaado
if (info.thumbheight > maxThumbHeight) {
info.thumbwidth *= maxThumbHeight / info.thumbheight;
info.thumbheight = maxThumbHeight;
}
if (info.thumbwidth > maxThumbWidth) {
info.thumbheight *= maxThumbWidth / info.thumbwidth;
info.thumbwidth = maxThumbWidth;
}
// haddii URL-ku yahay mid deegaanka ah, ka saar horgalaha magaca martigeliyaha (hostname prefix) (wuxuu ka fogaadaa astaamaha xiriiriyaha dibadda ee aan loo baahnayn ee daalacayaasha qaarkood)
if (info.descriptionurl.indexOf(wgServer + "/") === 0)
info.descriptionurl = info.descriptionurl.substring(wgServer.length);
var loglines = imageLocations[title];
if (!loglines) continue; // waa inaysan dhicin
for (i = 0; i < loglines.length; i++) {
// hubinta badbaadada: ha ka shaqeynin safka isku midka ah laba jeer
if (/^table$/i.test(loglines[i].firstChild.tagName)) continue;
// abuur curiyeyaasha sawirka iyo xiriiriyaha ee sawirka yar (thumbnail)
var img = document.createElement("img");
img.src = info.thumburl;
img.width = Math.round(info.thumbwidth);
img.height = Math.round(info.thumbheight);
var link = document.createElement("a");
link.href = info.descriptionurl;
link.title = title;
link.className = "image";
link.appendChild(img);
// u beddel waxyaabaha ku jira safkan diiwaanka miis (table)
var tbl = document.createElement("table");
tbl.className = "searchResultImage";
var tr = tbl.insertRow(-1);
tr.setAttribute("valign", "top");
var td = document.createElement("td");
td.width = maxThumbWidth + 10;
td.setAttribute("align", "center");
td.appendChild(link);
tr.appendChild(td);
td = document.createElement("td");
while (loglines[i].firstChild) td.appendChild(loglines[i].firstChild);
tr.appendChild(td);
loglines[i].appendChild (tbl);
}
}
}
// haddii [[MediaWiki:Gadget-GalleryDetails.js]] la shiday laakiin uusan shaqaynayn, dib u billow hadda oo aan haysano sawirro qaar
if (typeof (GalleryDetailsLoader) !== 'undefined' && !document.getElementById('t-gallerydetails') && GalleryDetailsLoader.initialized) {
GalleryDetailsLoader.initialize();
}
};
// Dhis safafka cinwaannada sawirada gaarka ah oo u beddel URL-code.
var images = [];
for (title in imageLocations) {
if (imageLocations.hasOwnProperty(title) && typeof title === 'string') images.push( title );
}
// Samee su'aalaha qaybo (batches), si looga fogaado in API-gu turunturoodo loogana hortago in daalacaha (browser) uu xayirmo ama cillad server 500 ah oo ka timaada su'aal aad u dheer awgeed.
var n, imageslength = images.length;
for (n = 0; n < imageslength; n+=50) {
$.post(mw.util.wikiScript('api')
, { format: 'json'
,action: 'query'
,maxage: 3600
,smaxage: 3600
,prop: 'imageinfo'
,iiprop: 'url|mime'
,iiurlwidth: maxThumbWidth
,iiurlheight: maxThumbHeight
,titles: images.slice(n, n+50).join('|')
} ,prettyLogAddThumbnails);
}
});
1wrjlripv31n6su3qm31tbspv42gd8a
MediaWiki:Gadget-PrettyLog.css
8
53865
311065
2026-10-25T15:58:03Z
Isma4l
41797
Abuuray
311065
css
text/css
/* Special:Search styles */
.mw-search-results li{
padding: 0.25em 1em;
border-bottom: 1px solid #d3daed;
background: #f6f8fc;
color: black;
}
.mw-search-results li:nth-child(odd) {
background: #f6f8fc;
color: black;
}
.mw-search-results li:nth-child(even) {
background: #fcfcfc;
color: black;
}
.mw-search-results table {
background: transparent;
}
a5nd4u217r1jw1zbuuc2hmb6ejegejx
MediaWiki:Gadget-PrettyLog
8
53866
311066
2026-10-25T15:59:01Z
Isma4l
41797
/* */
311066
wikitext
text/x-wiki
[[commons:Help:Gadget-PrettyLog|PrettyLog]]: u qaabee bogagga ([[Special:Log|diiwaanka]]) sida natiijooyinka [[Special:Search|raadinta]], isla markaana ku dar sawirro yaryar oo loogu talagalay gelinta faylasha
248nbdjgf8dsivmcyfh3qsxge9trq6s
MediaWiki:Gadget-righteditlinks.css
8
53867
311067
2026-10-25T15:59:52Z
Isma4l
41797
Abuuray
311067
css
text/css
/* Move section [edit] links to the right side of the screen. */
.mw-editsection,
.mw-editsection-like {
float: right;
line-height: inherit;
}
#firstHeading .mw-editsection,
#firstHeading .mw-editsection-like {
margin-right: 0.5em;
}
.skin-modern #firstHeading .mw-editsection,
.skin-modern #firstHeading .mw-editsection-like {
margin-top: 0.5em;
}
.skin-vector .mw-editsection,
.skin-vector .mw-editsection-like {
margin-top: 0.7em;
}
.skin-vector #firstHeading .mw-editsection,
.skin-vector #firstHeading .mw-editsection-like {
margin-top: 1em;
}
eb3ojsur7blmw1kxqp605ya1o10xhwc
MediaWiki:Gadget-righteditlinks
8
53868
311068
2026-10-25T16:01:16Z
Isma4l
41797
/* */
311068
wikitext
text/x-wiki
U wareeji xiriiriyeyaasha qaybta ([wax ka beddelka]) dhinaca midig ee shaashadda
d6xabxha03ddrr9gkatr0qron9lh5xj
MediaWiki:Gadget-JustifyParagraphs.css
8
53869
311069
2026-10-25T16:02:27Z
Isma4l
41797
Abuuray
311069
css
text/css
/**
* Justify paragraphs
* @source mediawiki.org/wiki/Snippets/Paragraph_justification
* @revision 1.0 (2014-02-06)
* @author MediaWiki
*/
#article, #bodyContent, #mw_content {
text-align: justify;
}
lj3eqrfy53747kllszlmwdkkh1k7pkz
MediaWiki:Gadget-JustifyParagraphs
8
53870
311070
2026-10-25T16:04:05Z
Isma4l
41797
/* */
311070
wikitext
text/x-wiki
Toos cutubyada
n040fznguxzdpafcatvvxakwat092kq
MediaWiki:Gadget-metadata.js
8
53871
311071
2026-10-25T16:05:24Z
Isma4l
41797
Abuuray
311071
javascript
text/javascript
/** _____________________________________________________________________________
* | |
* | === DIGRIIN: FAYLKA GADGET-KA CAALAMIGA AH === |
* | Isbeddellada faylkan waxay saameeyaan isticmaaleyaal badan. |
* | Fadlan kala hadal isbeddellada bogga wadahadalka ama [[WT:Gadget]] ka hor inta aadan wax ka beddelin.|
* |_____________________________________________________________________________|
*
* Waxaa laga soo dejiyay dib-u-eegistii 185704269 laga bilaabo Janaayo 20, 2008 18:40 laga soo bilaabo
* [[User:Pyrospirit/metadata.js]], oo iyaduna ahayd nooc dib loo habeeyay oo laga soo qaatay
* [[User:Outriggr/metadata.js]].
* Qoraalka qiimaynta metadata
* Wuxuu helayaa qiimaynta WP 1.0/WikiProject ee maqaal kasta oo aad tagto, ka dibna
* wuxuu ku soo bandhigayaa macluumaadkaas madaxa maqaalka. Eeg (bogga cusub ee qoraalka ayaa soo socda).
* @author Outriggr - abuuray qoraalka oo isticmaali jiray inuu ilaaliyo
* @author Pyrospirit - isticmaali jiray inuu ilaaliyo oo cusboonaysiiyo qoraalka
* @author Nihiltres - Dib u habeeyay qoraalka, ilaaliyaha hadda
*/
window.assessment = (function () {
var assessmentObj = {
props: {},
methods: {}
},
// gaagaabyada gudaha
ap = assessmentObj.props,
am = assessmentObj.methods;
/**
* Shaqada ugu weyn ee qoraalka. Haddii shaqada checkArticle() ay heli karto
* qiimaynta, waxay falanqaysaa oo soo bandhigtay qiimayntaas bogga.
* Haddii kale, waxay isku daydaa inay ka soo ceshato qiimaynta iyada oo loo marayo AJAX.
*/
assessmentObj.init = function () {
if (mw.config.get("wgNamespaceNumber") !== 0 || // bog aan ahayn boqolleyda ugu weyn (non-mainspace page)
(mw.config.get("wgAction") !== "view" && mw.config.get("wgAction") !== "purge") || // ficil aan ahayn akhris
mw.util.getParamValue("printable") || // bog daabacan
mw.config.get("wgArticleId") === 0 || // bog aan jirin
mw.config.get("wgIsMainPage") === true // Bogga Hore (Main Page)
) {
return; // Ha socodsiinin qoraalka xaaladahan midkood ahaaneed.
}
ap.foundAssessment = am.checkArticle(); // wuxuu hubiyaa noocyada ka muuqda bogga maqaalka
if (!ap.foundAssessment.exists) { // ma jiro nooc ka muuqda maqaalka, u gudub in la hubiyo bogga wadahadalka
$.ajax({
url: mw.config.get("wgScript") + "?title=Talk:" + mw.util.wikiUrlencode(mw.config.get("wgPageName")) + "&action=raw§ion=0",
async: true,
dataType: "text",
success: function (responseText) {
ap.text = responseText;
ap.foundAssessment = am.getAssessment(ap.text);
ap.updata = am.renderAssessment(ap.foundAssessment);
am.update();
}
});
} else {
ap.updata = am.renderAssessment(ap.foundAssessment);
am.update();
}
};
/**
* Wuxuu ka hubiyaa walxaha kala duwan ee bogga maqaalka kuwaas oo muujinaya qiimayn gaar ah,
* sida ogeysiiska bogga kala soocidda (disambiguation page notice). Haddii shaqadani ay heli karto
* qiimaynta, AJAX looma baahna boggan.
* @returns {Object} checkResult - qiimaynta la helay
*/
am.checkArticle = function () {
var checkResult = {
extra: [],
exists: false
}, checksList = [
[$("#disambig, #disambig_disambigbox, #disambigbox").length, "dab"],
[$("#setindexbox").length, "setindex"],
[$("#contentSub").text() === "Redirect page", "redir"],
/* [$("table.stub").length, "stub"], */
[$("#ca-talk").hasClass("new"), "none"] // ma jiro bog wadahadal ah
];
$.each(checksList, function (i, e) {
if (e[0]) {
checkResult.rating = e[1];
checkResult.exists = true;
return false;
}
});
return checkResult;
};
/**
* Wuxuu ka raadiyaa koodka wiki ee la bixiyay qaybta qiimaynta ee qiimaynta oo wuxuu
* u soo celiyaa sidii xadhig (string) ah.
* Ogow in qiimaynta sarreysa ay mudnaan leedahay, qiimaynta yar loo isticmaalo
* sida "list", "current", ama "future" la isticmaalo oo keliya haddii aan wax kale la heli karin.
* @param {String} text - qaar ka mid ah wikitext si loogu raadilo macluumaadka qiimaynta
*/
am.getRating = function (text) {
var rating = "none",
standardChecks = [
[/\|\s*(class|currentstatus)\s*=\s*fa\b/i, "fa"],
[/\|\s*(class|currentstatus)\s*=\s*fl\b/i, "fl"],
[/\|\s*class\s*=\s*a\b/i, "a"],
[/\|\s*class\s*=\s*b\b/i, "b"],
[/\|\s*class\s*=\s*bplus\b/i, "bplus"], // waxaa isticmaala WP Math
[/\|\s*class\s*=\s*c\b/i, "c"],
[/\|\s*class\s*=\s*start/i, "start"],
[/\|\s*class\s*=\s*stub/i, "stub"],
[/\|\s*class\s*=\s*al\b/i, "al"], // waxaa isticmaala WP Military history & WP Highways
[/\|\s*class\s*=\s*bl\b/i, "bl"], // waxaa isticmaala WP Military history
[/\|\s*class\s*=\s*cl\b/i, "cl"], // waxaa isticmaala WP Military history
[/\|\s*class\s*=\s*list/i, "list"],
[/\|\s*class\s*=\s*sl\b/i, "sl"], // waxaa isticmaala WP Plants
[/\|\s*class\s*=\s*(dab|disambig)/i, "dab"],
[/\|\s*class\s*=\s*cur(rent)?/i, "cur"],
[/\|\s*class\s*=\s*future/i, "future"]
];
// qiimee hubinta caadiga ah
$.each(standardChecks, function (i, e) {
if (text.match(e[0])) {
rating = e[1];
return false;
}
});
// ka dibna kuwa aan caadiga ahayn. Kuwani waxay buriyaan qiimayntii hore haddii ay khuseeyaan.
if (rating === "a" && text.match(/\|\s*class\s*=\s*ga\b|\|\s*currentstatus\s*=\s*(ffa\/)?ga\b/i)) {
rating = "a/ga"; // Maqaallada heerka A ee sidoo kale ah GA
} else if (text.match(/\|\s*class\s*=\s*ga\b|\|\s*currentstatus\s*=\s*(ffa\/)?ga\b|\{\{\s*ga\s*\|/i) &&
!text.match(/\|\s*currentstatus\s*=\s*dga\b/i)) {
rating = "ga";
}
return rating;
};
/**
* Wuxuu ka raadiyaa koodka wiki ee la bixiyay xogta ku saabsan heerka maqaalka ee hadda iyo kii hore
* ee la soo bandhigay ama wanaagsan oo wuxuu soo celiyaa shay ka kooban xogtan
* oo ay la socdaan faahfaahin kale oo kala duwan.
* @param {String} text - qaar ka mid ah wikitext si loogu raadilo macluumaadka qiimaynta
* @return {Object} gottenAssessment - xogta qiimaynta ee bogga
*/
am.getAssessment = function (text) {
var gottenAssessment = {
rating: am.getRating(text),
pageLink: [null, null],
extra: [],
activeReview: null,
exists: true
},
actionNumber = 0,
pageLinkFlag = false,
peerReview, linkPattern, linkMatch, currentList, formerList;
currentList = [
// Magacaabista hadda (FAC, FLC, ama GAN)
{
reg: /\{\{\s*featured[ _]article[ _]candidates\s*(?:[\|\}]\s*([^\|\}]*))?[^\}]*?\}\}/i,
extraName: "fac",
addArticleNameTo: "Wikipedia:Featured_article_candidates\/"
},
{
reg: /\{\{\s*featured[ _]list[ _]candidates\s*(?:[\|\}]\s*([^\|\}]*))?[^\}]*?\}\}/i,
extraName: "flc",
addArticleNameTo: "Wikipedia:Featured_list_candidates\/"
},
{
reg: /\{\{\s*ga ?nominee\s*[\|\}][^\}]*\}\}/i,
extraName: "gan",
addMatchReg: /\|\s*page\s*=\s*(\d+).*\|\s*status\s*=\s*\w+\b/i,
addMatchTo: "Talk:" + mw.config.get("wgPageName") + "\/GA"
},
// Dib-u-eegisyada hadda ee heerka (FAR, FLRC, ama GAR)
{
reg: /\{\{\s*featured[ _]article[ _]review\s*(?:[\|\}]\s*([^\|\}]*))?[^\}]*?\}\}/i,
extraName: "far",
addArticleNameTo: "Wikipedia:Featured_article_review\/"
},
{
reg: /\{\{\s*featured[ _]list[ _]removal[ _]candidates\s*(?:[\|\}]\s*([^\|\}]*))?[^\}]*?\}\}/i,
extraName: "flrc",
addArticleNameTo: "Wikipedia:Featured_list_removal_candidates\/"
},
{
reg: /\{\{\s*gar\/link\s*[\|\}][^\}]*\}\}/i,
extraName: "gar",
addMatchReg: /\|\s*GARpage\s*=\s*(\d+).*\|/i,
addMatchTo: mw.config.get("wgPageName")
}
];
$.each(currentList, function (i, e) {
var reg = text.match(e.reg),
articleName,
tempMatch;
if (reg) {
gottenAssessment.extra.push(e.extraName);
if (e.hasOwnProperty("addArticleNameTo") && reg[1]) {
articleName = am.decodeEntities($.trim(reg[1]));
if (articleName) {
gottenAssessment.pageLink[0] = e.addArticleNameTo + articleName;
}
}
if (e.hasOwnProperty("addMatchReg")) {
tempMatch = reg[0].match(e.addMatchReg);
if (tempMatch) {
gottenAssessment.pageLink[0] = (e.addMatchTo || "") + (tempMatch[1] || "");
}
if (e.extraName === "gar") { // Ma laga maarmi karo kiiskan gaarka ah si fudud
gottenAssessment.pageLink[0] = am.getGARLink(e.addMatchTo, tempMatch[1]);
}
}
return false;
}
});
formerList = [
// Heerar hore (FFA, FFL, ama DGA)
{
name: "ffa",
reg: /\|\s*currentstatus\s*=\s*ffa\b/i,
getActionNumber: true,
getActionNumberReg: /\|\s*action(\d+)\s*=\s*far\b/gi
},
{
name: "ffa",
reg: /\|\s*action(\d+)\s*=\s*far\b/gi,
extraCondition: function (ec_reg) {
// Wuxuu hubiyaa haddii gelitaankii ugu dambeeyay ee FAR ee ku jira ArticleHistory uu keenay in la tirtiro.
var match, ratingSearch;
if (!ec_reg) {
return false;
}
match = text.match(new RegExp(
"\\|\\s*action" + ec_reg[ec_reg.length - 1].match(/\d+/) + "result\\s*=\\s*removed\\b",
"i"
));
ratingSearch = (gottenAssessment.rating.search(/f[al]/i) === -1);
return (match && ratingSearch);
},
getActionNumber: true
},
{
name: "ffa",
reg: /\{\{\s*formerfa2?\b/i
},
{
name: "ffl",
reg: /\|\s*currentstatus\s*=\s*ffl\b/i
},
{
name: "ffl",
reg: /\{\{\s*ffl\s*[\|\}]/i
},
{
name: "dga",
reg: /\|\s*currentstatus\s*=\s*dga\b/i,
getActionNumber: true,
getActionNumberReg: /\|\s*action(\d+)\s*=\s*gar\b/gi
},
{
name: "dga",
reg: /\{\{\s*d(elisted)?ga\s*[\|\}]/i
},
// Magacaabista hore (FAC, FLC, ama GAN hore)
{
name: "ffac",
reg: /\|\s*action(\d+)\s*=\s*fac\b/gi,
extraCondition: function () {
return (gottenAssessment.rating.search(/f[al]/i) === -1);
},
getActionNumber: true
},
{
name: "ffac",
reg: /\|\s*currentstatus\s*=\s*ffac\b/i
},
{
name: "ffac",
reg: /\{\{\s*fac?(failed|(\-|[ _]\()?contested\)?)\s*[\|\}]/i
},
{
name: "fflc",
reg: /\|\s*action(\d+)\s*=\s*flc\b/gi,
extraCondition: function () {
return (gottenAssessment.rating.search(/f[al]/i) === -1);
},
getActionNumber: true
},
{
name: "fflc",
reg: /\|\s*currentstatus\s*=\s*fflc\b/i
},
{
name: "fgan",
reg: /\|\s*action(\d+)\s*=\s*gan\b/gi,
extraCondition: function () {
return (gottenAssessment.rating.search(/f[al]|(a\/)?ga/i) === -1);
},
getActionNumber: true
},
{
name: "fgan",
reg: /\|\s*currentstatus\s*=\s*fgan\b/i
},
{
name: "fgan",
reg: /\{\{\s*f(ailed ?)?ga\s*[\|\}]/i
}
];
$.each(formerList, function (i, e) {
var reg = text.match(e.reg),
extraCondition = !e.hasOwnProperty("extraCondition") ||
typeof e.extraCondition !== "function" ||
e.extraCondition(reg), // waa run (la iska indhatiray) ama natiijada shaqada
tempMatch;
if (reg && extraCondition) {
gottenAssessment.extra.push(e.name);
if (e.getActionNumber) {
tempMatch = (e.getActionNumberReg ? text.match(e.getActionNumberReg) : reg);
actionNumber = tempMatch[tempMatch.length - 1].match(/\d+/);
pageLinkFlag = true;
}
return false;
}
});
// Wuxuu raadiyaa dib-u-eegisyada asxaabta ee firfircoon hadda
ap.showOldPeerReviews = false; // eeg TODO hoos ku qoran
peerReview = text.match(/\{\{\s*peer[_ ]?review\s*\|\s*archive\s*=\s*(\d+)\b/i);
if (peerReview) {
gottenAssessment.review = "Wikipedia:Peer_review/" +
mw.config.get("wgPageName") + "/archive" + peerReview[1];
gottenAssessment.activeReview = true;
} else if (ap.showOldPeerReviews) {
$.noop(); // TODO: Ku dar koodka dib-u-eegisyada asxaabta ee hore
} else {
gottenAssessment.review = null;
}
// Wuxuu baaraa xiriiriyaha la xiriira ficilka ku jira ArticleHistory
if (pageLinkFlag) {
linkPattern = new RegExp("\\|\\s*action" + actionNumber + "link\\s*=\\s*([^\\n\\|]+)\\s*\\|");
linkMatch = text.match(linkPattern);
gottenAssessment.pageLink[1] = linkMatch ? am.decodeEntities(linkMatch[1]) : null;
}
return gottenAssessment;
};
/**
* Wuxuu u kala qaadaa shayga qiimaynta HTML iyo koodka CSS ee looga baahan yahay in lagu cusboonaysiiyo
* madaxa maqaalka. Haddii uusan aqoonsan qayb ka mid ah macluumaadka
* la bixiyay, wuxuu si fudud u indhatiri doonaa oo calaamadin doonaa mid aan la qiimayn.
* @param {Object} assess - macluumaadka qiimaynta ee maqaalkan
* @return {String} newClass - fasalka CSS ee u dhigma qiimayntiisa
* @return {String} slogan - HTML bixinta (oo leh xiriiriye) qiimaynta ugu weyn
* @return {String} info - HTML bixinta (oo leh xiriiriye) macluumaad dheeraad ah
*/
am.renderAssessment = function (assess) {
var assessLink = mw.util.getUrl("Wikipedia:Content_assessment"),
peerReviewText = am.addPeerReview(assess.review, assess.activeReview),
pageLink = assess.pageLink || [null, null],
info = am.getExtraInfo((assess.extra || []), pageLink),
newClass,
slogan,
ratingList;
if (peerReviewText) {
info.push(peerReviewText);
}
ratingList = [
{
name: "a",
className: "assess-a-text",
text: "Maqaal <a>heerka A ah<\/a>"
},
{
name: "a/ga",
className: "assess-a-text",
text: "Maqaal <a>heerka A ah<\/a>",
info: "Sidoo kale waa <a href=\"" + mw.util.getUrl("Wikipedia:Good_articles") + "\">maqaal wanaagsan<\/a>."
},
{
name: "ga",
className: "assess-ga-text",
text: "<a>Maqaal wanaagsan<\/a>",
url: mw.util.getUrl("Wikipedia:Good_articles")
},
{
name: "b",
className: "assess-b-text",
text: "Maqaal <a>heerka B ah<\/a>"
},
{
name: "bplus",
className: "assess-bplus-text",
text: "Maqaal <a>heerka B-plus ah<\/a>",
url: mw.util.getUrl("Wikipedia:WikiProject_Mathematics/Wikipedia_1.0/Grading_scheme")
},
{
name: "c",
className: "assess-c-text",
text: "Maqaal <a>heerka C ah<\/a>"
},
{
name: "start",
className: "assess-start-text",
text: "Maqaal <a>heerka billowga ah<\/a>"
},
{
name: "stub",
className: "assess-stub-text",
text: "Maqaal <a>faaqid ah (stub)<\/a>"
},
{
name: "al",
className: "assess-al-text",
text: "Liis <a>heerka A ah<\/a>",
url: mw.util.getUrl("Wikipedia:WikiProject_Military_history/Assessment") + "#SCALE" // Wuxuu isticmaali karaa xiriiriye guud haddii mid la heli karo
},
{
name: "bl",
className: "assess-bl-text",
text: "Liis <a>heerka B ah<\/a>",
url: mw.util.getUrl("Wikipedia:WikiProject_Military_history/Assessment") + "#SCALE"
},
{
name: "cl",
className: "assess-cl-text",
text: "Liis <a>heerka C ah<\/a>",
url: mw.util.getUrl("Wikipedia:WikiProject_Military_history/Assessment") + "#SCALE"
},
{
name: "sl",
className: "assess-sl-text",
text: "Liis <a>faaqid ah (stub)<\/a>"
},
{
name: "list",
className: "assess-list-text",
text: "Maqaal <a>nooca liiska ah<\/a>",
url: mw.util.getUrl("Wikipedia:Stand-alone lists")
},
{
name: "dab",
className: "assess-dab-text",
text: "<a>Bogga kala soocidda<\/a>",
url: mw.util.getUrl("Wikipedia:Disambiguation")
},
{
name: "setindex",
className: "assess-setindex-text",
text: "<a>Maqaal tusmada habaysan<\/a>",
url: mw.util.getUrl("Wikipedia:Set_index_articles")
},
{
name: "redir",
className: "assess-redir-text",
text: "<a>Bogga dib-u-jeedinta<\/a>",
url: mw.util.getUrl("Help:Redirect")
},
{
name: "fl",
className: "assess-fl-text",
text: "<a>Liis la soo bandhigay<\/a>",
url: mw.util.getUrl("Wikipedia:Featured_lists")
},
{
name: "fa",
className: "assess-fa-text",
text: "<a>Maqaal la soo bandhigay<\/a>",
url: mw.util.getUrl("Wikipedia:Featured_articles")
},
{
name: "cur",
className: "assess-cur-text",
text: "Maqaal <a>heerka dhacdooyinka hadda ah<\/a>",
url: mw.util.getUrl("Portal:Current_events")
},
{
name: "future",
className: "assess-future-text",
text: "Maqaal <a>heerka mustaqbalka ah<\/a>",
url: mw.util.getUrl("Category:Future-Class_articles")
}
];
$.each(ratingList, function (i, e) {
if (assess.rating === e.name) {
newClass = e.className;
slogan = $("<span>").html(e.text).children().attr({href: (e.url || assessLink)}).parent().html();
if (e.info) {
info.push(e.info);
}
return false;
}
});
if (!newClass) {
newClass = "assess-unassessed-text";
slogan = "Maqaal aan <a>la qiimayn<\/a>";
}
return {newClass: newClass, slogan: slogan, info: info};
};
/**
* Wuxuu abuuraa xadhig macluumaad ah oo ku salaysan macluumaadka qiimaynta iyo xiriiriyaha bogga.
*/
am.getExtraInfo = function (extra, pageLink) {
var info = [], page = mw.config.get("wgPageName"), typeList;
typeList = [
// Magacaabista iyo dib-u-eegisyada hadda
{
name: "fac",
html: "Hadda waa <a>musharax maqaal la soo bandhigay<\/a>.",
url: pageLink[0] || ("Wikipedia:Featured_article_candidates/" + page)
},
{
name: "flc",
html: "Hadda waa <a>musharax liis la soo bandhigay<\/a>.",
url: pageLink[0] || ("Wikipedia:Featured_list_candidates/" + page)
},
{
name: "gan",
html: "Hadda waa <a>musharax maqaal wanaagsan<\/a>.",
url: pageLink[0] || "Wikipedia:Good_article_nominations"
},
{
name: "far",
html: "Hadda waxaa lagu wadaa <a>dib-u-eegis</a> heerkiisa la soo bandhigay.",
url: pageLink[0] || ("Wikipedia:Featured_article_review/" + page)
},
{
name: "flrc",
html: "Hadda waa <a>musharax laga saarayo liiska la soo bandhigay<\/a>.",
url: pageLink[0] || ("Wikipedia:Featured_list_removal_candidates/" + page)
},
{
name: "gar",
html: "Hadda waxaa lagu wadaa <a>dib-u-qiimayn maqaal wanaagsan<\/a>.",
url: pageLink[0] || "Wikipedia:Good_article_reassessment",
wrapper: "<span id=\"assess-gar-link\"><\/span>"
},
// Heerarkii hore iyo magacaabistii hore
{
name: "ffa",
html: "<a>Maqaal la soo bandhigay</a> oo hore ahaa.",
url: pageLink[1] || ("Wikipedia:Featured_article_review/" + page)
},
{
name: "ffl",
html: "<a>Liis la soo bandhigay</a> oo hore ahaa.",
url: pageLink[1] || ("Wikipedia:Featured_list_removal_candidates/" + page)
},
{
name: "dga",
html: "Maqaal wanaagsan oo <a>laga saaray liiska</a>.",
url: pageLink[1] || "Wikipedia:Good_article_reassessment"
},
{
name: "ffac",
html: "Musharax <a>maqaal la soo bandhigay</a> oo hore ahaa.",
url: pageLink[1] || ("Wikipedia:Featured_article_candidates/" + page)
},
{
name: "fflc",
html: "Musharax <a>liis la soo bandhigay</a> oo hore ahaa.",
url: pageLink[1] || ("Wikipedia:Featured_list_candidates/" + page)
},
{
name: "fgan",
html: "Musharax <a>maqaal wanaagsan</a> oo hore ahaa.",
url: pageLink[1] || "Wikipedia:Good_article_nominations"
}
];
$.each(typeList, function (i, e) {
if (extra.indexOf(e.name) !== -1) {
info.push($("<span>").html(e.html).children().attr({href: mw.util.getUrl(e.url)})
.parent().wrapInner(e.wrapper || null).html());
}
});
return info;
};
/**
* Hel xiriiriyaha saxda ah ee dib-u-qiimaynta Maqaalka Wanaagsan. Waxyaabahani waxay u baahan yihiin
* codsi AJAX ah oo dheeraad ah si loo go'aamiyo inay tahay dib-u-qiimayn bulsho ama mid shakhsi ah.
* Khiyaanadu waa in loo qaato inay tahay dib-u-qiimayn bulsho, ka dibna
* la beddelo xiriiriyaha marka codsigu soo laabto haddii uusan dhab ahaantii ahayn.
* @param {String} articleName - magaca maqaalka la isticmaalayo
* @param {String} reviewNumber - lambarka GAR ee la raadinayo
*/
am.getGARLink = function (articleName, reviewNumber) {
var communityTitle = "Wikipedia:Good_article_reassessment\/" + articleName + "\/" + reviewNumber,
individualTitle = "Talk:" + articleName + "\/GA" + reviewNumber,
titlesList = [communityTitle, individualTitle],
api = new mw.Api();
api.get({
action: "query",
titles: titlesList.join("|"),
prop: "info",
format: "json"
}).done(function (data) {
var i, j, noCommunityAssessment,
query = data.query,
communityTitleNorm = titlesList[0],
individualTitleNorm = titlesList[1],
len = query.normalized.length,
garLink = $("#assess-gar-link a:first");
for (j = 0; j < len; j++) {
switch (query.normalized[j].from) {
case titlesList[0]:
communityTitleNorm = query.normalized[j].to;
break;
case titlesList[1]:
individualTitleNorm = query.normalized[j].to;
break;
}
}
noCommunityAssessment = false;
for (i = -1; i >= -2; i--) {
if (query.pages[i] && typeof query.pages[i].missing === "string") {
if (query.pages[i].title === individualTitleNorm) {
// Ma jiro qiimayn shakhsi ah, looma baahna in wax la beddelo.
return;
}
if (query.pages[i].title === communityTitleNorm) {
// Ma jiro qiimayn bulsho, markaa calaamadi.
noCommunityAssessment = true;
}
}
}
if (noCommunityAssessment && garLink.length) {
// Waxaa jira qiimayn shakhsi ah laakiin ma jiro qiimayn bulsho. Beddel xiriiriyaha.
garLink.attr("href", mw.util.getUrl(titlesList[1]));
}
});
return communityTitle;
};
/**
* Waxaa abuura qoraalka dib-u-eegista asxaabta ee ka yimid xadhig macluumaad ah, haddii dib-u-eegis asxaab ah la ogaaday horraantii.
*/
am.addPeerReview = function (peerReview, activeReview) {
var reviewText = null;
if (peerReview) {
reviewText = $("<div><span class=\"assess-info-review\">" +
(activeReview ? "Hadda waxaa lagu wadaa" : "Hore waxaa loogu sameeyay") + " <a>dib-u-eegis asxaab</a>.<\/span><\/div>");
reviewText.find("a").attr({href: mw.util.getUrl(peerReview)});
reviewText = reviewText.html(); // Ogow duubista div ee kor ku xusan.
}
return reviewText;
};
/**
* Wuxuu cusboonaysiiyaa madaxa maqaalka oo wata macluumaad qiimayn oo cusub iyadoo la siinayo fasal cusub
* (ee macluumaadka qaabka sida midabka) iyo beddelida tagline hoostiisa
* si loo sheego qiimaynta la helay.
*/
am.update = function () {
var info = ap.updata.info,
infoSpan = $("<span class=\"assess-info-all\"><\/span>"),
siteSub = $("<div><span class=\"assess-article-rating\"><\/span> ka Wikipedia, encyclopedia xorta ah<\/div>");
siteSub.children().html(ap.updata.slogan);
if (info && info.length > 0) {
infoSpan.html(".");
$.each(info, function (i, e) {
infoSpan.append(" ").append(e);
});
siteSub.append(infoSpan);
}
$("h1:first").addClass(ap.updata.newClass || null);
if ($("#siteSub").length) {
$("#siteSub").html(siteSub.html());
}
};
/**
* Wuxuu ka tirtirayaa dhammaan xubnaha HTML ee xadhiga la bixiyay.
*/
am.decodeEntities = function (str) {
var t = document.createElement("textarea");
t.innerHTML = str;
return t.value;
};
return assessmentObj;
}());
/**
* Wuxuu billaabayaa qoraalka marka boggu soo shubmo
*/
$(assessment.init);
ldtux75spyp79f7s0192x7xfwwz20m6
MediaWiki:Gadget-metadata.css
8
53872
311072
2026-10-25T16:05:56Z
Isma4l
41797
Abuuray
311072
css
text/css
/* This is a custom stylesheet that goes with the metadata script ([[User:Pyrospirit/metadata]]). */
.assess-article-rating {
font-style: italic;
}
.assess-info-all {
font-style: italic;
}
.assess-fa-text,
.assess-fl-text { color: #06c; }
.assess-a-text,
.assess-al-text { color: #29c; }
.assess-ga-text { color: #070; }
.assess-b-text,
.assess-bl-text { color: #6b0; }
.assess-c-text,
.assess-cl-text { color: #993; }
.assess-start-text { color: #b60; }
.assess-stub-text { color: #901; }
.assess-list-text { color: #85f; }
.assess-bplus { background-color: #6f6; }
.assess-bplus-text { color: #070; }
.assess-sl { background-color: #f66; }
.assess-sl-text { color: #901; }
.assess-dab,
.assess-setindex { background-color: #00fa9a; }
.assess-dab-text,
.assess-setindex-text { color: #0b6; }
.assess-cur { background-color: #d462ff; }
.assess-cur-text { color: #a4c; }
.assess-future { background-color: #8a95c9; }
.assess-future-text { color: #568; }
.assess-importance-top { background-color: #f0f; }
.assess-importance-high { background-color: #f8f; }
.assess-importance-mid { background-color: #fcf; }
.assess-importance-low { background-color: #fef; }
.firstHeading .editsection {
color: black;
}
/* Used to be in [[MediaWiki:Common.css]]. */
.assess-fa { background-color: #6699FF; }
.assess-fl { background-color: #6699FF; }
.assess-a { background-color: #66FFFF; }
.assess-ga { background-color: #66FF66; }
.assess-b { background-color: #B2FF66; }
.assess-c { background-color: #FFFF66; }
.assess-start { background-color: #FFAA66; }
.assess-stub { background-color: #FF6666; }
.assess-list { background-color: #AA88FF; }
qo219kh7pmfjoj5939eacfyw0iceqhc
MediaWiki:Gadget-metadata
8
53873
311073
2026-10-25T16:07:04Z
Isma4l
41797
/* */
311073
wikitext
text/x-wiki
Soo bandhig [[:en::Category:Wikipedia 1.0 assessments|qiimaynta]] tayada maqaalka ee madaxa boggiisa ([[:en:Wikipedia:Metadata gadget|dukumentiyada]])
nwby5tx8vtwctdxslt3ju6yc89x5s5p
MediaWiki:Gadget-topalert.js
8
53874
311074
2026-10-25T16:07:44Z
Isma4l
41797
Abuuray
311074
javascript
text/javascript
( function( $, mw ) {
$alert = '<div id="mw-echo-sliding-alert">';
$alert += '<div id="mw-echo-close-box"><img style="display: block;" src="//upload.wikimedia.org/wikipedia/commons/3/36/CloseWindow.svg"/></div>';
$alert += '<div id="mw-echo-alert-text">You have <a href="#" id="mw-echo-talk-link">new messages</a>. (<a href="#" id="mw-echo-talk-diff-link">view changes</a>)</div>';
$alert += '</div>';
$(document).ready(function() {
var newMsgRevisionId = mw.config.get( 'wgUserNewMsgRevisionId' );
if ( newMsgRevisionId ) {
var userName = mw.config.get( 'wgUserName' );
var talkLink = '/wiki/User_talk:' + userName + '?redirect=no';
var diffLink = '/w/index.php?title=User_talk:' + userName + '&oldid=' + newMsgRevisionId + '&diff=cur';
$( 'body' ).append( $alert );
$( '#mw-echo-close-box' ).click( function( e ) {
$( '#mw-echo-sliding-alert' ).hide();
e.preventDefault();
} );
$( 'a#mw-echo-talk-link' ).attr( 'href', talkLink );
$( 'a#mw-echo-talk-diff-link' ).attr( 'href', diffLink );
mw.config.set( 'echoNewMsgAlertDisplayed', true );
}
} );
} )( jQuery, mediaWiki );
4imw3nxovlrjq248b39q03djbnmcygi
MediaWiki:Gadget-topalert
8
53875
311075
2026-10-25T16:08:44Z
Isma4l
41797
/* */
311075
wikitext
text/x-wiki
Soo bandhig digniin sabbaysa oo ku saabsan farriimaha bogga wadahadalka ee cusub
21g1zkspgxjopy5ldaizup7rjxi9dhq
MediaWiki:Gadget-topalert.css
8
53876
311076
2026-10-25T16:09:13Z
Isma4l
41797
Abuuray
311076
css
text/css
#mw-echo-close-box {
float: right;
height: 17px;
width: 17px;
margin: 10px 13px 0 2px;
cursor: pointer;
}
#mw-echo-sliding-alert {
position: fixed;
top: 0.5em;
z-index: 200;
margin: 0 auto;
width: 355px;
left: 0;
right: 0;
padding: 0;
background-color: #FFD86E;
border-radius: 5px;
}
#mw-echo-alert-text {
margin: 0 3em 0 1.4em;
font-size: 13px;
font-weight: bold;
font-family: sans-serif;
line-height: 38px;
white-space: nowrap;
}
mkib3v1tl22t6kcv622nv41s38azgqw
MediaWiki:Gadget-NoSmallFonts.css
8
53877
311077
2026-10-25T16:09:47Z
Isma4l
41797
Abuuray
311077
css
text/css
/* _____________________________________________________________________________
* | |
* | === WARNING: GLOBAL GADGET FILE === |
* | Changes to this page affect many users. |
* | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. |
* |_____________________________________________________________________________|
*
* NoSmallFonts disables decreased font sizes of many known elements
* such as Infoboxes, Navboxes and References lists.
* Maintained by [[User:Edokter]].
*/
/* HTML elements */
sub,
sup,
small {
font-size: 92% !important;
}
/* shared CSS */
#sitesub,
td.diff-context,
td.diff-addedline,
td.diff-deletedline,
div.thumbinner,
.thumbcaption,
figure[typeof*='mw:File'] > figcaption,
.mw-broken-media,
.toccolors,
.toctoggle,
.mw-tag-markers,
div#mw-hidden-catlinks,
/* templates */
#coordinates,
.navbar,
.cquote,
.cquotecite,
.rquote,
.rquotecite,
.templatequote,
.templatequotecite,
.quotebox,
.quoteboxcite,
.reflist,
.refbegin,
.navbox,
/* common.css */
table.infobox,
table.mbox-small,
table.mbox-small-left,
ol.references {
font-size: 100% !important;
}
5yk226s8ro7iox9bilz6fx101krsx4z
MediaWiki:Gadget-NoSmallFonts
8
53878
311078
2026-10-25T16:10:31Z
Isma4l
41797
/* */
311078
wikitext
text/x-wiki
Dam cabirrada far waaweyn ee yar yar ee walxaha sida sanduuqyada macluumaadka, sanduuqyada hagidda iyo liisaska tixraaca
c5g98iqtkgod4qbbuz3r9n0pqp6dtij
311079
311078
2026-10-25T16:10:39Z
Isma4l
41797
/* */
311079
wikitext
text/x-wiki
Dami cabirrada far waaweyn ee yar yar ee walxaha sida sanduuqyada macluumaadka, sanduuqyada hagidda iyo liisaska tixraaca
0k4e1sba450hm5ei97ltuitsib5cl4q
MediaWiki:Gadget-disablesuggestions.js
8
53879
311080
2026-10-25T16:11:24Z
Isma4l
41797
Abuuray
311080
javascript
text/javascript
/* _____________________________________________________________________________
* | |
* | === WARNING: GLOBAL GADGET FILE === |
* | Changes to this page affect many users. |
* | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. |
* |_____________________________________________________________________________|
*
* Imported from version XXXX as of 01-03-2014 from [[User:Connor Behan/disablesuggest.js]]
* Disables suggestions dropdown of search fields
*/
mw.loader.using( 'mediawiki.searchSuggest', function () {
$(document).ready( function () {
$('#searchInput, #powerSearchText, #searchText, .mw-searchInput').off().attr('autocomplete', 'on');
$('#simpleSearch #searchButton').attr( {'name': 'fulltext', 'value': 'Search' } );
} );
} );
jsffrrqp8k4i6ep2vynnqad6cy9tuxj
MediaWiki:Gadget-disablesuggestions
8
53880
311081
2026-10-25T16:12:04Z
Isma4l
41797
/* */
311081
wikitext
text/x-wiki
Dami liisaska talooyinka hoos u dhaca ee goobaha raadinta
70hw3vvph7sgvdmm35tkx508pdqqwcg
MediaWiki:Gadget-NoAnimations.js
8
53881
311082
2026-10-25T16:12:40Z
Isma4l
41797
Abuuray
311082
javascript
text/javascript
/* turn off all jQuery animations */
$.fx.off = true;
1sut20wyyp2thg3lwxd3tyjwh7tu7yy
MediaWiki:Gadget-NoAnimations
8
53882
311083
2026-10-25T16:13:49Z
Isma4l
41797
/* */
311083
wikitext
text/x-wiki
Dami dhaqdhaqaaqyada interface-ka
npatn36l9uy6j9qjeoayfqeaje4rvh5
MediaWiki:Gadget-OldDiff.css
8
53883
311084
2026-10-25T16:14:26Z
Isma4l
41797
Abuuray
311084
css
text/css
/* _____________________________________________________________________________
* | |
* | === WARNING: GLOBAL GADGET FILE === |
* | Changes to this page affect many users. |
* | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. |
* |_____________________________________________________________________________|
*
* Display diffs with the old yellow/green colors and design.
*/
table.diff td {
padding: 0;
}
td.diff-marker {
color: black;
font-size: 1em;
font-weight: normal;
}
td.diff-context,
td.diff-deletedline,
td.diff-addedline {
border: none;
border-radius: 0;
}
td.diff-context {
background-color: #eee;
}
td.diff-deletedline {
background-color: #ffa;
}
td.diff-addedline {
background-color: #cfc;
}
td.diff-deletedline .diffchange,
td.diff-addedline .diffchange {
background: transparent;
color: red;
}
nwx50w8a5qhtza84zuchkw9h0fqiup8
MediaWiki:Gadget-OldDiff
8
53884
311085
2026-10-25T16:15:10Z
Isma4l
41797
/* */
311085
wikitext
text/x-wiki
Soo bandhig kala-duwanaanshaha midabada iyo naqshadda jaalaha iyo cagaarka ah ee hore
crb35lyvtzu9mdwaztptthxgaw4exiu
MediaWiki:Gadget-CommentsInLocalTime.js
8
53885
311086
2026-10-25T16:15:53Z
Isma4l
41797
A
311086
javascript
text/javascript
// _________________________________________________________________________________________
// | |
// | === WARNING: GLOBAL GADGET FILE === |
// | Changes to this page affect many users. |
// | Please discuss changes on the talk page or on [[Wikipedia_talk:Gadget]] before editing. |
// |_________________________________________________________________________________________|
//
// Imported from [[User:Gary/comments in local time.js]] (previously [[User:Gary King/localize comments.js]])
// This script changes timestamps such as those in comments to be relative to the local time. See [[Wikipedia:Comments in Local Time]]
mw.loader.load('https://en.wikipedia.org/w/index.php?title=User:Gary/comments_in_local_time.js&action=raw&ctype=text/javascript');
ngnbrjvr8p16n9f4lu482n8va9smgbj
MediaWiki:Gadget-CommentsInLocalTime
8
53886
311087
2026-10-25T16:16:54Z
Isma4l
41797
/* */
311087
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-user}}">(U)</abbr></sup> Ka beddel waqtiyada iyo taariikhaha ku saleysan UTC, sida kuwa lagu isticmaalo saxiixyada, inay noqdaan kuwo ku xiran waqti maxalli ah ([[:en:Wikipedia:Comments in Local Time|dukumentiyada]])
k6f4fosp4kjfbc8bq30r33hufvd2f3m
MediaWiki:Gadget-addsection-plus.js
8
53887
311088
2026-10-25T16:17:51Z
Isma4l
41797
Abuuray
311088
javascript
text/javascript
// **********************************************************************
// ** ***WARNING GLOBAL GADGET FILE*** **
// ** changes to this file affect many users. **
// ** please discuss on the talk page before editing **
// ** **
// **********************************************************************
$( function () {
var tab, tablink, skin;
tab = document.getElementById('ca-addsection');
if ( !tab ) {
return;
}
skin = mw.config.get( 'skin' );
tablink = tab.getElementsByTagName( skin === 'vector' || skin === 'vector-2022' ? 'span' : 'a' )[skin === 'vector-2022' ? 1 : 0];
if ( !tablink ) {
return;
}
if ( skin === 'vector-2022' ){
tablink.remove();
return;
}
if ( tablink.firstChild ) {
tablink.firstChild.nodeValue = '+';
}
if ( skin === 'monobook' ) {
tablink.style.paddingLeft = ".4em";
tablink.style.paddingRight = ".4em";
}
});
b4hd824h464kabr5axivv9z5qm86qs2
MediaWiki:Gadget-addsection-plus
8
53888
311089
2026-10-25T16:18:35Z
Isma4l
41797
/* */
311089
wikitext
text/x-wiki
Ku beddel qoraalka tabka "qayb cusub" calaamadda "+"
dxzttalgv346jndqfxa9uxb0j03lsm6
MediaWiki:Gadget-CategoryAboveAll.js
8
53889
311090
2026-10-25T16:19:29Z
Isma4l
41797
Abuuray
311090
javascript
text/javascript
//* by [[Commons:User:Ianezz|Ianezz]] ([[Commons:Commons:Village_pump/Archive/2009Sep#CSS_placement_of_categories]]), based on [[:wikinews:Help:User_style#Moving_categories_to_top]]
$( function catsattop() {
if ( mw.config.get( 'wgCanonicalNamespace' ) === 'Special') {
return;
}
var cats = document.getElementById('catlinks');
var bc = document.getElementById('bodyContent');
bc.insertBefore(cats, bc.childNodes[0]);
} );
pa0gfdnc94y8gj3zcmwvkc2t5xo3jq1
MediaWiki:Gadget-CategoryAboveAll
8
53890
311091
2026-10-25T16:20:10Z
Isma4l
41797
/* */
311091
wikitext
text/x-wiki
U daji sanduuqa qaybta dusha sare ee dhammaan waxyaabaha kale
dm15nqdkg1pz7god1oia1iuo8d09ys9
MediaWiki:Gadget-dropdown-menus-pagestyles.css
8
53891
311092
2026-10-25T16:20:52Z
Isma4l
41797
Abuuray
311092
css
text/css
/*********************************************************************
** ***WARNING: GLOBAL GADGET FILE*** **
** any changes to this file will affect many users **
** please discuss changes on the talk page or at **
** [[Wikipedia talk:Gadget]] before editing **
** (consider dropping the script author a note as well...) **
**********************************************************************
** Script: MoreMenu **
** Author: MusikAnimal **
** Documentation: [[meta:MoreMenu]] **
*********************************************************************/
/*** VECTOR ***/
/* User menu */
.client-js .skin-vector:not(.skin-vector-2022).ns-2 #p-views,
.client-js .skin-vector:not(.skin-vector-2022).ns-3 #p-views,
.client-js > .skin-vector:not(.skin-vector-2022).mw-special-Contributions #p-views,
.client-js > .skin-vector:not(.skin-vector-2022).mw-special-DeletedContributions #p-views,
.client-js > .skin-vector:not(.skin-vector-2022).mw-special-Block #p-views {
padding-right: 3.68em;
}
/* Page menu */
.client-js .skin-vector:not(.skin-vector-2022):not(.ns-special) #p-views .vector-menu-content::after {
content: '';
display: inline-block;
width: 3.85em;
}
o1ijz31ddwzl2ez6zi16j6z15v2rt56
MediaWiki:Gadget-dropdown-menus-pagestyles
8
53892
311093
2026-10-25T16:21:38Z
Isma4l
41797
/* */
311093
wikitext
text/x-wiki
Qaybaha qalabka [[m:MoreMenu|MoreMenu]]
02l7po1op3t66z5v3o0my9h6ib6crw0
MediaWiki:Gadget-MoreMenu.enwiki.js
8
53893
311094
2026-10-25T16:22:46Z
Isma4l
41797
Abuuray
311094
javascript
text/javascript
/**
* DIGRIIN: FAYLKA GADGET-KA CAALAMIGA AH
*
* Kordhinta Enwiki ee MoreMenu. Marka ay khuseyso, tani waxay ku dareysaa xiriiriyeyaasha soo socda:
*
* Isticmaale
* - Falanqeyn / Wax-ka-beddellada BLP
* - Falanqeyn / Tirakoobka AfD
* - Codsiyada maamulnimo iyo kuwo kale (RfXs)…
*
* Bog
* - Tirtiridda Maqaallada (AfDs)
* - Tirtiridda Qoraallada Kale (MfDs)
*
* Eeg [[meta:MoreMenu#Customization]] wixii macluumaad dheeraad ah ee ku saabsan ballaarinta MoreMenu.
*/
$(function () {
/**
* Raadi oo ku dar xiriiriyeyaasha codsiyada maamulnimo, buuroqraatiyad, kiisaska garsoorka, iwm.
* @param {mw.Api} api
* @param {Object} config
*/
function addRfXs(api, config) {
var rfxs = {
'Wikipedia:Requests for adminship': 'rfa',
'Wikipedia:Requests for bureaucratship': 'rfb',
'Wikipedia:Arbitration/Requests/Case': 'rfarb',
'Wikipedia:Requests for comment': 'rfc',
'Wikipedia:Requests for checkuser': 'rfcu',
'Wikipedia:Requests for checkuser/Case': 'rfcuc',
'Wikipedia:Requests for oversight': 'rfo',
'Wikipedia:Contributor copyright investigations': 'cci',
'Wikipedia:Sockpuppet investigations': 'spi',
'Wikipedia:Bots/Requests for approval': 'brfa',
'Wikipedia:Administrator recall': 'adrc'
};
$.extend(MoreMenu.messages, {
rfa: 'Cod. Maamul',
rfb: 'Cod. Buuroqraati',
rfarb: 'Garsoorka',
rfc: 'Faallooyinka',
rfcu: 'Hubinta Isticmaalaha',
rfcuc: 'Kiisaska Hubinta',
rfo: 'Kormeerka',
cci: 'Baaritaanka Xuquuqda',
spi: 'Baaritaanka Argagixiso-gacmeedyada',
brfa: 'Codsiyada Bot-ka',
adrc: 'Xusuus-celinta Maamulka'
});
var links = {};
api.get({
titles: Object.keys(rfxs).map(function (rfx) {
return rfx + '/' + config.targetUser.name;
}).join('|'),
formatversion: 2
}).done(function (data) {
data.query.pages.forEach(function (page) {
if (!page.missing) {
var key = rfxs[page.title.replace('/' + config.targetUser.name, '')];
links[key] = {
url: mw.util.getUrl('Special:PrefixIndex/' + page.title)
};
}
});
if (Object.keys(links).length) {
MoreMenu.addSubmenu('user', 'Codsiyada', links, 'analysis');
}
});
}
/**
* Raadi oo ku dar xiriiriye ku aaddan Special:PrefixIndex ee AfDs ama XfDs.
* @param {mw.Api} api
* @param {Object} config
*/
function addXfD(api, config) {
api.get({
titles: [
'Wikipedia:Articles for deletion/' + config.page.name,
'Wikipedia:Miscellany for deletion/' + config.page.name
].join('|'),
prop: 'info',
formatversion: 2
}).done(function (data) {
data.query.pages.some(function (page) {
if (page.missing) {
return false;
}
var link = mw.util.getUrl('Special:PrefixIndex/' + page.title);
switch (page.title.split('/')[0]) {
case 'Wikipedia:Miscellany for deletion':
return MoreMenu.addLink('page', 'Tirtiridda Qoraallada Kale', link);
case 'Wikipedia:Articles for deletion':
return MoreMenu.addLink('page', 'Tirtiridda Maqaallada', link);
default:
return false;
}
});
});
}
mw.hook('moremenu.ready').add(function (config) {
var api = new mw.Api();
if (config.targetUser.name && !config.targetUser.ipRange) {
addRfXs(api, config);
}
if (config.page.name) {
addXfD(api, config);
}
// Ku dar xiriiriyaha wax-ka-beddellada BLP ee menu-ga 'Falanqeyn'.
if (!config.targetUser.ipRange) {
MoreMenu.addSubmenuLink('user', 'analysis', 'Wax-ka-beddellada BLP', 'https://xtools.wmflabs.org/categoryedits/' + config.project.domain + '/' + config.targetUser.encodedName + '/Living people');
// Ku dar xiriiriyaha tirakoobka AfD.
MoreMenu.addSubmenuLink('user', 'analysis', 'Tirakoobka AfD', 'https://afdstats.toolforge.org/afdstats.py?name=' + config.targetUser.encodedName, 'analysis-xtools');
}
});
});
1ygizj12596p56jkeiforlu5ln4j5wh
MediaWiki:Gadget-dropdown-menus.js
8
53894
311095
2026-10-25T16:23:19Z
Isma4l
41797
Abuuray
311095
javascript
text/javascript
/*********************************************************************
** ***WARNING: GLOBAL GADGET FILE*** **
** any changes to this file will affect many users **
** please discuss changes on the talk page or at **
** [[Wikipedia talk:Gadget]] before editing **
** (consider dropping the script author a note as well...) **
** **
**********************************************************************
** Script: MoreMenu **
** Author: MusikAnimal **
** Documentation: [[meta:MoreMenu]] **
*********************************************************************/
mw.loader.load('https://meta.wikimedia.org/w/load.php?modules=ext.gadget.MoreMenu');
00hi01moh046ectz4md6hyysxl0upc3
MediaWiki:Gadget-dropdown-menus
8
53895
311096
2026-10-25T16:24:04Z
Isma4l
41797
/* */
311096
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-sister}}">(S)</abbr></sup> [[Meta:MoreMenu|MoreMenu]]: ku dar liisaska hoos-u-dhaca ee Bogga iyo Isticmaalaha qalabka hawsha adoo ku daraya xiriiriyeyaasha hawlaha caadiga ah, qalabka falanqaynta iyo diiwaannada
0mg5tgvfvlirab71f7rlnk2darbjxu7
MediaWiki:Gadget-Vivarium
8
53896
311097
2026-10-25T16:25:54Z
Isma4l
41797
/* */
311097
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-default}}">(D)</abbr></sup> Vivarium: awood u yeel howlaha la isla dhex-galo ee tusmada {{t|Conway's Game of Life gadget}}
j6rdbyhya0qm4257sbxnnfj2x4ac50w
Template:Conway's Game of Life gadget
10
53897
311098
2026-10-25T16:26:24Z
Isma4l
41797
/* */
311098
wikitext
text/x-wiki
<includeonly><div class="Vivarium"
data-autoplay = "{{{autoplay|}}}"
data-width = "{{{width|}}}"
data-height = "{{{height|}}}"
data-zoom = "{{{zoom|}}}"
data-grid = "{{{grid|}}}"
data-cells = "{{{cells|0,0; 0,1; 0,-1; -1,0; 1,1}}}"
>{{{fallback|[[File:Gospers glider gun.gif]]}}}</div>[[Category:Pages using gadget Vivarium]]</includeonly><noinclude>
{{Documentation}}
</noinclude>
g9sc04kvprsf493b9hq7wcn2mfodxoj
MediaWiki:Gadget-HotCat.js
8
53898
311099
2026-10-25T16:28:06Z
Isma4l
41797
Abuuray
311099
javascript
text/javascript
window.hotcat_translations_from_commons = true;
/*
This imports the latest version of HotCat from Commons.
HotCat is a gadget to make changes to categories much easier.
Full documentation can be found at http://commons.wikimedia.org/wiki/Help:Gadget-HotCat
*/
mw.loader.load( '//commons.wikimedia.org/w/index.php?title=MediaWiki:Gadget-HotCat.js&action=raw&ctype=text/javascript' );
050rn29344h01x3e9o7x0k5vcs4cj2v
MediaWiki:Gadget-HotCat
8
53899
311100
2026-10-25T16:29:01Z
Isma4l
41797
/* */
311100
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-sister}}">(S)</abbr></sup> [[:en:WP:HOTCAT|HotCat]]: si fudud ugu dar, uga saar, oo uga beddel qaybaha bogga, iyadoo wadata talooyin magac ah ([[:File:HotCat.png|tusaale]])
m3roqjc7y5h0q3811px9hyip0mqof0x
MediaWiki:Gadget-wikEdDiff.js
8
53900
311101
2026-10-25T16:29:37Z
Isma4l
41797
Abuuray
311101
javascript
text/javascript
// _________________________________________________________________________________________
// | |
// | === WARNING: GLOBAL GADGET FILE === |
// | Changes to this page affect many users. |
// | Please discuss changes on the talk page or on [[Wikipedia_talk:Gadget]] before editing. |
// |_________________________________________________________________________________________|
//
// Imports [[User:Cacycle/wikEdDiff.js]]
// an improved diff view for article revisions, see [[User:Cacycle/wikEdDiff]] for details
mw.loader.load( '/w/index.php?title=User:Cacycle/wikEdDiff.js&action=raw&ctype=text/javascript' );
ap5s0tcb6fj2edzdh146dtx1rwss390
311102
311101
2026-10-25T16:31:19Z
Isma4l
41797
311102
javascript
text/javascript
// _________________________________________________________________________________________
// | |
// | === WARNING: GLOBAL GADGET FILE === |
// | Changes to this page affect many users. |
// | Please discuss changes on the talk page or on [[Wikipedia_talk:Gadget]] before editing. |
// |_________________________________________________________________________________________|
//
// Imports [[User:Cacycle/wikEdDiff.js]]
// an improved diff view for article revisions, see [[User:Cacycle/wikEdDiff]] for details
mw.loader.load( 'https://en.wikipedia.org/w/index.php?title=User:Cacycle/wikEdDiff.js&action=raw&ctype=text/javascript' );
gay1gofyy6wzrvyiw8423l0l9v9ok3v
MediaWiki:Gadget-wikEdDiff
8
53901
311103
2026-10-25T16:33:05Z
Isma4l
41797
Bog cusub: <sup><abbr title="{{int:gadgets-user}}">(U)</abbr></sup> [[:en:User:Cacycle/wikEdDiff|wikEdDiff]]: muuqaal kala-duwanaansho oo la hagaajiyay oo dhex maraya noocyada maqaalka (looma baahna haddii la isticmaalo [[:en:User:Cacycle/wikEd|wikEd]])
311103
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-user}}">(U)</abbr></sup> [[:en:User:Cacycle/wikEdDiff|wikEdDiff]]: muuqaal kala-duwanaansho oo la hagaajiyay oo dhex maraya noocyada maqaalka (looma baahna haddii la isticmaalo [[:en:User:Cacycle/wikEd|wikEd]])
hvc2ns89xtgdacd0x1kmgrfoazi62xp
MediaWiki:Gadget-ProveIt-classic.js
8
53902
311104
2026-10-25T16:37:22Z
Isma4l
41797
Abuuray
311104
javascript
text/javascript
/* _____________________________________________________________________________
* | |
* | === DIGRIIN: FAYLKA GADGET-KA CAALAMIGA AH === |
* | Isbeddellada faylkan waxay saameeyaan isticmaaleyaal badan. |
* | Fadlan kala hadal isbeddellada bogga wadahadalka ama [[WT:Gadget]] ka hor inta aadan wax ka beddelin.|
* |_____________________________________________________________________________|
*/
// <nowiki>
/*
* Waxaa laga soo dejiyay Git commit 72b9abf17fe33ab8af55a7cfb074a9beb35365ab laga bilaabo 2015-03-09 laga soo bilaabo https://github.com/proveit-js/proveit
* Isbeddellada waa in lagu sameeyaa mashruuca GitHub ee halkaas ah.
*/
/*
* ProveIt ([[User:ProveIt GT]]) waa qalab GUI oo xoog badan oo loogu talagalay in lagu arko, lagu daro, loona beddelo, loona geliyo tixraacyada Wikipedia.
*
* Xuquuqda daabacaadda 2008 - 2011
*
* Georgia Tech Research Corporation
*
* Atlanta, GA 30332-0415
*
* Xuquuqda daabacaadda 2011 -
*
* Matthew Flaschen
*
* XUQUUQDA DHAMMAAN WAA LA DHAWAYNAYAA
*
* ProveIt waxaa lagu heli karaa iyada oo la raacayo Shatiga Dokumentiyada Xorta ah ee GNU (GFDL-1.3.txt), Shatiga Creative Commons
* Attribution/Share-Alike License 3.0 (http://creativecommons.org/licenses/by-sa/3.0/), iyo Shatiga Guud ee Dadweynaha GNU 2 (GPL-2.txt)
*
* Waxaa ku jira astaamo laga soo qaatay xirmada Silk (http://www.famfamfam.com/lab/icons/silk/), oo uu leeyahay Mark James, lana isticmaalay iyada oo la raacayo
* Shatiga Creative Commons Attribution 3.0.
*/
/**
* Bulshooyinka Barashada Elektroniga ah
* @module elc
*/
( function ( mw, $ ) {
/*
Halbeegga labaad (sheyga proveit ee horay u jiray, haddii uu jiro) ee loo gudbiyay kordhinta ayaa ka sarreeya kan koowaad.
Wuxuu siinayaa isticmaaleyaasha ikhtiyaarka ah inay si fudud uga gudbaan xarumaha bilowga ah, sida shouldAddSummary.
Haddii proveit si lama filaan ah looga soo dejiyo wax ka badan hal jeer, soo dejinta koowaad ayaa mudnaan yeelan doonta.
*/
/**
* Fasalka ugu weyn iyo meesha magaca ee barnaamijka ProveIt. Tani waa keligii doorsoomaha caalamiga ah.
* @class proveit
*/
var proveit = window.proveit = $.extend({
/**
* Qiyaastii kala bar dhererka sanduuqa wax-ka-beddelka. Waxaa lagu isticmaalaa duubista marka la muujinayo qoraalka.
* @type Number
*/
HALF_EDIT_BOX_HEIGHT: 200,
// Tani waxay noqon kartaa mid ay maamusho doorbididda, halkii ay ka ahaan lahayd mid adag (hard-coded).
/**
* Luqadda loo isticmaalo sharaxaadaha
* @type String
*/
LANG: "en",
/**
* Qoraalka ka hor magaca cabbirka (tusaale url, cinwaan, iwm.) ee sanduuqa abuurista, si looga fogaado isku dhacyada aqoonsiyada aan la xiriirin.
* @type String
*/
NEW_PARAM_PREFIX: "newparam",
/**
* Qoraalka ka hor magaca cabbirka (tusaale url, cinwaan, iwm.) ee sanduuqa wax-ka-beddelka, si looga fogaado isku dhacyada aqoonsiyada aan la xiriirin.
* @type String
*/
EDIT_PARAM_PREFIX: "editparam",
GUI_ID: "proveit",
/* Waxaa loo isticmaalaa in lagu dhex miiro furayaasha, oo ay ku jiraan magacyada cabbirka tixraaca, iyo qoraalka ay akhriyi karaan dadku. Waxaa loo tarjumi karaa
* si fudud. Ku dar sharaxaadaha.xx , halkaasoo xx ay tahay
* lambarka ISO 639-1 ee luqadda, ka dibna deji proveit.LANG "xx"
* si aad u isticmaasho sharaxaadaha cusub.
*/
descriptions :
{
en :
{
agency: "Wakaaladda",
name: "Magaca",
author: "Qoraha (Magaca Dambe, Magaca Koowaad)",
author2: "Qoraha labaad (Magaca Dambe, Magaca Koowaad)",
author3: "Qoraha saddexaad (Magaca Dambe, Magaca Koowaad)",
author4: "Qoraha afraad (Magaca Dambe, Magaca Koowaad)",
author5: "Qoraha shanaad (Magaca Dambe, Magaca Koowaad)",
author6: "Qoraha lixaad (Magaca Dambe, Magaca Koowaad)",
author7: "Qoraha toddobaad (Magaca Dambe, Magaca Koowaad)",
author8: "Qoraha siddeedaad (Magaca Dambe, Magaca Koowaad)",
author9: "Qoraha sagaalaad (Magaca Dambe, Magaca Koowaad)",
last: "Magaca dambe",
last2: "Magaca dambe (qor. labaad)",
last3: "Magaca dambe (qor. saddexaad)",
last4: "Magaca dambe (qor. afraad)",
last5: "Magaca dambe (qor. shanaad)",
last6: "Magaca dambe (qor. lixaad)",
last7: "Magaca dambe (qor. toddobaad)",
last8: "Magaca dambe (qor. siddeedaad)",
last9: "Magaca dambe (qor. sagaalaad)",
first: "Magaca koowaad",
first2: "Magaca koowaad (qor. labaad)",
first3: "Magaca koowaad (qor. saddexaad)",
first4: "Magaca koowaad (qor. afraad)",
first5: "Magaca koowaad (qor. shanaad)",
first6: "Magaca koowaad (qor. lixaad)",
first7: "Magaca koowaad (qor. toddobaad)",
first8: "Magaca koowaad (qor. siddeedaad)",
first9: "Magaca koowaad (qor. sagaalaad)",
authorlink: "Magaca maqaalka qoraha",
title: "Cinwaanka",
trans_title: "Cinwaanka Ingiriisi",
publisher: "Daabacaha",
year: "Sanadka",
location: "Goobta",
place: "Goobta shaqada",
isbn: "ISBN",
id: "Aqoonsiga (ID)",
doi: "DOI",
page: "Bogga",
pages:رځ "Bogagga",
quote: "Oraahda",
month: "Bisha",
journal: "Joornaalka",
edition: "Daabacaadda",
volume: "Tilmaanta mugga",
issue: "Tirada",
url: "URL",
date: "Taariikhda daabacaadda",
accessdate: "Taariikhda la helay",
coauthors: "Wadajir u qorayaasha",
booktitle: "Cinwaanka Kulamada",
contribution: "Tabarruca/Cutubka",
encyclopedia: "Encyclopaedia",
newsgroup: "Kooxda wararka",
version: "Nooca",
site: "Goobta",
newspaper: "Wargeyska",
"publication-place": "Goobta daabacaadda",
editor: "Tifaftiraha (Magaca Dambe, Magaca Koowaad)",
article: "Maqaalka",
pubplace: "Goobta daabacaha",
pubyear: "Sanadka daabacaadda",
inventor: "Hal-abuuraha (Magaca Dambe, Magaca Koowaad)",
"issue-date": "Taariikhda la soo saaray",
"patent-number": "Lambarka ruqsad-abuurka (Patent)",
"country-code": "Summadda dalka (XX)",
work: "Shaqada",
format: "Qaabka",
issn: "ISSN",
pmid: "PMID",
chapter: "Cutubka",
web: "Shabakadda",
book: "Buugga",
conference: "Shirka",
news: "Warka",
paper: "Warqadda",
"press release": "War-saxaafadeedka",
interview: "Wareysiga",
"AV media": "Shaqada maqalka iyo muuqaalka",
subject: "Muducda",
subjectlink: "Magaca maqaalka mawduuca",
subject2: "Mawduuca labaad",
subjectlink2: "Magaca maqaalka mawduuca labaad",
subject3: "Mawduuca saddexaad",
subjectlink3: "Magaca maqaalka mawduuca saddexaad",
subject4: "Mawduuca afraad",
interviewer: "Wareystaha",
cointerviewers: "Wada-wareystayaasha",
type: "Nooca",
program: "Barnaamijka",
callsign: "Calaamadda wicitaanka",
city: "Magaalada",
archiveurl: "URL-ka kaydka",
archivedate: "Taariikhda la kaydiyay",
episode: "Qaybta (Episode)",
episodelink: "Magaca maqaalka qaybta",
series: "Taxanaha",
serieslink: "Magaca maqaalka taxanaha",
credits: "Abaalmarinnada/Aqoonsiga hawlwadeennada",
network: "Shabakadda",
station: "Istishanka",
airdate: "Taariikhda la baahiyay",
began: "Taariikhda billowga",
ended: "Taariikhda dhammaadka",
season: "Lambarka xilli-ciyaareedka (Season)",
seriesno: "Lambarka xilli-ciyaareedka",
number: "Lambarka",
minutes: "Daqiiqadaha",
transcript: "Qoraalka codka la rogay (Transcript)",
transcripturl: "URL-ka qoraalka codka la rogay",
people: "Dadka",
medium: "Dhexdhexaadinta wax-soosaarka",
language: "Luqadda",
time: "Waqtiga",
oclc: "OCLC",
ref: "Aqoonsiga barroosinka (Anchor ID)",
deadurl: 'URL dhintay?',
raw: 'Qaab aan la aqoon'
},
// Turjumaadda Finnishka waxaa qoray Olli (ollinpostit at gmail.com)
fi: {
agency: "Edustaja",
name: "Nimi",
author: "Tekijä",
author2: "Tekijä kaksi",
author3: "Tekijä kolme",
author4: "Tekijä neljä",
author5: "Tekijä viisi",
author6: "Tekijä kuusi",
author7: "Tekijä seitsemän",
author8: "Tekijä kahdeksan",
author9: "Tekijä yhdeksän",
last: "Sukunimi",
last2: "Sukunimi (tekijä 2)",
last3: "Sukunimi (tekijä 3)",
last4: "Sukunimi (tekijä 4)",
last5: "Sukunimi (tekijä 5)",
last6: "Sukunimi (tekijä 6)",
last7: "Sukunimi (tekijä 7)",
last8: "Sukunimi (tekijä 8)",
last9: "Sukunimi (tekijä 9)",
first: "Etunimi",
first2: "Etunimi (tekijä 2)",
first3: "Etunimi (tekijä 3)",
first4: "Etunimi (tekijä 4)",
first5: "Etunimi (tekijä 5)",
first6: "Etunimi (tekijä 6)",
first7: "Etunimi (tekijä 7)",
first8: "Etunimi (tekijä 8)",
first9: "Etunimi (tekijä 9)",
authorlink: "Tekijästä kertova sivu",
title: "Otsikko",
publisher: "Julkaisija",
year: "Vuosi",
location: "Paikka",
place: "Työn paikka",
isbn: "ISBN",
id: "ID",
doi: "DOI",
page: "Sivu",
pages: "Sivuja",
quote: "Lainaus",
month: "Kuukausi",
journal: "Aikakauslehti",
edition: "Painos",
volume: "Vuosikerta",
issue: "Numero",
url: "Osoite",
date: "Julkaisupäivä",
accessdate: "Luettu",
coauthors: "Muut tekijät",
booktitle: "Jatko-osien otsikko",
contribution: "Osallistuminen/yhteistyö",
encyclopedia: "Tietosanakirja",
newsgroup: "Uutisryhmä",
version: "Versio",
site: "Sivusto",
newspaper: "Sanomalehti",
"publication-place": "Julkaisupaikka",
editor: "Toimittaja",
article: "Artikkeli",
pubplace: "Julkaisijan paikka",
pubyear: "Julkaisuvuosi",
inventor: "Keksijä",
"issue-date": "Saatavilla päivänä",
"patent-number": "Patenttinumero",
"country-code": "Maakoodi (XX)",
work: "Työ",
format: "Muoto",
issn: "ISSN",
pmid: "PMID",
chapter: "Luku",
web: "Verkko",
book: "Kirja",
conference: "Kokous",
news: "Uutiset",
paper: "Lehti",
"press release": "Lehdistötiedote",
interview: "Haastattelu",
subject: "Otsikko",
subjectlink: "Artikkelin otsikko",
subject2: "Otsikko kaksi",
subjectlink2: "Artikkelin kaksi otsikko",
subject3: "Otsikko kolme",
subjectlink3: "Artikkelin kolme otsikko",
subject4: "Otsikko neljä",
interviewer: "Haastattelija",
cointerviewers: "Muut haastattelijat",
type: "Tyyppi",
program: "Ohjelma",
callsign: "Call sign",
city: "Kaupunki",
archiveurl: "Arkiston osoite",
archivedate: "Arkistointipäivämäärä",
episode: "Jakso",
episodelink: "Jakson sivun nimi",
series: "Sarja",
serieslink: "Sarjan sivun nimi",
credits: "Tekijät",
network: "Verkko",
station: "Asema",
airdate: "Lähetyspäivä",
began: "Aloituspäivä",
ended: "Lopetuspäivä",
season: "Kauden numero",
seriesno: "Kauden numero",
number: "Numero",
minutes: "Minuutit",
transcript: "Puhtaaksi kirjoitettu teksti",
transcripturl: "Puhtaaksikirjoitetun osoite",
video: "Video",
people: "Ihmiset",
medium: "Tuotantomedia",
language: "Kieli",
time: "Aika",
oclc: "OCLC",
ref: "Ankkurin ID-tunnus"
}
},
/**
* Doorashada ikhtiyaariga ah si loo cayimo qaabka taariikhda caadiga ah ee tixraacyada cusub.
* Haddii la dejiyo, waxay ka sarreysaa doorbididda taariikhda guud ee ka timid Special:Preferences.
*
* @type {String} xadhigga qaabka taariikhda ee la taageero
*/
dateFormatString: null,
/**
* Singleton loo isticmaalo in lagu qaabeeyo taariikhaha iyadoo la raacayo doorbididda isticmaalaha
*
* @type DateFormatter
*/
dateFormatter: null,
/**
* Wuxuu helayaa doorbididda waxtarka leh ee qaabka taariikhda. Haddii aaysan jirin doorbidid gaar u ah ProveIt
* oo hore u joogtay proveit.dateFormatString, waxay go'aamin doontaa doorbididda saxda ah
* oo ka timid doorbididda isticmaalaha MW. Kadib, waxay kaydin doontaa qiimahaas proveit.dateFormatString
*
* @return {String} qaabka xadhigga ee loo isticmaalo taariikhaha
*/
getDatePreference: function () {
if (this.dateFormatString === null) {
this.dateFormatString = mw.user.options.get('date');
}
return this.dateFormatString;
},
/**
* Wuxuu soo celinayaa sharaxaadaha luqadda hadda.
* @return {Object} sharaxaadaha
*/
getDescriptions: function()
{
// Tani waxay noqon kartaa mid gaar u ah Cite haddii loo baahdo.
return this.descriptions[proveit.LANG];
},
/**
* Qoraalka lagu daray diiwaannada si loo fududeeyo raadinta
* @type String
*/
LOG_MARKER: "[ProveIt] ",
/**
* Shaqada diiwaangelinta fudud
* @type {...Object} var_args walxaha (oo ay ku jiraan xadhigaha) ee la diiwaangelinayo
*/
log: function()
{
var args = Array.prototype.slice.call(arguments);
args.unshift(this.LOG_MARKER);
mw.log.apply(mw, args);
},
/**
* Diiwaangeliso shayga qaladka haddii ay suurtagal tahay, iyadoo la isticmaalayo qalad (oo la door bido), ama diiwaan, haddii la heli karo.
* @param {Error} ex shayga qaladka
*/
logException: function(ex)
{
var args = [ex, ex.stack];
if(typeof(console) === "object" && $.isFunction(console.error))
{
args.unshift(this.LOG_MARKER);
console.error.apply(null, args);
}
else
{
this.log.apply(this, args);
}
},
/**
* Wuxuu soo celinayaa run haddii boggu leeyahay sanduuqa wax-ka-beddelka wikitext
*
* @return {Boolean} run haddii boggu leeyahay sanduuqa wax-ka-beddelka wikitext, beenta haddii kale
*/
isEditPage: function()
{
var contentModel = mw.config.get( 'wgPageContentModel' ),
action = mw.config.get( 'wgAction' );
return contentModel === 'wikitext' && ( action === 'edit' || action === 'submit' );
},
/**
* Wuxuu soo celinayaa run haddii boggu ay u badan tahay inuu ka kooban yahay tixraacyo
* @return {Boolean} run haddii boggu la taageero, beenta haddii kale
*/
isSupportedPage: function()
{
var namespace = mw.config.get( 'wgCanonicalNamespace' ),
pageName = mw.config.get( 'wgPageName' );
// Maqaal "caadi ah", meesha isticmaalaha, ama Wikipedia:Sandbox (ka reebitaan tijaabo ah).
return ( namespace === '' || namespace === 'User' || pageName === 'Wikipedia:Sandbox');
},
/**
* Shaqada fududeynta. Waxaa la soo celinayaa curiyaha sanduuqa tixraaca (refbox).
* @return {$Node} sanduuqa tixraaca
*/
getReferenceBox: function()
{
return $("#refs");
},
/**
* Waxay bixisaa leexashada x (bidix) iyo y (kor) ee curiyaha la bixiyay. Laga soo qaatay QuirksMode (http://www.quirksmode.org/js/findpos.html), oo ah bog si xor ah loo heli karo oo uu leeyahay Peter-Paul Koch
* @param {Node} node kasta oo HTML node ah
* @return {Object} leexashada node-ka, oo ah shay leh sifooyinka bidix iyo kor (left and top).
*/
getPosition: function(node)
{
var left = 0, top = 0;
do
{
left += node.offsetLeft;
top += node.offsetTop;
} while (node = node.offsetParent);
return {"left": left, "top": top};
},
/**
* Wuxuu muujinayaa dherer gaar ah oo qoraal ah, oo ku yaal tusmo gaar ah.
* @param {Number} startInd tusmada bilowga ah ee sanduuqa wax-ka-beddelka Wikipedia
* @param {Number} length dhererka xadhigga la muujinayo
* @return {Boolean} had iyo jeer waa run
*/
highlightLengthAtIndex: function(startInd, length)
{
if(startInd < 0 || length < 0)
{
this.log("highlightStringAtIndex: doodaha taban ee aan saxda ahayn");
}
var box = this.getTextbox();
var origText = box.value;
var editTop = this.getPosition(box).top;
box.value = origText.substring(0, startInd);
box.focus();
box.scrollTop = 1000000; // Ka weyn sanduuq kasta oo dhab ah (rajo ahaan)
var curScrollTop = box.scrollTop;
box.value += origText.substring(startInd);
if(curScrollTop > 0)
{
box.scrollTop = curScrollTop + this.HALF_EDIT_BOX_HEIGHT;
}
$(box).focus().textSelection('setSelection',
{
start: startInd,
end: startInd + length
});
editTop = this.getPosition(box).top;
window.scroll(0, editTop);
return true;
},
/**
* Wuxuu muujinayaa dhacdada ugu horreysa ee xadhig la bixiyay ee sanduuqa wax-ka-beddelka MediaWiki.
* @param {String} targetStr xadhigga sanduuqa wax-ka-beddelka ee la rabo in la muujiyo
* @return {Boolean} run haddii ay guulaysato, beenta haddii kale
*/
highlightTargetString: function(targetStr)
{
var origText = this.getTextboxText();
var startInd = origText.indexOf(targetStr);
if(startInd == -1)
{
this.log("Xadhigga bartilmaameedka ah \"" + targetStr + "\" la ma helin.");
return false;
}
return this.highlightLengthAtIndex(startInd, targetStr.length);
},
/**
* Shaqada fududeynta. Wuxuu soo celinayaa curiyaha textarea ee MediaWiki ee ceyriinka ah.
* @return {Node} curiyaha sanduuqa wax-ka-beddelka
*/
getTextbox: function()
{
return $("#wpTextbox1")[0];
},
/**
* Waxay bixisaa qiimaha sanduuqa wax-ka-beddelka oo leh caadiyaynta CR
*
* @return {String} qiimaha sanduuqa wax-ka-beddelka iyadoo CRs la tirtiray haddii document.selection uu jiro
*/
getTextboxText: function()
{
var box = this.getTextbox();
var value = box.value;
if(!box.selectionStart && document.selection) // Dabeecad u eg IE 8
{
value = value.replace(/\r\n/g, "\n");
}
return value;
},
/**
* Wuxuu soo celinayaa curiyaha foomka wax-ka-beddelka ee ceyriinka ah, kaas oo ka kooban MWEditBox, iyo waxyaabo kale.
* @return {Node} curiyaha foomka wax-ka-beddelka
*/
getMWEditForm: function()
{
return $("#editform")[0];
},
/**
* Wuxuu socodsiiyaa shaqo la bixiyay marka la soo gudbiyo foomka wax-ka-beddelka
* @param {Function} subFunc shaqada la socodsiinayo marka la soo gudbinayo
*/
addOnsubmit: function(subFunc)
{
var form = this.getMWEditForm();
if(!form)
{
throw new Error("Ma jiro foom wax-ka-beddel ah, waxaa laga yaabaa inay sabab u tahay bog la ilaaliyo.");
}
form.addEventListener("submit", subFunc, false);
},
/**
* Wuxuu soo celinayaa curiyaha kooban ee wax-ka-beddelka MW ee ceyriinka ah
* @return {Node} curiyaha soo koobitaanka wax-ka-beddelka
*/
getSummary: function()
{
return $("#wpSummary")[0];
},
/**
* La soco inaan horay u soo darnay shaqada onsubmit si loogu daro ProveIt soo koobitaanka.
* Tani waxay damaanad qaadaysaa inaan shaqada laba jeer la socodsiinin.
* @type Boolean
*/
summaryFunctionAdded: false,
/**
* Ma rabtaa isticmaalahu inaan mar walba ku darno soo koobitaanka "Waxaa wax ka beddelay ProveIt"?
* @type Boolean
*/
shouldAddSummary: true,
/**
* ProveIt waa inay ka muuqataa rarka (halkii laga rabi lahaa gujinta badhanka qalabka) ee bogagga wax-ka-beddelka ee la taageero
* @type Boolean
*/
loadVisible: true,
/**
* Weynweeeyso ProveIt marka ay ugu horrayn muuqato. Haddii ay beenta tahay, waxay ka billaaban doontaa yaraynta. Tani saameyn ku ma leh goorta ay muuqaneyso.
* @type Boolean
*/
loadMaximized: false,
/**
* Waxay cayimeysaa in lagu daro soo koobitaanka wax-ka-beddelka ProveIt keydinta xigta.
* Waa la damin karaa iyadoo la beddelayo shouldAddSummary
*/
includeProveItEditSummary: function()
{
if(this.shouldAddSummary && !this.summaryFunctionAdded)
{
try
{
var thisproveit = this;
this.addOnsubmit(function()
{
var summary = thisproveit.getSummary();
if(summary.value.indexOf("ProveIt") == -1)
{
summary.value += " (waxaa wax ka beddelay [[User:ProveIt_GT|ProveIt]])";
}
});
this.summaryFunctionAdded = true;
}
catch(e)
{
this.log("Way ku guuldarraysatay in lagu daro hawlwadeenka onsubmit. e.message: " + e.message);
}
}
},
/**
* Deji badhanka si isticmaaleyaashu ay ugu raran karaan ProveIt marka loo baahdo
*/
setupButton: function()
{
var $box = $(this.getTextbox());
// Waxay hubisaa in wikiEditor la soo raray
$box.on('wikiEditor-toolbar-buildSection-main', function(event, section)
{
delete section.groups.insert.tools.reference;
section.groups.insert.tools.proveit = {
label: 'ProveIt',
type: 'button',
icon: '//upload.wikimedia.org/wikipedia/commons/thumb/1/19/ProveIt_logo_for_user_boxes.svg/22px-ProveIt_logo_for_user_boxes.svg.png',
action: {
type: 'callback',
execute: function()
{
proveit.toggleVisibility();
}
}
};
});
},
/**
* Deji ProveIt haddii aan joogno bog wax-ka-beddel. Tani waxaa ku jira dejinta badhanka qalabka. Iyadoo ku xiran qaabeynta iyo bogga hadda, waxay sidoo kale wici kartaa rarid si loo muujiyo ProveIt.
*/
setup: function()
{
if(this.isEditPage())
{
if(this.loadVisible && this.isSupportedPage())
{
this.load();
}
this.setupButton();
}
},
/**
* Waxay soo dejisaa ku-tiirsanaanta waxayna abuurtaa GUI
*/
load: function()
{
$(function() {
var dependencies = ['jquery.ui', 'jquery.textSelection', 'mediawiki.util'];
var preference = proveit.getDatePreference();
proveit.dateFormatter = new proveit.DateFormatter(preference);
mw.loader.using(dependencies, function() {
try {
proveit.createGUI();
if(proveit.loadMaximized)
{
proveit.toggleViewAddVisibility();
}
}
catch(ex) {
proveit.logException(ex);
}
}, function(ex, errorDependencies) {
proveit.log('Wuu ku guuldarraystay inuu soo raro mid ka mid ah kuwan: ', errorDependencies);
});
});
},
/**
* Nadiifi refBox ee refBoxRows, marka laga reebo safafka macmalka ah (dummy rows).
* @return {Boolean} beenta haddii refBox aan la helin
*/
clearRefBox: function()
{
var box = this.getReferenceBox();
if(box == null)
{
this.log("Sanduuqa tixraaca weli lama soo darin.");
return false;
}
$("tr:not('tr#dummyRef')", box).remove();
return true;
},
/** Gelisa qoraalka tixraaca sanduuqa wax-ka-beddelka MW.
* @param {String} ref Qoraalka tixraaca ee la gelinayo
* @param {Boolean} full Geli qoraalka tixraaca buuxa haddii ay run tahay, oraahda haddii kale.
* @return {Boolean} beenta haddii ay jiraan khaladaad
*/
insertRefIntoMWEditBox: function(ref, full)
{
var txtarea = this.getTextbox();
if(!txtarea)
{
this.log("insertRefIntoMWEditBox: txtarea waa null");
return false;
}
txtarea = $(txtarea);
var insertionText = ref.getInsertionText(full);
// Beddel xulashada hadda jirta (haddii ay jirto), ka dibna duub
txtarea.textSelection('encapsulateSelection',
{
peri: insertionText,
replace: true
});
var caretPos = txtarea.textSelection('getCaretPosition', {startAndEnd: true});
// Tani waa mid xoogaa dib loo celiyay. Waxaa loogu yeeraa ugu horrayn shaqada duubista ee wareejinta (scrolling workaround)
this.highlightLengthAtIndex(caretPos[0], caretPos[1] - caretPos[0]);
this.includeProveItEditSummary();
},
/**
* Wax ka beddel shayga tixraaca ee ka yimid GUI-da uu isticmaalahu wax ka beddelay. Shayga tixraaca waxaa lagu beddelaa meesha, markaa qiimaha la soo celiyo waa u jeeddo fududeyn oo keliya.
*
* @param {Node} editPane curiyaha ceyriinka ah ee editPane
* @param {AbstractReference} ref shayga oraahda asalka ah ee aan wax ka beddelayno
*
* @return {AbstractReference} tixraaca isla marka la soo gudbiyay
*/
changeRefFromEditPane: function(ref, editPane)
{
var paramBoxes = $(editPane).find("div.input-row");
var refName = $('#editrefname').val();
ref.name = refName != "" ? refName : null; // Kaydi magacyada madhan sida null
// Nadiifi cabbirkii hore
ref.params = {};
var paramName, paramVal;
for (var i = 0; i < paramBoxes.length; i++)
{
var paramRow = paramBoxes[i];
var valueTextbox = $(paramRow).find(".paramvalue")[0];
if($(paramRow).hasClass("addedrow")) // Lagu daray "Ku dar goob kale"
{
paramName = $.trim($(paramRow).find(".paramdesc")[0].value);
}
else
{
paramName = valueTextbox.id.substring(this.EDIT_PARAM_PREFIX.length);
}
this.log("paramName: " + paramName);
paramVal = $.trim(valueTextbox.value);
this.log("paramVal: " + paramVal);
if (paramName != "" && paramVal != "")
{
ref.params[paramName] = paramVal;
}
}
if (ref.toString() != ref.orig)
{
ref.save = false;
}
ref.update();
return ref;
},
/**
* Waxay abuurtaa refBoxRow, waxay cusboonaysiisaa lambarada dhammaan refBoxRows, waxay ku beddeshaa refBoxRow-kii hore mid cusub, waxayna cusboonaysiisaa qoraalka tixraaca ee MWEditBox.
* @param {AbstractReference} ref tixraaca aan rabno inaan keydinno.
*/
saveRefFromEdit: function(ref)
{
if(!ref.save)
{
var newRichItem = this.makeReferenceBoxRow(ref, true);
var oldRichItem = $('.selected', this.getReferenceBox()).get(0);
var oldNumber = $('td.number', oldRichItem).text();
$('td.number', newRichItem).text(oldNumber); // ilaali lambaraynta hore
oldRichItem.parentNode.replaceChild(newRichItem, oldRichItem);
$(newRichItem).addClass('selected');
ref.updateInText();
this.includeProveItEditSummary();
}
},
/**
* Waxay cusboonaysiisaa muraayadda wax-ka-beddelka marka aad doorato tixraac aad wax ka beddesho.
* @param {AbstractReference} ref tixraaca la doortay.
*/
updateEditPane: function(ref)
{
$('#editrefname').val(ref.name || "");
// Ha ku wasakheynin shayga dhabta ah cabbirro qashin ah.
var tempParams = {};
for(var param in ref.params) {
tempParams[param] = ref.params[param];
}
// Ku dar cabbirro caadi ah oo leh qiimayaal madhan.
var defaults = ref.getDefaultParams();
for(var i = 0; i < defaults.length; i++)
{
if(!tempParams[defaults[i]])
{
tempParams[defaults[i]] = "";
}
}
var required = ref.getRequiredParams();
var paramNames = [];
for(var item in tempParams) // Marka ugu horreysa dhex mar si aad u hesho magacyada.
{
paramNames.push(item);
}
var sorter = ref.getSorter();
if(sorter)
{
paramNames.sort(sorter);
}
else
{
paramNames.sort();
}
/* Si loo kala sooco si loo bixiyo interface joogto ah. Wuxuu isticmaalaa nidaam kala soocid oo gaar ah (oo si fudud loo habeeyo)
haddii ay suurtagal tahay.
Javascript waxay sameysaa kala soocid burburin ah, taas oo kiiskan ah mid ku habboon...
*/
$('#edit-fields').children('.paramlist').children().remove('div:not(.hidden)'); // nadiifi dhammaan goobaha ku jira sanduuqa wax-ka-beddelka (marka laga reebo kuwa qarsoon)
for(var j = 0; j < paramNames.length; j++)
{
this.addPaneRow($("#edit-pane").get(), tempParams, this.getDescriptions(), paramNames[j], required[paramNames[j]], true);
}
var acceptButton = $('#edit-buttons .accept');
var acceptEdit = function()
{
proveit.changeRefFromEditPane(ref, $("#edit-pane").get());
proveit.saveRefFromEdit(ref);
$("#edit-pane").hide();
$("#view-pane").show();
};
// Iyadoo aan la lahayn setTimeout, dib u dejinta scroll-ka kama shaqayso Firefox.
setTimeout(function()
{
// Dib u deji scroll-ka
$('#edit-fields').scrollTop(0);
}, 0);
acceptButton.off('click.proveit').on('click.proveit', acceptEdit);
},
/**
* Ku dar saf editPane ama addPane.
* @param {Node} root curiyaha xididka ee muraayadda
* @param {Object} params shayga cabbirka ee tixraaca, ama null ee safarka lagu daray.
* @param {Object} descs shayga sharaxaadda ee la isticmaalayo, ama null haddii aysan jirin sharaxaad
* @param {String} item magaca cabbirka hadda
* @param {Boolean} req run haddii magaca cabbirka hadda loo baahan yahay, haddii kale looma baahna.
* @param {Boolean} fieldType run summad (label), beenta sanduuqa qoraalka (textbox).
*/
addPaneRow: function(root, params, descs, item, req, fieldType)
{
var id = fieldType ? "preloadedparamrow" : "addedparamrow";
var newline = $('#'+id).clone(); // nuqul ka qaado safka qarsoon
$(newline).attr('id',''); // nadiifi aqoonsiga (ma yeelan karo laba curiye oo isla aqoonsi leh)
//this.activateRemoveField(newline);
var paramName = $('.paramdesc', newline).eq(0);
var paramValue = $('.paramvalue', newline).eq(0);
$('.paramlist', root).append(newline);
if(req) // haddii goobta loo baahan yahay...
{
$(paramName).addClass('required'); // tilmaamaha muuqaalka ah in summadda loo baahan yahay
$('.delete-field', newline).remove(); // ha u oggolaan dadka inay ka saaraan goobaha loo baahan yahay
}
else
{
this.activateRemoveField(newline);
}
if(fieldType) // sharaxaadda/magacu waa summad (ma aha sanduuq qoraal)
{
paramName.attr("for", this.EDIT_PARAM_PREFIX + item);
paramValue.attr('id',this.EDIT_PARAM_PREFIX + item);
var desc = descs[item];
if(!desc)
{
this.log("Sharaxaad aan la qeexin ee cabbirka: " + item + ". Si toos ah loogu isticmaalayaa sharaxaad ahaan.");
desc = item;
}
$(paramName).text(desc).attr('title', item);
$(paramValue).val(params[item]);
}
else
{
// lagu daray saf cusub, markaa ka dhig mid qurux badan
$(newline).show('highlight',{},'slow');
$('.inputs', root).scrollTop(100000);
}
},
/*
* kuwani waa qaabka hadda iyo qiimayaasha gelinta si loo muuqdo midka
* hadda shaqeeya
*/
/**
* run waxay tilmaamaysaa tixraacyada qaabka-cite, qaabka-oraahda (citation-style) haddii kale. Waxaa la isticmaalaa marka la abuurayo tixraac.
* @type Boolean
*/
togglestyle: true,
// TODO: Tani waa in meesha laga saaro haddii gelinta magaca keliya la oggol yahay.
/** run waxay tilmaamaysaa tixraacyo buuxa, magaca keliya haddii kale. Waxaa la isticmaalaa marka la gelinayo.
* Ogow in tixraacyada cusub had iyo jeer la geliyo si buuxda.
*
* @type Boolean
*/
toggleinsert: false,
/* Kala-goyska Iskutallaabta-Browser-ka (Cross-Browser Split) 1.0.1
(c) Steven Levithan <stevenlevithan.com>; Shatiga MIT
http://blog.stevenlevithan.com/archives/cross-browser-split
Qaabka kala-goyska ee iskutallaabta-browser-ka ee waafaqsan ECMA
*/
/**
* Hirgelinta iskutallaabta-browser-ka ee shaqada ECMAScript String.prototype.split.
*
* @param {String} str xadhigga gelinta ee la kala goynayo
* @param separator kala-goysaha lagu kala goynayo, sida RegExp ama String
* @param {Number} limit xadka tirada kala-goysyada. Haddii cabbirku maqan yahay, wax xad ah laguma soo rogo.
* @return {Array} safka ka dhashay kala-goyska
*/
split: function (str, separator, limit)
{
// haddii `separator` uusan ahayn regex, isticmaal kan dhalashada `split`
if (Object.prototype.toString.call(separator) !== "[object RegExp]") {
return proveit.split._nativeSplit.call(str, separator, limit);
}
var output = [],
lastLastIndex = 0,
flags = (separator.ignoreCase ? "i" : "") +
(separator.multiline ? "m" : "") +
(separator.sticky ? "y" : ""),
separator = RegExp(separator.source, flags + "g"), // ka dhig `global` oo ka fogow dhibaatooyinka `lastIndex` adoo la shaqeynaya nuqul
separator2, match, lastIndex, lastLength;
str = str + ""; // beddelka nooca
if (!proveit.split._compliantExecNpcg) {
separator2 = RegExp("^" + separator.source + "$(?!\\s)", flags); // uma baahna /g ama /y, laakiin wax ma yeelaan
}
/* dabeecadda `limit`: haddii ay tahay...
- `undefined`: xad ma jiro.
- `NaN` ama eber: soo celi saf madhan.
- lambar togan: isticmaal `Math.floor(limit)`.
- lambar taban: xad ma jiro.
- mid kale: beddel nooca, ka dibna isticma A xeerarka kore. */
if (limit === undefined || +limit < 0) {
limit = Infinity;
} else {
limit = Math.floor(+limit);
if (!limit) {
return [];
}
}
while (match = separator.exec(str)) {
lastIndex = match.index + match[0].length; // `separator.lastIndex` ma aha mid lagu kalsoonaan karo iskutallaabta-browser-ka
if (lastIndex > lastLastIndex) {
output.push(str.slice(lastLastIndex, match.index));
// hagaaji browser-yada kuwaas oo hababkooda `exec` aysan si joogto ah u soo celin `undefined` ee kooxaha qabsashada ee aan qayb qaadanayn
if (!proveit.split._compliantExecNpcg && match.length > 1) {
match[0].replace(separator2, function () {
for (var i = 1; i < arguments.length - 2; i++) {
if (arguments[i] === undefined) {
match[i] = undefined;
}
}
});
}
if (match.length > 1 && match.index < str.length) {
Array.prototype.push.apply(output, match.slice(1));
}
lastLength = match[0].length;
lastLastIndex = lastIndex;
if (output.length >= limit) {
break;
}
}
if (separator.lastIndex === match.index) {
separator.lastIndex++; // ka fogow wareeg aan dhammaad lahayn
}
}
if (lastLastIndex === str.length) {
if (lastLength || !separator.test("")) {
output.push("");
}
} else {
output.push(str.slice(lastLastIndex));
}
return output.length > limit ? output.slice(0, limit) : output;
},
// TODO: Ka saar koodka kala-goyska, oo kaliya isticmaal regex caadi ah (oo leh laba kooxood oo waaweyn magaca iyo qiimaha), si joogto ah. Regex.find? Ka dhig tilmaamayaasha magaca iyo qiimaha inay is waafaqaan, oo dib u habee koodka wicitaanka sida loo baahdo. Sidoo kale, hubi sida tan looga sameeyay koodka asalka ah.
/**
* Regex aad u caqli badan oo lagu falanqeeyo xadhigga shabakadda (template string) (tusaale |last=Smith|first=John|title=My Life Story) iyadoo loo kala qaadayo lammaanaha magaca iyo qiimaha.
*
* magacyadu waa saf ka kooban dhammaan magacyada, qiimayaashuna waa saf ka kooban dhammaan qiimayaasha. Waxay leeyihiin dherer siman.
*
* @param {String} workingString xadhigga shabakadda ee la falanqeynayo.
* @return {Object} shay leh laba sifo, magacyada iyo qiimayaasha.
*/
splitKeysAndValues: function (workingString)
{
var split = {};
// Qaybta koowaad waa qoraal "caadi ah" (tuubooyin ma laha), halka tan labaad ay tahay xiriiriye wiki oo dheellitiran, oo leh tuubo ikhtiyaari ah. Isku-darka kasta ee labada ah ayaa muuqon kara.
split.names = proveit.split(workingString.substring(workingString.indexOf("|") + 1), /=(?:[^|]*?(?:\[\[[^|\]]*(?:\|(?:[^|\]]*))?\]\])?)+(?:\||\}\})/);
split.names.length--; // Ka saar curiyaha madhan ee keliya dhamaadka
split.values = proveit.split(workingString.substring(workingString.indexOf("=") + 1, workingString.indexOf("}}")), /\|[^|=]*=/);
return split;
},
/**
* Baadi tixraacyada ku jira MWEditBox, oo abuur shay tixraac iyo refBoxRow mid kasta.
*/
scanForReferences: function()
{
// kuwani waa xadhigyo loo isticmaalo in lagu oggolaado falanqaynta saxda ah ee tixraaca
var workingstring;
var cutupstring;
this.clearRefBox();
var textValue = this.getTextboxText();
// maadaama aan dooranayno magaca ka hor inta aan nimid nooca tixraaca, halkan waxaa ku yaal doorsoome lagu hayo
var name;
// furaha - magaca
// qiimaha -
// shayga - furaha - "reference", qiimaha - shayga tixraaca . Wuxuu ka fogaadaa celcelinta shayga isku midka ah ee safafka tixraacyada.
// furaha - "strings", qiimaha - safka xadhigaha asalka ah
var citations = {};
// Safka shayada tixraaca. Dhamaadka shaqada, addNewElement ayaa lagu wacaa mid kasta.
var references = [];
// allRefs waa inay tiriisaa tixraacyada furitaanka, laakiin ma aha oraahda tixraaca (ma aha <ref name="..."" />)
var allRefs = textValue.match(/<[\s]*ref[^\/>]*>/gi);
// currentScan waxay haysaa liiska tixraacyada ee la falanqeeyay (match objects). Regex waxay la mid tahay tixraaca buuxa ama magaca-keliya.
var currentScan = textValue.match(/<[\s]*ref[^>]*>(?:[^<]*<[\s]*\/[\s]*ref[\s]*>)?/gi); // [^<]* si sax ah uma maareyso tags-yada HTML ee ku dhex jira (ama faallooyinka).
// haddii ay jiraan natiijooyin,
if (currentScan)
{
for (var i = 0; i < currentScan.length; i++)
{
var reference = this.makeReference(currentScan[i]);
if(reference) // Shayga tixraaca buuxa
{
name = reference.name;
if(!name) // iyadoo aan la lahayn magac, suurtogal ma ahan magac soo noqnoqda.
{
references.push(reference);
}
}
else // Ma aha tixraac buuxa. Suurtogal waa oraah (citation).
{
var match = currentScan[i].match(this.REF_REGEX);
name = match && (match[1] || match[2] || match[3]);
}
if(name)
{
if(!citations[name])
{
// Abuur safka xadhigaha tixraaca asalka ah
citations[name] = {};
if(!citations[name].strings)
{
citations[name].strings = [];
}
}
if(reference && !citations[name].reference) // tixraac, oo aan weli ahayn mid magacan leh
{
citations[name].reference = reference;
references.push(reference);
}
// Ku dar safka
citations[name].strings.push(currentScan[i]);
}
}
}
for(var j = 0; j < references.length; j++)
{
if(references[j].name)
{
var citation = citations[references[j].name];
references[j].setCitationStrings(citation.strings);
}
this.addNewElement(references[j]);
}
},
/**
* Regex ee falanqaynta qoraal kasta oo tixraac ah.
* @type RegExp
*/
REF_REGEX: /<[\s]*ref[\s]*name[\s]*=[\s]*(?:(?:\"(.*?)\")|(?:\'(.*?)\')|(?:(.*?)))[\s]*\/?[\s]*>/,
/**
* Shaqada warshadda ee tixraacyada. Waxay qaadataa qoraalka tixraaca, waxayna soo celineysaa tusaale ka mid ah fasalka ku habboon.
* @param {String} refText qoraalka tixraaca
* @return {AbstractReference} null haddii refText uusan ahayn tixraac, haddii kale shayga tixraaca
*/
makeReference: function(refText)
{
var isReference = /<[\s]*ref[^>]*>[^<]*\S[^<]*<[\s]*\/[\s]*ref[\s]*>/.test(refText); // Waxay tijaabisaa tixraaca (ma aha oraah);
if(!isReference)
{
return null;
}
var citeFunction = refText.match(/{{[\s]*cite/i) ? this.CiteReference : refText.match(/{{[\s]*Citation/i) ? this.CitationReference : this.RawReference;
if(citeFunction != this.RawReference)
{
var workingstring = refText.match(/{{[\s]*(cite|Citation)[\s\S]*?}}/i)[0];
var match = refText.match(this.REF_REGEX);
if(match && match != null)
{
var name = match[1] || match[2] || match[3]; // 3 suurtogalnimadood, oo u dhigma regex-ka kore, waa <ref name="foo">, <ref name='bar'>, iyo <ref name=baz>
}
var cutupstring = workingstring.split(/\|/g);
// Khiyaanadan yar waxay ku tiirsan tahay xaqiiqda ah in 'e' ay soo muuqato marka ugu horreysa sida xarafka dambe ee 'cite', noocuna uu xigaa.
if(citeFunction == this.CiteReference)
{
var beforeBar = cutupstring[0];
var typeStart = beforeBar.toLowerCase().indexOf('e');
// Xirmada curly ee dhammaadka koowaad
var rightCurly = beforeBar.indexOf('}');
// Badanaa, rightCurly waxay noqon doontaa -1. Laakiin tani waxay tixgelineysaa tixraacyada madhan sida <ref>{{cite web}}</ref>
var typeEnd = rightCurly != -1 ? rightCurly : beforeBar.length;
// qaado nooca, ka dibna hagaaji (trim).
var type = $.trim(beforeBar.substring(typeStart + 1, typeEnd));
}
}
// nooca waxaa laga yaabaa inaan la qeexin, laakiin taas waa la aqbali karaa.
var citation = new citeFunction({"name": name, "type": type, "save": true, "inMWEditBox": true, "orig": refText});
if(citeFunction != this.RawReference)
{
var split = this.splitKeysAndValues(workingstring);
var names = split.names;
var values = split.values;
for (var j = 0; j < names.length; j++)
{
/* Iska tuur booska madhan, iyo |'s oo aan lahayn cabbirro, kuwaas oo aan weligood sax ku ahayn
shabakadaha tixraaca.*/
var paramName = $.trim(names[j]).replace(/(?:\s*\|)*(.*)/, "$1");
var paramVal = $.trim(values[j]);
// Miyay jiri kartaa shaqada setParam? Waxay xallin kartaa qiimayaasha madhan, oo xitaa ka tiri karta (si aamusmiisan ama si kale) cabbirada aan ansax ahayn. Sidoo kale, miyaa cabbirada lagu gudbin karaa dhisaha (constructor)?
if (paramVal != "")
{
citation.params[paramName] = paramVal;
}
}
}
return citation;
},
// TODO: Isticmaal https://gerrit.wikimedia.org/r/#/c/67166/ marka la mideeyo.
/**
* Fasalka qaabaynta taariikhda (Date-formatting class)
*
* @param {String} format mid ka mid ah xadhigyada qaabka ee uu taageero xudunta MW.
* Hadda, qiimayaasha la taageero waa 'default', 'mdy', 'dmy', 'ymd', iyo 'ISO 8601'.
* Haddii qiime aan la aqoon la gudbiyo, waxay isticmaali doontaa wgDefaultDateFormat.
*/
DateFormatter: function (format) {
// 1-indexed (sababtoo ah shayga buuxinta ee 0), luqadda nuxurka bogga.
var monthNames = mw.config.get('wgMonthNames');
var supportedFormats = ['mdy', 'dmy', 'ymd', 'ISO 8601'];
if($.inArray(format, supportedFormats) === -1) {
format = mw.config.get('wgDefaultDateFormat');
}
function getMonthName(date) {
return monthNames[date.getMonth() + 1];
}
this.formatAsMdy = function(date) {
return getMonthName(date) + ' ' + date.getDate() + ', ' + date.getFullYear();
};
this.formatAsDmy = function(date) {
return date.getDate() + ' ' + getMonthName(date) + ' ' + date.getFullYear();
};
this.formatAsYmd = function(date) {
return date.getFullYear() + ' ' + getMonthName(date) + ' ' + date.getDate();
};
this.formatAsISO8601 = function(date) {
return date.getFullYear() + '-' +
(date.getMonth() < 9 ? '0' : '') + (date.getMonth() + 1) + '-' +
(date.getDate() < 10 ? '0' : '') + date.getDate();
};
var formatters = {
mdy: this.formatAsMdy,
dmy: this.formatAsDmy,
ymd: this.formatAsYmd,
'ISO 8601': this.formatAsISO8601
};
/**
* Waxay qaabeysaa taariikhda iyadoo la raacayo doorbididda la kaydiyay
*
* @param {Date} date taariikhda la qaabeynayo
*
* @return {String} taariikhda la qaabeeyey sida String
*/
this.format = function(date) {
return formatters[format](date);
};
},
/**
* Nooca tixraaca xididka (Root reference type). Waalidka RawReference, CiteReference, iyo CitationReference.
* @class AbstractReference
* @for proveit
* @constructor
* @param {Object} argObj shayga doodda ee leh furayaasha ikhtiyaar kasta
*/
AbstractReference: function(argObj)
{
// CiteReference waxay leedahay baabi'in aan caadi ahayn (override) tan. Tan waxaa la qeexay goor hore (iyo si shuruudaysan) sababtoo ah waxaa lagu isticmaalaa dhisaha (constructor).
if(!this.setType)
{
/**
* @param {String} type nooca tixraaca
*/
this.setType = function(type)
{
this.type = type;
};
}
/**
* Cusboonaysii xadhigyada oraahda ka dib markaad beddesho tixraaca. Tani waxay socotaa ka dib wax-ka-beddelka goobaha tixraaca (magaca, cabbirrada), laakiin ka hor inta aan la beddelin orig
*/
this.update = function()
{
var newCiteText = this.toString();
var strings = this.getCitationStrings();
/*
* Cusboonaysii oraahda ugu weyn ee safafka xadhigaha.
*
* TODO:
* Isticmaal safka xadhigaha halkan si aad u hesho oo aad u cusboonaysiiso oraahyada aan ahayn tixraacyada ugu weyn. Sida ay yihiin, waa kuwo aan lahayn cid daryeesha (orphaned).
* Labada saf iyo sanduuqa qoraalka waa la cusboonaysiin karaa.
* Waxaa laga yaabaa inay ku filnaato in la dejiyo dhammaan oraahyada aan ahayn kuwa ugu weyn ee ku jira qoraalka iyo safka kuwaas oo ah this.getInsertionText(false).
* Si kastaba ha ahaatee, haddii ay ka saaraan magaca gabi ahaanba (lagu talin maayo), taasi waxay noqon laakiin dhibaato.
*/
if(strings.length > 0) // Tani waxay tilmaamaysaa inuu jiray magac hore
{
for(var i = 0; i < strings.length; i++)
{
// Haddii aan helno oraahda buuxa sida oraah, u cusboonaysii qoraalka cusub.
if(strings[i] == this.orig)
{
// this.orig lafteedu waa la cusboonaysiiyaa updateInText
strings[i] = newCiteText;
}
}
}
else if(this.name != null) // Waxay ku dareen magac, markaa waa inay haysataa oraah weyn.
{
// Hadda oo ay leedahay magac, waa oraah u gaar ah.
strings.push(newCiteText);
}
};
/**
* <ref name /> ee tixraaca
* @type String
*/
this.name = argObj.name != "" ? argObj.name : null; // Kaydi magacyada madhan sida null
/*
nooca tixraaca, tusaale cite web, cite news. Sidoo kale waxaa loo isticmaalaa (oo ay ku jiraan shayada CitationReference) si loo go'aamiyo goobaha caadiga ah.
*/
this.setType(argObj.type);
//TODO: Dib u eeg in labada (ama midkoodna) ee save ama inMWEditBox ay dhab ahaantii lagama maarmaan yihiin. Ma laga go'aan ka gaari karaa xaaladda?
/**
* calaamad lagu go'aaminayo in oraahda la keydiyo iyo inkote. beenta waxay tilmaamaysaa oraah "wasakh ah" oo ay tahay in lagu cusboonaysiiyo qoraalka iyo metadata.
* @type Boolean
*/
this.save = argObj.save;
/**
* run haddii iyo keliya haddii tixraacu ku jiro sanduuqa wax-ka-beddelka MW oo wata qiime la mid ah kan orig ee shaygan.
* @type Boolean
*/
this.inMWEditBox = argObj.inMWEditBox;
/**
* wikitext-ka asalka ah ee tixraaca
* @type String
*/
this.orig = argObj.orig;
/**
* khariidadaynta magacyada cabbirka ee qiimayaasha
* @type Object
*/
this.params = {};
/**
* Shaqada fududeynta. Wuxuu soo celinayaa kala-soocaha cabbirada.
* @return {Function} kala-soocaha cabbirada
*/
this.getSorter = function()
{
var thisCite = this; // Ka dhig xidhitaanka (closure) mid u shaqeeya sida loogu talagalay.
// Kala-soocuhu wuxuu isticmaalaa paramSortKey marka hore, ka dibna wuxuu ku soo noqdaa nidaamka alifbeetada.
return function(paramA, paramB)
{
var aInd = thisCite.getSortIndex(paramA);
var bInd = thisCite.getSortIndex(paramB);
if(aInd != -1 && bInd != -1)
{
return aInd - bInd;
}
else
{
proveit.log('Cabbirka wuu ka maqan yahay getSortIndex, taas oo keenta in kala-soociddu noqoto mid aan ansax ahayn. paramA: ', paramA, ', aInd: ', aInd, ', paramB: ', paramB, ', bInd: ', bInd);
if(paramA < paramB)
{
return -1;
}
else if(paramA == paramB)
{
return 0;
}
else
{
return 1;
}
}
};
};
/**
* Wuxuu soo celinayaa run haddii tixraacani sax yahay, beenta haddii kale.
* U qaado dhammaan shayada AbstractReference inay yihiin kuwo sax ah. Waxa lagu baabi'in karaa noocyada hoose (subtypes).
* @return {Boolean} AbstractReference.isValid mar walba waxay soo celisaa run
*/
this.isValid = function(){return true;};
/**
* Waxay abuurtaa summadda tixraaca iyadoo la isticmaalayo cinwaanka, qoraha, iwm.
* @return {String} summadda la abuuray
*/
this.getLabel = function()
{
var label = "";
if (this.params.author)
{
label = this.params.author + "; ";
}
else if (this.params.last)
{
label = this.params.last;
if (this.params.first)
{
label += ", " + this.params.first;
}
label += "; ";
}
if (this.params.title)
{
label += this.params.title;
}
if(label == "")
{
var value;
for (value in this.params)
{
break;
}
if(value) // Ma jiri karaan cabbirro
{
label = value;
}
}
return label;
};
/**
* Wuxuu helayaa qoraalka gelinta (sanduuqa wax-ka-beddelka).
*
* TODO: Abuur shay regex ah halkaas (getInsertionRegExp), si muujinta aysan ugu guuldarraysan isbeddellada fudud (tusaale bannaanada).
* @param {Boolean} full Haddii ay run tahay, geli qoraalka buuxa, magaca tixraaca keliya haddii kale
* @return {String} qoraalka gelinta
*/
this.getInsertionText = function(full)
{
if(full)
{
return this.toString();
}
else
{
if(this.name)
{
return "<ref name=\"" + this.name + "\" />";
}
else
{
throw new Error("getInsertionText: ref.name waa null");
}
}
};
/**
* Waxay cusboonaysiisaa tixraacatan sanduuqa wax-ka-beddelka.
*/
this.updateInText = function()
{
var txtarea = proveit.getTextbox();
if (!txtarea || txtarea == null)
return;
txtarea.focus();
var text = proveit.getTextboxText();
text = text.replace(this.orig, this.toString());
// Ku samee beddelka textarea.
txtarea.value = text;
// Saldhigga wax-ka-beddellada mustaqbalka
this.orig = this.toString();
this.save = true;
proveit.highlightTargetString(this.toString());
};
/**
* Habka caawiyaha gudaha ee toString.
* @param {String} template template-ka tixraaca (hadda "cite" ama "Citation"
* @param {Boolean} includeType run si loo daro this.type, beenta haddii kale
* @return {String} xadhigga tixraaca hadda
*/
this.toStringInternal = function(template, includeType)
{
if(this.name)
{
var returnstring = "<ref name=\"" + this.name + "\">";
}
else
{
var returnstring = "<ref>";
}
returnstring += "{{" + template + (includeType ? " " + this.type : "");
for (var name in this.params)
{
returnstring += " | " + name + "=" + this.params[name];
}
returnstring += "}}</ref>";
return returnstring;
};
/**
* Safka xadhigaha oraahda ee tixraacatan.
* @type Array
*/
this.citationStrings = [];
/**
* Waxay u dejisaa citationStrings saf
* @param {Array} strings safka xadhigaha oraahda, aan ahayn null
*/
this.setCitationStrings = function(strings)
{
this.citationStrings = strings;
};
/**
* Wuxuu helayaa safka citationStrings.
* @return {Array} (laga yaabaa inuu madhan yahay) safka xadhigaha oraahda. Ma soo celin doono null.
*/
this.getCitationStrings = function()
{
return this.citationStrings;
};
/**
* Hel URL-ka summadda (icon URL) ee tixraaca
* @return {String} URL-ka summadda
*/
this.getIcon = function()
{
return '//upload.wikimedia.org/wikipedia/commons/d/dd/Silk-Page_white.png';
};
},
/**
* Dhisaha (constructor) nooca CiteReference.
* @class CiteReference
* @for proveit
* @constructor
* @extends AbstractReference
* @param {Object} argObj shayga doodda, oo leh furayaasha ikhtiyaar kasta
*/
CiteReference: function(argObj)
{
/* Tani waa asal ahaan matalaad degdeg ah ee dib-u-jeedinnada template-ka, oo ay la socdaan
* is-khariidadaynta.
*/
var typeNameMappings =
{
web: "web",
book: "book",
journal: "journal",
conference: "conference",
encyclopedia: "encyclopedia",
news: "news",
newsgroup: "newsgroup",
paper: "journal",
"press release": "press release",
"pressrelease": "press release",
interview: "interview",
episode: "episode",
"AV media": "AV media",
DVD: "AV media",
audio: "AV media",
"av media": "AV media",
cd: "AV media",
dvd: "AV media",
media: "AV media",
movie: "AV media",
"music video": "AV media",
video: "AV media",
visual: "AV media"
};
// Wuxuu dejiyaa nooca (tusaale web ee cite web), iyadoo la adeegsanayo khariidadaynta. Tani waxay ku taal dusha sare sababtoo ah waxaa lagu isticmaalaa dhisaha AbstractReference.
this.setType = function(rawType)
{
var mappedType = typeNameMappings[rawType];
if(mappedType != null)
this.type = mappedType;
else
this.type = rawType; // Isticmaal nooca fudud sida kaydka badbaadada (fallback).
};
/**
* Wuxuu soo celinayaa nooca ujeeddada bandhigga, iyadoo lagu saleynayo fariimaha sharaxaadda. Tusaale ahaan, "AV media" waxay hadda soo celineysaa "Shaqada maqalka iyo muuqaalka".
*
* @return {String} nooca bandhigga
*/
this.getTypeForDisplay = function()
{
return proveit.getDescriptions()[this.type];
};
proveit.AbstractReference.call(this, argObj);
// TODO: Miyuu CiteReference.getSortIndex iyo CitationReference.getSortIndex ku midoobaa AbstractCitation? Mid aad u yar, laakiin fudud in la ilaaliyo.
/**
* Wuxuu soo celinayaa tusmada kala-soocidda (sort index) ee cabbir la bixiyay
* @param {String} param magaca cabbirka
* @return {Number} tusmada kala-soocidda haddii la helo, -1 haddii kale
*/
this.getSortIndex = function(param)
{
// Tani waa nidaamka goobaha la soo bandhigi doono ama la soo saari doono.
return $.inArray(param, [
"url",
"title",
"trans_title",
"encyclopedia",
"publisher",
"work",
"date",
"agency",
"accessdate",
"author",
"last",
"first",
"subject",
"subjectlink",
"inventor",
"editor",
"author2",
"last2",
"first2",
"subject2",
"subjectlink2",
"author3",
"last3",
"first3",
"subject3",
"subjectlink3",
"author4",
"last4",
"first4",
"subject4",
"author5",
"last5",
"first5",
"author6",
"last6",
"first6",
"author7",
"last7",
"first7",
"author8",
"last8",
"first8",
"author9",
"last9",
"first9",
"authorlink",
"coauthors",
"interviewer",
"cointerviewers",
"type",
"newsgroup",
"journal",
"booktitle",
"program",
"episodelink",
"series",
"serieslink",
"credits",
"network",
"station",
"callsign",
"city",
"airdate",
"began",
"ended",
"season",
"seriesno",
"number",
"minutes",
"transcript",
"transcripturl",
"people",
"year",
"month",
"article",
"contribution",
"format",
"medium",
"newspaper",
"conference",
"volume",
"edition",
"issue",
"location",
"pages",
"page",
"language",
"isbn",
"issn",
"oclc",
"doi",
"pmid",
"id",
"archiveurl",
"archivedate",
"deadurl",
"time",
"quote",
"ref"
]);
};
/**
* Wuxuu soo celinayaa tixraacatan sida xadhig ah.
* @return {String} tixraaca sida xadhig
*/
this.toString = function()
{
return this.toStringInternal("cite", true);
};
// Tixraacyada aan lahayn cabbiradan waxaa lagu calaamadin doonaa gaduud.
// Run waxay tilmaamaysaa in loo baahan yahay (null, ama undefined, waxay ka dhigan tahay looma baahna)
var requiredParams =
{
web: { "url": true, "title": true},
book: { "title": true },
journal: { "title": true },
conference: { "title": true },
encyclopedia: { "title": true, "encyclopedia": true },
news: { "title": true, "work": true, "date": true },
newsgroup: { "title": true },
"press release" : { "title": true },
interview: { "last": true }, // TODO: Wareysigu wuxuu u baahan yahay last *ama* subject. Hadda, ma matali karno taas.
episode: { "title": true },
"AV media": { "title": true }
};
/**
* Soo celi cabbirada looga baahan yahay noocan oraahda.
* @return {Object} shay leh cabbirada looga baahan yahay furayaal ahaan iyo run qiime ahaan; shay madhan oo ah nooc aan la aqoon
*/
this.getRequiredParams = function()
{
var curReq = requiredParams[this.type];
if(curReq)
return curReq;
else
return {}; // Soo celi shay madhan halkii laga soo celin lahaa null si looga fogaado dereferencing null.
};
// Cabbiradan waxaa loo soo jeedin doonaa si toos ah marka la wax ka beddelayo.
var defaultParams =
{
web: [ "url", "title", "author", "accessdate", "work", "publisher", "date", "pages"],
book: [ "title", "author", "authorlink", "year", "isbn", "publisher", "location", "pages", "url" ],
journal: [ "title", "author", "journal", "volume", "issue", "year", "month", "pages", "url", "doi", "pmid" ],
conference: [ "conference", "title", "booktitle", "author", "editor", "year", "month", "url", "id", "accessdate", "location", "pages", "publisher" ],
encyclopedia: [ "title", "encyclopedia", "author", "editor", "accessdate", "edition", "year",
"publisher", "volume", "location", "pages" ],
news: [ "title", "author", "url", "work", "date", "accessdate", "pages", "location", "agency" ],
newsgroup: [ "title", "author", "date", "newsgroup", "id", "url", "accessdate" ],
"press release" : [ "title", "url", "publisher", "date", "accessdate" ],
interview: ["last", "first", "subjectlink", "interviewer", "title", "callsign", "city", "date", "program", "accessdate"],
episode: ["title", "series", "credits", "airdate", "city", "network", "season"],
"AV media": ["people", "date", "url", "title", "medium", "location", "publisher"]
};
/**
* Wuxuu soo celinayaa cabbirada caadiga ah (lagu soo jeedinayo marka la wax ka beddelayo) ee tixraaca hadda
* @return {Array} safka magacyada cabbirka caadiga ah; saf madhan haddii aan la aqoon
*/
this.getDefaultParams = function()
{
var curDefault = defaultParams[this.type];
if(curDefault)
return curDefault;
else
return []; // Soo celi saf madhan halkii laga soo celin lahaa null si looga fogaado dereferencing null.
};
this.isValid = function()
{
if(this.type == '')
{
return false;
}
var req = this.getRequiredParams();
var i = 0;
var allFound = true;
for(var reqParam in req)
{
/* Iska indhatir cabbirada ku jira shayga req ee ah null, undefined, ama false.
Looma baahna. */
if(!req[reqParam])
continue;
allFound &= (reqParam in this.params);
if(!allFound)
break;
}
return allFound;
};
var iconMapping =
{
web: "//upload.wikimedia.org/wikipedia/commons/f/f0/Silk-Page_white_world.png",
book: "//upload.wikimedia.org/wikipedia/commons/1/1e/Silk-Book.png",
journal: "//upload.wikimedia.org/wikipedia/commons/f/f8/Silk-Page_white_text.png",
news: "//upload.wikimedia.org/wikipedia/commons/3/32/Silk-Newspaper.png",
newsgroup: "//upload.wikimedia.org/wikipedia/commons/5/5c/Silk-Comments.png",
"press release": "//upload.wikimedia.org/wikipedia/commons/b/bd/Silk-Transmit_blue.png",
interview: "//upload.wikimedia.org/wikipedia/commons/f/f7/Silk-Telephone.png",
episode: "//upload.wikimedia.org/wikipedia/commons/b/b2/Silk-Television.png",
"AV media": "//upload.wikimedia.org/wikipedia/commons/1/1a/Silk-film.png"
};
var superGetIcon = this.getIcon;
this.getIcon = function()
{
var icon = iconMapping[this.type];
if(icon)
{
return icon;
}
return superGetIcon.call(this);
};
},
/**
* Shaqada tixraacyada qaabka oraahda (citation style refs).
* @class CitationReference
* @for proveit
* @constructor
* @extends AbstractReference
* @param {Object} argObj shayga doodda ee leh furayaasha ikhtiyaar kasta
*/
CitationReference: function(argObj) {
proveit.AbstractReference.call(this, argObj);
// Midna hadda looma baahna;
var requiredParams = {};
// Cabbiradan waxaa loo soo jeedin doonaa si toos ah marka la wax ka beddelayo.
var defaultParams =
{
web: [ "url", "author", "title", "date", "accessdate"],
news: [ "author", "title", "newspaper", "url", "publication-place", "volume", "issue", "date", "pages"],
encyclopedia: ["author", "editor", "contribution", "title", "publisher", "place", "year", "volume", "pages"],
book: ["author", "title", "publisher", "place", "year"],
journal: ["author", "title", "journal", "volume", "issue", "year", "pages"],
patent: ["inventor", "title", "issue-date", "patent-number", "country-code"]
};
/**
* Wuxuu soo celinayaa tusmada kala-soocidda (sort index) ee cabbir la bixiyay
* @param {String} param magaca cabbirka
* @return {Number} tusmada kala-soocidda haddii la helo, -1 haddii kale
*/
this.getSortIndex = function(param)
{
// Tani waa nidaamka goobaha la soo bandhigi doono ama la soo saari doono.
return $.inArray(param, [
"last",
"first",
"url",
"author",
"editor",
"contribution",
"author-link",
"last2",
"first2",
"author2-link",
"publication-date",
"inventor",
"title",
"issue-date",
"patent-number",
"country-code",
"journal",
"volume",
"newspaper",
"issue",
"date",
"publisher",
"place",
"year",
"edition",
"publication-place",
"series",
"version",
"pages",
"page",
"id",
"isbn",
"doi",
"oclc",
"accessdate"
]);
};
/**
* Wuxuu soo celinayaa tixraacatan sida xadhig ah.
* @return {String} tixraaca sida xadhig
*/
this.toString = function()
{
return this.toStringInternal("Citation", false);
};
/**
* Soo celi cabbirada looga baahan yahay noocan oraahda.
* @return {Object} shay leh cabbirada looga baahan yahay furayaal ahaan iyo run qiime ahaan; shay madhan oo ah nooc aan la aqoon
*/
this.getRequiredParams = function()
{
return requiredParams;
};
/**
* Wuxuu soo celinayaa cabbirada caadiga ah (lagu soo jeedinayo marka la wax ka beddelayo) ee tixraaca hadda
* @return {Array} safka magacyada cabbirka caadiga ah; saf madhan haddii aan la aqoon
*/
this.getDefaultParams = function()
{
if(this.type)
{
return defaultParams[this.type];
}
else
{
return ["url", "title", "author", "date", "publisher"]; // Ma go'aamin karo xaddidyo gaar ah markaad wax ka beddeleyso Citation hore u jirtay.
}
};
},
/**
* Dhisaha nooca RawReference.
* @class RawReference
* @for proveit
* @constructor
* @extends AbstractReference
* @param {Object} argObj shayga doodda, oo leh furayaasha ikhtiyaar kasta
*/
RawReference: function(argObj)
{
proveit.AbstractReference.call(this, argObj);
this.type = 'raw';
/**
* Wuxuu soo celinayaa tixraacatan sida xadhig ah.
* @return {String} tixraaca sida xadhig
*/
this.toString = function()
{
return this.orig;
};
this.params['title'] = this.orig;
this.getIcon = function()
{
return 'https://upload.wikimedia.org/wikipedia/commons/d/db/Silk-Page_white_code_red.png';
};
this.getTypeForDisplay = function()
{
return proveit.getDescriptions()['raw'];
};
},
// TODO: Tani waa in lagu mideeyaa changeRefFromEditPane
/**
* Beddel waxyaabaha ku jira guddi-hoosaadka lagu daro oraahda ee hadda oo ka dhig tixraac (tusaale CiteReference(), CitationReference())
* @for proveit
* @param {Node} box nooca xididka GUI ee lagu daro (muraayadda nooca gaarka ah, tusaale joornaalka)
* @return {AbstractReference} ref ama null haddii aysan muraayad jirin weli.
*/
getReferenceFromAddPane: function(box)
{
var $box = $(box);
var type = $box.data('proveitRefType');
// hel magaca <ref>
var refName = $('#addrefname').val();
var citeFunc = this.togglestyle ? this.CiteReference : this.CitationReference;
var ref = new citeFunc({"name": refName, "type": type});
var paramName, paramVal;
var paramList = $(".paramlist", box)[0];
var paramRows = $('div', paramList);
for (var i = 0; i < paramRows.length; i++)
{
var paramRow = paramRows[i];
var valueTextbox = $(".paramvalue", paramRow)[0];
if($(paramRow).hasClass("addedrow")) // Lagu daray "Ku dar goob kale"
{
paramName = $.trim($(".paramdesc", paramRow)[0].value);
}
else
{
paramName = valueTextbox.id.substring(this.NEW_PARAM_PREFIX.length);
}
paramVal = $.trim(valueTextbox.value);
if(paramName != "" && paramVal != "")
{ // Aan madhanayn
ref.params[paramName] = paramVal;
}
}
ref.update();
return ref;
},
/**
* Waxaa laga wacaa guddiga lagu daro oraahda, tani waa shaqada loo isticmaalo
* in lagu daro oraahda dhabta ah.
*
* @param {AbstractReference} ref tixraaca la darayay
*/
addReference: function(ref) {
// ka dhig mid shaqeeya, qoraal badan ayaa halkan ka jira.
this.addNewElement(ref);
ref.orig = ref.toString();
/*
* Dhex mar sanduuqyada oo qabso aqoonsiyada marka loo eego qiimayaasha, ilaali
* sanduuqa ugu dambeeya oo hubi inaad soo qabato nooca sidoo kale
*/
this.insertRefIntoMWEditBox(ref, true); // run waxay ka dhigan tahay geli qoraalka buuxa halkan, iyadoon loo eegin beddelka caalamiga ah.
ref.save = true;
ref.inMWEditBox = true;
},
/**
* Nadiifi dhammaan safafka guddiyada lagu daro tixraaca ee la soo gudbiyay.
* @param {Node} citePanes curiyaha DOM ee ceyriinka ah
*/
clearCitePanes: function(citePanes)
{
if(citePanes.hasChildNodes())
{
citePanes.removeChild(citePanes.firstChild);
}
},
/**
* Ku dar hawlwadeenka dhacdada badhanka Tirtir Goobta (Delete Field) ee guddiyada Ku Dar/Wax ka Beddel Tixraaca
* @param {Node} fieldRow curiyaha DOM ee fieldRow ee la tirtirayo
*/
activateRemoveField: function(fieldRow) {
$('.delete-field', fieldRow).click(function() {
$(fieldRow).hide(
'highlight',{},'slow',
function() {
$(fieldRow).remove();
}
);
});
},
/**
* Waxay beddeshaa muraayadda guddiga lagu daro tixraaca si ay u noqoto nooca saxda ah ee gelitaanka
* @param {Node} menu Curiyaha menu-ga HTML ee ceyriinka ah
*/
changeAddPane: function(menu) {
// Dib u deji scroll-ka
$('#add-fields').scrollTop(0);
$(menu.parentNode).show(); // cite/citation vbox.
var citePanes = $(".addpanes", menu.parentNode.parentNode).get(0);
this.clearCitePanes(citePanes);
var newRefType = menu.value;
var genPane = document.getElementById("dummyCitePane").cloneNode(true);
var $genPane = $(genPane).attr('id', '');
$genPane.data('proveitRefType', newRefType);
// magacaabi ref-name-row
$('.ref-name-row', $genPane).children('input').attr('id','addrefname');
$('.ref-name-row', $genPane).children('label').attr('for','addrefname');
// Wax yar oo hab-qabsi ah. Waa maxay habka ugu fiican?
var newRef;
if(menu.id == "citemenu")
{
newRef = new this.CiteReference({});
}
else
{
newRef = new this.CitationReference({});
}
newRef.type = newRefType;
var descs = this.getDescriptions();
var defaultParams = newRef.getDefaultParams().slice(0); // nuqul
defaultParams.sort(newRef.getSorter());
//var required = newRef.getRequiredParams();
// Suurtagal, shayada Cite waa inay si toos ah ugu daraan cabbirada caadiga ah khariidadaha cabbirkooda. Taasi waxay u ekaan kartaa mid tan ka fudud.
for(var i = 0; i < defaultParams.length; i++)
{
newRef.params[defaultParams[i]] = "";
}
// Miyay jiri kartaa getParamKeys ama shaqo la mid ah tan, ama xitaa getSortedParamKeys?
var newParams = [];
for(param in newRef.params)
{
newParams.push(param);
}
newParams.sort(newRef.getSorter());
var required = newRef.getRequiredParams();
var paramList = $(".paramlist", $genPane)[0];
for(var i = 0; i < newParams.length; i++)
{
var param = newParams[i];
var paramBox;
if(descs[param])
{
paramBox = document.getElementById("preloadedparamrow").cloneNode(true);
var label = $('.paramdesc', paramBox);
if(required[param])
{
label.addClass("required");
$('.delete-field', paramBox).remove(); // ha u oggolaan dadka inay ka saaraan goobaha loo baahan yahay
}
else
{
this.activateRemoveField(paramBox);
}
label.text(descs[param]);
// Asal ahaan waa koodh la mid ah nameHbox ee kor ku xusan
label.attr("for", this.NEW_PARAM_PREFIX + param);
if(param == 'accessdate')
$('.paramvalue', paramBox).val(this.dateFormatter.format(new Date));
}
else
{
// Tuurista qaladka halkan macno ma samaynayso haddii goobaha uu isticmaalahu ku daray la koobi karo.
// throw new Error("Sharaxaad aan la qeexin ee cabbirka: " + param);
paramBox = document.getElementById("addedparamrow").cloneNode(true);
var nameTextbox = $(".paramdesc", paramBox)[0];
nameTextbox.setAttribute("value", param);
}
paramBox.id = "";
this.activateRemoveField(paramBox);
$(".paramvalue", paramBox)[0].id = this.NEW_PARAM_PREFIX + param;
//paramBox.childNodes[2].value = newRef.params[param]; // Waxay keentaa in cabbiradu dintaan. Maxay tahay sababtu?
paramList.appendChild(paramBox);
}
$(citePanes).prepend($genPane);
},
/**
* Abuur oo soo celi curiye qarsoon oo haya curiyeyaasha shabakadda (template elements)
* (curiyeyaasha meel-qabashada ee dambe la nuqul iyo oo lagu buuxiyay xog dhab ah)
*
* @return {jQuery} $root Curiyaha xididka qarsoon ee haya shabakadaha
*/
createTemplateElement: function() {
var $root = $('<div>', {
id: 'proveit-templates'
});
// Dummy cite pane
var dummyCite = $('<div>', {
id: 'dummyCitePane',
"class": 'typepane'
});
var $addRefNameRow = this.createReferenceNameRow();
//$('input', $addRefNameRow).attr('id', 'addrefname');
//$('label', $addRefNameRow).attr('for', 'addrefname');
dummyCite.append($addRefNameRow);
dummyCite.append($('<div>', {"class": 'paramlist'}));
$root.append(dummyCite);
var preloadedparam = $('<div>', {
id: 'preloadedparamrow',
"class": 'preloadedrow input-row'
}).append($('<label>', {
"class": 'paramdesc'
}));
var paramvalue = $('<input>', {
"class": 'paramvalue',
tabindex: 0
});
preloadedparam.append(paramvalue);
var deleteButton = $('<button>', {
"class": 'delete-field',
tabindex: -1
}).text('tirtir goobta');
deleteButton.button({
icons: {
primary: 'ui-icon-close'
},
text: false
});
preloadedparam.append(deleteButton);
$root.append(preloadedparam);
var addedparam = $('<div>', {
id: 'addedparamrow',
"class": 'addedrow input-row'}).
append($('<input>', {
"class": 'paramdesc',
tabindex: 0
})).
append(paramvalue.clone()).
append(deleteButton.clone());
$root.append(addedparam);
return $root;
},
/**
* Waxay abuurtaa saf loo isticmaalo in lagu geliyo sifo magac ee ref (<ref name="..." />)
*
* @return {jQuery} <ref> safka magaca
*/
createReferenceNameRow: function() {
// div.ref-name-row
var $refNameRow = $('<div>', {
"class": 'ref-name-row',
tabindex: -1
});
var refLabel = $('<label>', {
"for": 'editrefname',
title: 'Kani waa aqoonsi gaar ah oo loo isticmaali karo in lagu tixraaco tixraacan meel kale oo ka mid ah bogga.',
"class": 'paramdesc'
}).text('magaca <ref>');
$refNameRow.append(refLabel);
$refNameRow.append($('<input>', {
id: 'editrefname',
"class": 'paramvalue',
tabindex: 0
}));
return $refNameRow;
},
/**
* Abuur ProveIt HTML GUI
*/
createGUI: function()
{
if(this.getGUI().length > 0)
{
// GUI hore ayaa loo abuuray
return false;
}
// CSS-ka JqueryUI badan: http://blog.jqueryui.com/2009/06/jquery-ui-172/
var gui = $('<div>', {id: this.GUI_ID});
var $tabs = $('<div>', {id: 'proveit-tabs'});
var created = $('<h1>');
var createdLink = $('<a>').attr({title: 'Waxaa abuuray Shaybaarka ELC ee ku yaal Georgia Tech',
href: 'http://proveit.cc.gatech.edu',
target: '_blank'});
// Astaanta ugu weyn ee kor-midig
var logo = $('<img>' ).attr( {src: 'https://upload.wikimedia.org/wikipedia/commons/0/0d/ProveIt_user_interface_logo.png', alt: 'ProveIt', height: 30, width: 118 } );
createdLink.append(logo);
created.append(createdLink);
// Badhanka yaraynta/weynaynta (Minimize/maximize)
var showHideButton = $('<button>', {
id: 'proveit-show-hide-toggle'
} ).text('tus/qari');
created.append(showHideButton);
$tabs.append(created);
var header = $('<ul>');
var view = $('<li>');
// Xiriiriyaha tabka Aragtida (View)
var viewTab = $('<a/>', {id: 'proveit-view-tab', "class": 'tab-link', href: '#proveit-view-edit-panel'}).text('Tixraacyada (');
var numRefs = $('<span>').attr({id: 'numRefs'}).text('0');
viewTab.append(numRefs, ')');
view.append(viewTab);
header.append(view);
var add = $('<li>');
// Xiriiriyaha tabka Ku Darista (Add)
var addTab = $('<a>').attr({id: 'proveit-add-tab', "class": 'tab-link', href: '#proveit-add-panel'}).text('Ku dar Tixraac');
add.append(addTab);
header.append(add);
$tabs.append(header);
// Muraayadda Aragtida iyo Wax-ka-beddelka
var viewEditPanel = $('<div>', {id: 'proveit-view-edit-panel'});
// Muraayadda aragtida ee loo isticmaalo soo bandhigidda tixraacyada; dhexda tabka aragtida
var viewPane = $('<div>', {id: 'view-pane'});
var viewScroll = $('<div>', {"class": 'scroll',
style: 'height: 210px;'});
// Curiyaha xididka ee liiska tixraaca
var refTable = $('<table>', {id: 'refs'});
var dummyRef = $('<tr>', {id: 'dummyRef',
style: 'display: none;'});
dummyRef.append($('<td>', {"class": 'number'})).
append($('<td>', {"class": 'type'})).
append($('<td>', {"class": 'title'}));
//append($('<td>', {"class": 'details'}));
var editTd = $('<td>', {"class": 'edit'}).
append($('<button>', {text: 'wax ka beddel'}));
dummyRef.append(editTd);
refTable.append(dummyRef);
viewScroll.append(refTable);
viewPane.append(viewScroll);
viewEditPanel.append(viewPane);
// div#edit-pane, dhexda tabka aragtida
var editPane = $('<div>', {id: 'edit-pane', style: 'display: none'});
// div#edit-fields
var editFields = $('<div>', {id: 'edit-fields',
"class": 'inputs scroll',
style: 'height: 170px',
tabindex: -1});
var refNameRow = this.createReferenceNameRow();
// div.paramlist
var paramList = $('<div/>', {"class": 'paramlist'});
editFields.append(refNameRow);
editFields.append(paramList);
editPane.append(editFields);
// div#edit-buttons, qayb ka mid ah muraayadda wax-ka-beddelka
var editButtons = $('<div/>', {id: 'edit-buttons'});
var addFieldButton = $('<button/>', {style: 'margin-right: 50px;'}).
append('ku dar goob');
editButtons.append(addFieldButton);
var reqSpan = $('<span/>', {"class": 'required',
text: 'geesinimo (bold)'});
editButtons.append(reqSpan).
append(' = goobta loo baahan yahay');
var saveButton = $('<button/>', {"class": 'right-side accept',
text: 'cusboonaysii foomka wax-ka-beddelka'});
editButtons.append(saveButton);
var cancelButton = $('<button/>', {"class": 'right-side cancel',
text: 'jooji'});
editButtons.append(cancelButton);
editPane.append(editButtons);
viewEditPanel.append(editPane);
$tabs.append(viewEditPanel);
// Muraayadda Ku Darista
var addPanel = $('<div/>', {id: 'proveit-add-panel'});
var addFields = $('<div/>', {id: 'add-fields',
"class": 'inputs scroll',
style: 'height: 170px',
tabindex: -1});
var cite = $('<div/>', {style: 'display: none',
id: 'cite',
"class": 'input-row'});
var refCiteTypeLabel = $('<label/>', {'for': 'citemenu',
"class": 'paramdesc required',
text: 'Nooca tixraaca'});
cite.append(refCiteTypeLabel);
var citemenu = $('<select/>', {id: 'citemenu',
change: function()
{
proveit.changeAddPane(citemenu.get(0));
}});
var citeTypes = this.CiteReference.getTypes();
var descs = this.getDescriptions();
for(var i = 0; i < citeTypes.length; i++)
{
citemenu.append($('<option/>', {value: citeTypes[i],
text: descs[citeTypes[i]]}));
}
cite.append(citemenu);
addFields.append(cite);
addFields.append($('<div/>', {"class": 'addpanes',
id: 'citepanes',
tabindex: -1}));
var citation = $('<div/>', {style: 'display: none',
id: 'citation',
"class": 'input-row'});
var refCitationTypeLabel = refCiteTypeLabel.clone().attr('for', 'citationmenu');
citation.append(refCitationTypeLabel);
var citationmenu = $('<select/>', {id: 'citemenu',
change: function()
{
proveit.changeAddPane(citationmenu.get(0));
}});
var citationTypes = ['web', 'book', 'journal', 'encyclopedia', 'news', 'patent'];
for(var j = 0; j < citationTypes.length; j++)
{
citationmenu.append($('<option/>', {value: citationTypes[i],
text: descs[citationTypes[i]]}));
}
citation.append(citationmenu);
addFields.append(citation).
append($('<div/>', {"class": 'addpanes',
id: 'citationpanes', style: 'display: none;'}));
addPanel.append(addFields);
// Badhannada ku darista, qayb ka mid ah tabka ku darista
var addButtons = $('<div/>', {id: 'add-buttons'});
addButtons.append($('<button/>', {style: 'margin-right: 50px;',
text: 'ku dar goob'})).
append(reqSpan.clone()).
append(" = loo baahan yahay").
append(saveButton.clone().text('geliyo sanduuqa wax-ka-beddelka')).
append(cancelButton.clone());
addPanel.append(addButtons);
$tabs.append(addPanel);
gui.append($tabs);
$(document.body).prepend(gui);
var cancelEdit = function() {
$("#edit-pane").hide();
$("#view-pane").show();
};
// deji tab-yada
$tabs.tabs({
collapsible: true,
active: false, // Bilowgii dhammaantood way laabnaayeen
beforeActivate: function(event, ui)
{
// TODO: Dooro shayga hadda la daray ee ku jira liiska tixraaca, marka loo guurayo tabka ku darista loona guurayo tabka aragtida
// Maba dhacdo dhacdadan gujin tab ah?
var isClickOnTab = event.currentTarget && $(event.currentTarget).is('.tab-link');
// Ku guurista ku darista (oo ay ku jirto weynaynta)
if(ui.newPanel.is(addPanel))
{
cancelEdit();
proveit.changeAddPane(document.getElementById(proveit.togglestyle ? 'citemenu' : 'citationmenu'));
}
if(ui.newPanel.length === 0)
{
if(isClickOnTab)
{
// Ha oggolaan in la laabo adigoo gujinaya tab.
event.preventDefault();
// Gujiyay tabka aragtida markii aragtida ama wax-ka-beddelku ay muuqdeen
if(ui.oldPanel.is(viewEditPanel))
{
// Jooji wax-ka-beddelka oo tusi liiska tixraaca
cancelEdit();
}
} else
{
// Waxay gujiyeen badhanka tus/qari; ha laabo oo cusboonaysii astaanta.
showHideButton.button("option", "icons", { primary: 'ui-icon-triangle-1-n' } );
}
} else
{
// Waxaa jira muraayad cusub oo muuqata; cusboonaysii astaanta.
showHideButton.button("option", "icons", { primary: 'ui-icon-triangle-1-s' } );
}
}
});
// ku dar badhannada guddiga
$("#add-buttons button:first").button({
icons: {
primary: 'ui-icon-circle-plus'
}
}).click(function()
{
proveit.addPaneRow(document.getElementById("proveit-add-panel"));
})
.next().next().button({
icons: {
primary: 'ui-icon-circle-check',
secondary: 'ui-icon-circle-arrow-e'
}
}).click(function()
{
proveit.addReference(proveit.getReferenceFromAddPane($('#proveit-add-panel .typepane').get(0)));
$tabs.tabs( { active: 0 } ); // Dhaqaaji muraayadda aragtida
$("div.scroll, #view-pane").scrollTop(100000); // u wareeji tixraaca cusub
}).next().
button({
icons: {
primary: 'ui-icon-circle-close'
}
}).click(function()
{
$tabs.tabs( { active: 0 } ); // Dhaqaaji muraayadda aragtida
});
// jooji badhannada
$("button.cancel").click(cancelEdit);
// badhannada guddiga wax-ka-beddelka
$("#edit-buttons button:first").button({
icons: {
primary: 'ui-icon-circle-plus'
}
}).click(function()
{
proveit.addPaneRow($("#edit-pane"));
}).
next().next().
button({
icons: {
primary: 'ui-icon-circle-check'
}
}).next().button({
icons: {
primary: 'ui-icon-circle-close'
}
});
// abuur badhanka yaraynta
showHideButton.button({
icons: {
primary: 'ui-icon-triangle-1-n'
},
text: false
});
var viewAndAdd = $(viewEditPanel).add(addPanel);
this.viewAndAddPanes = viewAndAdd;
var prevActiveTabPaneIndex = 0;
function minimize()
{
prevActiveTabPaneIndex = $tabs.tabs('option', 'active');
// Laabo dhammaan tab-yada
$tabs.tabs('option', 'active', false);
}
function maximize()
{
$tabs.tabs('option', 'active', prevActiveTabPaneIndex);
}
this.toggleViewAddVisibility = function()
{
// Dhammaan tab-yada waa la laabay
if($tabs.tabs('option', 'active') === false) {
maximize();
} else {
minimize();
}
};
showHideButton.click(this.toggleViewAddVisibility);
this.scanForReferences();
$("#refs tr").eq(0).click().click(); // dooro shayga koowaad ee liiska. TODO: Maxaa laba .click ah?
// beddel midabada safka
$("#refs tr:even").addClass('light');
$("#refs tr:odd").addClass('dark');
gui.append(this.createTemplateElement());
},
/**
* Tixraaca ururinta ka kooban labada shay, aragtida iyo tab-yada ku darista. Waxaa bilaabi doona createGUI, markaa waa mid aan eber ahayn haddii ProveIt uu muuqdo
*
* @type {$NodeSet}
*/
viewAndAddPanes: null,
/*
* Wuxuu helayaa habaynta jQuery ee ProveIt GUI, taas oo noqon doonta mid madhan haddii ProveIt ausan bilaaban
*
* @return {$Node} xididka ProveIt
*/
getGUI: function()
{
return $('#' + this.GUI_ID);
},
/**
* Qari ProveIt gabi ahaanba
*/
hide: function()
{
this.getGUI().hide();
},
/**
* Tusi ProveIt
*/
show: function()
{
this.createGUI();
this.getGUI().show();
},
/**
* Beddel muuqaalka guud. Haddii hadda la qariyo, u tag yaraynta. Haddii la yareeyay, weyneeyo. Haddii la weyneeyo, qari
*/
toggleVisibility: function()
{
if(this.getGUI().is(':visible'))
{
if(this.viewAndAddPanes.is(':visible')) // la weyneeyay
{
this.hide();
}
/*
* Haddii hore loo weyneeyay, waxaan yareyneynaa ka dib marka aan qarinno, markaa marka aan tusno, waxay noqon doontaa mid horay loo yareeyay.
* Haddii la yareeyay, waanu weynaynaynaa
*/
this.toggleViewAddVisibility();
}
else
{
this.show();
}
},
/**
* Beddel muuqaalka muraayadaha aragtida iyo ku darista. Waxaa bilaabay createGUI
*
* @method toggleViewAddVisibility
*/
toggleViewAddVisibility: null,
/**
* Waxay abuurtaa safka refbox iyo dhammaan carruurta, si ay u isticmaasho addNewElement, iyo marka la cusboonaysiinayo
*
* @param {AbstractReference} ref tixraaca laga soo saarayo
* @param {Boolean} isReplacement haddii ay run tahay, tani waxay beddeshaa shay kale oo refbox ah, markaa lambar lama qoondeyn doono, tirada ayaana la cusboonaysiin doono.
* @return {Node} safka refbox cusub ee refbox
*/
makeReferenceBoxRow: function(ref, isReplacement)
{
var refName = ref.name; //waxaa laga yaabaa inay noqoto null ama madhan
//var refbox = this.getReferenceBox();
var newchild = $('<tr><td class="number"></td><td class="type"></td><td class="title"></td><td class="edit"></td></tr>').get(0);
// la saaray <span class="pointers"></span>
// la saaray <td class="details"></td>
if(!ref.isValid())
{
// Calaamadi sida aan sax ahayn.
$(newchild).addClass('invalid');
}
// qabso curiyeyaasha u baahan in laga beddelo
var neweditimage = $('.edit button', newchild).get(0);
var thisproveit = this;
var title = '';
var shortTitle = '';
if(ref.params['title'] != null)
{
title = ref.params['title'];
shortTitle = this.truncateTitle(title);
}
$('td.title', newchild).text(shortTitle);
$('td.title', newchild).attr('title', title);
// wax ka qabashada kala duwanaanshaha xogta taariikhda
var formattedYear = '';
if(ref.params['year'])
formattedYear = ref.params['year'];
else if (ref.params['date'])
{
var yearMatch = ref.params['date'].match(/^([12]\d{3})/);
if(yearMatch)
{
formattedYear = yearMatch[1];
}
}
//$('td.year', newchild).text(formattedYear);
// wax ka qabashada kala duwanaanshaha xogta qoraha
var formattedAuthor = '';
if(ref.params['author'])
formattedAuthor = ref.params['author'];
else if (ref.params['last'])
{
// if(ref.params['first'])
// formattedAuthor = ref.params['last'] + ', ' + ref.params['first'];
// else
formattedAuthor = ref.params['last'];
}
if(ref.params['coauthors'] || ref.params['last2'])
formattedAuthor += ' <i>et al.</i>';
// dhis unugga "faahfaahinta" iyadoo lagu saleynayo joogitaanka xogta qoraha/sanadka
// var details = '';
// if (formattedYear != '' && formattedAuthor != '')
// details = '(' + formattedAuthor + ', ' + formattedYear + ')';
// else if (formattedYear != '')
// details = '(' + formattedYear + ')';
// else if (formattedAuthor != '')
// details = '(' + formattedAuthor + ')';
// $('td.details', newchild).html(details);
// soo saar URL iyadoo lagu saleynayo nooca tixraaca
var icon = ref.getIcon(), url = '', refType = ref.type;
switch(refType)
{
case 'web':
url = ref.params['url'];
break;
case 'book':
if(ref.params['isbn'] != null)
url = mw.util.getUrl( 'Special:BookSources', { isbn: ref.params['isbn'] } );
break;
case 'journal':
case 'conference':
if(ref.params['doi'] != null)
url = 'http://dx.doi.org/' + ref.params['doi'];
break;
case 'news':
url = ref.params['url'];
break;
case 'episode':
url = 'http://www.imdb.com/find?s=ep&q=' + escape(ref.params['title']);
break;
}
$('td.type', newchild).css('background-image','url('+icon+')');
var authorByline = '', yearByline = '', refTypeByline = '';
if(formattedAuthor != '')
authorByline = 'Qoraa: <span class="author">' + formattedAuthor + '</span>';
if(formattedYear != '')
yearByline = 'Taariikh: <span class="date">' + formattedYear + '</span>';
if(refType != null)
{
var displayType = ref.getTypeForDisplay(), formattedRefType = displayType;
$('td.type', newchild).attr('title', displayType);
if(url != '')
formattedRefType = '<a href="' + url + '" target="_blank">' + formattedRefType + '</a>';
refTypeByline = 'Nooca: <span class="type">' + formattedRefType + '</span>';
}
//alert("authorByline: " + authorByline + "\n yearByline: " + yearByline + "\n refTypeByline: " + refTypeByline);
var byline = '', separator = ' | ';
if(refType == 'raw')
{
byline = refTypeByline + separator + mw.html.escape(ref.toString());
}
else if(authorByline != '') // a??
{
if(yearByline != '') // ad?
{
if(refTypeByline != '') // adt
byline = authorByline + separator + yearByline + separator + refTypeByline;
else // ad-
byline = authorByline + separator + yearByline;
}
else // a-?
{
if(refTypeByline != '') // a-t
byline = authorByline + separator + refTypeByline;
else // a--
byline = authorByline;
}
}
else // -??
{
if(yearByline != '') // -d?
{
if(refTypeByline != '') // -dt
byline = yearByline + separator + refTypeByline;
else // -d-
byline = yearByline;
}
else // --?
{
if(refTypeByline != '') // --t
byline = refTypeByline;
// looma baahna ---
}
}
byline = '<p>' + byline + '</p>';
//alert(byline);
// abuur <div> la ballaaray
var expanded = $('<div />',{
"class": 'expanded'
});
// ku dar infobar sanduuqa macluumaadka la ballaariyay
$(expanded).append(byline);
// ku dar sanduuqa macluumaadka la ballaariyay ciwaanka <td>
$('td.title', newchild).append(expanded);
if(!isReplacement)
{
// hel lambarka tixraaca adoo tirinaya tirada tixraacyada (tani waxaa ku jira dummy ref, laakiin ma aha kan aan abuureyno)
var numRefs = $('#refs tr').length;
$('td.number', newchild).text(numRefs);
$('#numRefs').text(numRefs); // cusboonaysii tirada tixraacyada ee tabka aragtida
}
// hawlwadeenka dhacdada ee doorashada tixraaca)
$(newchild).click(function() {
thisproveit.highlightTargetString(ref.orig);
//thisproveit.highlightTargetString(ref.orig);
$("#refs tr").removeClass('selected');
$(newchild).addClass('selected');
});
var doEdit = function() {
thisproveit.updateEditPane(ref);
$("#view-pane").hide();
$("#edit-pane").show();
};
var citationStrings = ref.getCitationStrings();
//var pointers = $('.pointers', newchild);
var allCitations = $('<span class="all-citations" />');
for(var i = 0; i < citationStrings.length; i++)
{
var dividend = i + 1;
var colName = "";
while(dividend > 0)
{
var mod = --dividend % 26;
colName = String.fromCharCode(97 + mod) + colName; // a = 97
dividend = Math.floor(dividend / 26);
}
var citationHolder = $('<a href="#">' + colName + '</a>');
// Xidh (Bind) i
var clickFunc = (function(i)
{
return function()
{
var last = 0, j = 0;
var text = proveit.getTextboxText();
for(j = 0; j < i; j++)
{
last = text.indexOf(citationStrings[j], last);
// Ma aha in la dhaco. Waxay tilmaamaysaa in xadhigyada oraahdu ay dhaceen waqtigoodii (out of date).
if(last == -1)
{
proveit.log("citationStrings[" + j + "]: " + citationStrings[j] + " la ma helin. Soo celinayaa.");
return false;
}
last += citationStrings[j].length;
}
var startInd = text.indexOf(citationStrings[i], last);
if(startInd == -1)
{
proveit.log("citationStrings[" + i + "]: " + citationStrings[i] + " la ma helin.");
}
else
{
proveit.highlightLengthAtIndex(startInd, citationStrings[i].length);
}
return false;
};
})(i);
citationHolder.click(clickFunc);
allCitations.append(citationHolder);
}
if(citationStrings.length > 1)
{
var newP = $('<p />');
newP.append('Tixraacan waxaa lagu xusay maqaalka <span class="num-citations">' + citationStrings.length + ' jeer</span>: ').append(allCitations);
expanded.append(newP);
}
// badhannada wax-ka-beddelka
if(ref.type != 'raw')
{
// BADHANKA WAX-KA-BEDDELKA YAR
// abuur badhan
var smallEditBtn = $('<button />',{
text: 'wax ka beddel'
});
// beddel badhanka
$(smallEditBtn).button({
icons: {
primary: 'ui-icon-pencil'
},
text: false
});
// hawlwadeenka dhacdada gujinta badhanka
smallEditBtn.click(doEdit);
// ku dar badhanka
$('.edit', newchild).append(smallEditBtn);
// BADHANKA WAX-KA-BEDDELKA WEYN
// abuur badhan
var editBtn = $('<button />',{
"class": 'edit',
text: 'wax ka beddel tixraacan'
});
// beddel badhanka
$(editBtn).button({
icons: {
primary: 'ui-icon-pencil'
},
text: true
});
// hawlwadeenka dhacdada gujinta badhanka
editBtn.click(doEdit);
// ku dar badhanka
expanded.append(editBtn);
// HAWLWADEENKA DHACDADA SAFKA
$(newchild).dblclick(doEdit);
}
else
{
// waxaa looga baahan yahay in dhammaan safafka la ilaaliyo dherer isku mid ah
$('.edit', newchild).append(' ');
}
// badhanka ibid
if(citationStrings.length > 0)
{
// abuur badhan
var ibidBtn = $('<button />',{
"class": 'insert',
text: 'geli tixraacan halka uu khaanad-tilmaameedku (cursor) joogo'
});
// beddel badhanka
$(ibidBtn).button({
icons: {
primary: 'ui-icon-arrowthick-1-e'
},
text: true
});
// hawlwadeenka dhacdada gujinta badhanka
ibidBtn.click(function(){
thisproveit.insertRefIntoMWEditBox(ref, false);
return false;
});
// ku dar badhanka
expanded.append(ibidBtn);
}
return newchild;
},
/**
* Gaabisa ciwaanka si uu ugu habboonaado safka refbox ee ProveIt.
* @param {String} title ciwaanka la gaabinayo
* @return {String} ciwaanka la gaabiyay
*/
truncateTitle: function(title)
{
var MAX_LENGTH = 86;
var truncated = title;
if(title.length > MAX_LENGTH)
{
truncated = truncated.substring(0, MAX_LENGTH);
var lastSpacePos = truncated.lastIndexOf(' ');
if(lastSpacePos != -1)
{
truncated = truncated.substr(0, lastSpacePos);
truncated += " ...";
}
}
return truncated;
},
/**
* Kaliya in loo isticmaalo gudaha si loogu daro oraahyada liiska
*
* @param {AbstractReference} ref tixraaca lagu darayo
*/
addNewElement: function(ref)
{
var refbox = this.getReferenceBox();
$(refbox).append(this.makeReferenceBoxRow(ref, false));
}
}, window.proveit);
/**
* Habka static (Static method). Wuxuu soo celinayaa noocyada tixraaca Cite ee saxda ah
* @for CiteReference
* @static
* @return {Array} safka noocyada habka cite
*/
proveit.CiteReference.getTypes = function()
{
return ["web", "book", "journal", "conference", "encyclopedia", "news", "newsgroup", "press release", "interview", "episode", "AV media"];
};
proveit.split._compliantExecNpcg = /()??/.exec("")[1] === undefined; // NPCG: nonparticipating capturing group
proveit.split._nativeSplit = String.prototype.split;
proveit.setup();
}( mediaWiki, jQuery ) );
// Local Variables:
// js2-basic-offset: 8
// End:
// </nowiki>
m2r4bhp06laz0ll90y8dzrkqr8rkx44
MediaWiki:Gadget-ProveIt-classic.css
8
53903
311105
2026-10-25T16:43:35Z
Isma4l
41797
Abuuray
311105
css
text/css
/* _____________________________________________________________________________
* | |
* | === WARNING: GLOBAL GADGET FILE === |
* | Changes to this page affect many users. |
* | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. |
* |_____________________________________________________________________________|
*/
/*
* Imported from Git commit 72b9abf17fe33ab8af55a7cfb074a9beb35365ab as of 2015-03-09 from https://github.com/proveit-js/proveit
* Changes should be made through that GitHub project.
*/
div#proveit {
position: fixed;
bottom: 0px;
right: 20px;
z-index: 10000;
/*height: 300px;*/
width: 750px;
background: #fff;
/* border: 1px solid #666;
font-size: small !important;
opacity: 0.3;
filter: alpha(opacity=30); // older IE */
font-size: small;
}
div#proveit a img {
border: 0;
}
div#proveit h1 {
float: right;
width: 50%;
text-align: right;
font-size: 11px;
margin: 5px 5px 0 0; padding: 0;
font-weight: normal;
border: none;
}
div#proveit h1 a {
/* color: #00254c;
text-decoration: none; */
margin: 0 30px 0 0; padding: 0;
}
/* div#proveit h1 span {
font-weight: bold;
/* font-size: 14px; */
div#proveit h1 button.ui-button-icon-only {
margin: 3px 5px 0 0;
height: 25px; width: 25px;
}
div#proveit div#proveit-view-edit-panel, div#proveit div#proveit-add-panel {
padding: 5px;
}
/*** BEGIN CSS FOR REFLIST ***/
div#proveit table {
border-collapse: collapse;
width: 100%;
margin: 0; padding: 0;
}
div#proveit tr.light td {
background-color: #fff;
}
div#proveit tr.dark td {
background-color: #eeeeee;
}
div#proveit tr.invalid td {
color: #ff0000;
}
div#proveit tr.selected td {
background-color: #2682c7;
}
div#proveit tr:hover td {
background-color: #fddc05;
color: #000;
}
div#proveit tr.selected:hover td {
background-color: #2682c7;
}
div#proveit td {
padding: 5px 3px 3px 3px;
vertical-align: top;
}
div#proveit td.number {
font-size: 12px;
color: #666;
text-align: right;
}
div#proveit tr.selected td.number {
color: #ccc;
}
/*
td.author {
padding-left: 0.5em;
}
td.year{
width: 50px;
text-align: center;
}
*/
/*div#proveit td.details {}*/
div#proveit td.type {
width: 20px;
background-repeat: no-repeat;
background-position: 50% 5px;
padding: 0 5px;
}
div#proveit td.title {
/* width: 460px; */
font-size: 12px;
color: #000;
text-align: left;
/* font-weight: bold; */
}
div#proveit tr.selected td.title {
color: #fff;
}
div#proveit td.edit {}
div#proveit td.edit button {
height: 20px;
width: 20px;
}
div#proveit tr.selected td.edit button {
visibility: hidden;
}
/*
div#proveit td.ibid button {
width: 20px; height: 20px;
}
*/
div#proveit tr.selected div.expanded {
display: block;
}
div#proveit div.expanded {
font-size: x-small;
padding: 5px 0;
display: none;
width: auto;
}
div#proveit div.expanded p {
color: #ccc;
}
div#proveit div.expanded p span {
color: #fff;
}
div#proveit div.expanded a:link, div#proveit div.expanded a:visited {
color: #fff;
text-decoration: underline;
}
div#proveit div.expanded a:hover {
color: #fff;
text-decoration: none;
}
div#proveit div.expanded span.all-citations a {
margin: 0 0.5em;
text-transform: uppercase;
}
div#proveit div.expanded button {
margin-right: 1em;
}
/*** END CSS FOR REFLIST ***/
div#proveit div.inputs {
border: 0;
margin: 0; padding: 3px;
}
div#proveit div.inputs div.input-row, div#proveit div.inputs div.ref-name-row {
display: block;
margin: 0 0 0.8em 0; padding: 0;
}
/*div.inputs div.hidden{
display: none;
}*/
div#proveit div.ref-name-row label {
cursor: help;
}
div#proveit div.inputs label.paramdesc {
display: block;
font-size: 12px;
text-transform: none;
float: left;
width: 200px;
text-align: left;
padding-top:5px;
}
div#proveit div.inputs input.paramdesc {
/*display: block;*/
font-size: 12px;
text-transform: none;
/*float: left;*/
width: 180px;
text-align: left;
padding-right: 10px;
}
div#proveit div.inputs input.paramvalue {
width: 480px; height: 18px;
font-size: 12px;
border: 1px solid #ccc;
}
div#proveit div.inputs select {
width: auto;
font-size: 12px;
}
div#proveit div.inputs button {
font-size: 11px;
}
div#proveit div.input-row button.delete-field
{
height: 20px; width: 20px;
margin-left: 5px;
line-height: 0;
}
div#proveit div#add-buttons, div#proveit div#edit-buttons {
margin-top: 5px;
font-size: 11px;
}
div#proveit button.right-side {
float: right;
}
div#proveit .pointers {
width: 2em;
overflow: scroll;
}
div#proveit div#edit-fields {
color: #fff;
background-color: #2682c7;
}
div#proveit .scroll {
display: block;
overflow: scroll;
overflow-y: scroll;
overflow-x: hidden;
border: 1px solid #dddddd !important;
}
div#proveit .required {
font-weight: bold;
/*color: #FF0084;*/
/*color: #ff0000;*/
}
/*** MISC STYLES ***/
div#proveit .notification {
font-size: 10px;
padding-left: 8px;
display: none;
}
div#proveit .hidden {
display: none;
}
div#proveit input {
padding: 0px;
}
/*
jqueryUI class modifications start here
*/
div#proveit a.tab-link {
font-weight: bold;
}
div#proveit ul.ui-tabs-nav {
position: static;
}
div#proveit button.ui-button-icon-only {
margin: 0; padding: 0;
height: 20px; width: 20px;
font-size: 11px;
vertical-align: top;
}
/* Template elements */
#proveit-templates {
display: none;
}
ay0o6lo07hl7ddag6lmkfh4k37hxeqf
MediaWiki:Gadget-ProveIt-classic
8
53904
311106
2026-10-25T16:44:48Z
Isma4l
41797
/* */
311106
wikitext
text/x-wiki
[[:en:Wikipedia:ProveIt|ProveIt]] (noocii hore) waa qalab ku dara hab-maamuuska isticmaalaha garaafika ah si loo helo, loona beddelo, loona daro laguna xuso tixraacyada (<span class="plainlinks">[{{fullurl:Fallacy|action=edit&withJS=MediaWiki:Gadget-ProveIt-classic.js&withCSS=MediaWiki:Gadget-ProveIt-classic.css}} tusaale]</span>). Tani waa nooca caadiga ah, ee asalka ah ee qalabkan.
axdv7nut4983zbmefmyn9wvasol40u5
MediaWiki:Gadget-Shortdesc-helper.js
8
53905
311107
2026-10-25T16:46:36Z
Isma4l
41797
Abuuray
311107
javascript
text/javascript
// <nowiki>
/* _____________________________________________________________________________
* | |
* | === DIGRIIN: FAYLKA GADGET-KA CAALAMIGA AH === |
* | Isbeddellada faylkan waxay saameeyaan isticmaaleyaal badan. |
* | Fadlan kala hadal isbeddellada bogga wadahadalka ama [[WT:Gadget]] ka hor inta aadan wax ka beddelin.|
* |_____________________________________________________________________________|
*
*/
/**
* Caawiyaha Sharaxaada Gaaban (Shortdesc helper): v3.5.3
* Dokumentiyada waxaa laga helaa en.wikipedia.org/wiki/Wikipedia:Shortdesc_helper
* Dokumentiyada waxaa ku jira tilmaamo loogu talagalay isticmaalka qalabkan ku jira wikis-yada kale.
* Waxay tusaysaa sharaxaadaha gaaban, waxayna ogolaanaysaa in la soo dejiyo sharaxaadyada wikidata, lagu daro sharaxaadaha,
* iyo fududaynta wax-ka-beddelkooda iyadoo bixinaysa badhammo iyo sanduuq gelinta si taas loo sameeyo.
* Laga soo qaatay [[MediaWiki:Gadget-Page descriptions.js]] oo uu qoray TheDJ.
*/
'use strict';
window.sdh = window.sdh || {};
/**
* Ku deji fariimaha adoo isticmaalaya mw.message.
* window.sdh.messages waxaa loo isticmaali karaa in meesha laga saaro fariimahan (tusaale ahaan turjumaadaha).
*/
window.sdh.initMessages = function () {
/* Fariimahan waxaa lagu isticmaalaa dhammaan wikis-yada waxaana loo baahan yahay turjumaad. */
var messages = {
/** Ka saar faallada tan soo socota si aad u beddesho fariimaha lagu isticmaalo wadahadalka dejinta */
/*
"libSettings-settings-title": "Dejinta",
"libSettings-save-label": "Kaydi dejinta",
"libSettings-cancel-label": "Jooji",
"libSettings-showDefaults-label": "Tusi heerarka caadiga ah",
"libSettings-showCurrentSettings-label": "Tusi dejinta hadda",
"libSettings-save-success-message": "Dejinta $1 si guul leh ayaa loo kaydiyay.",
"libSettings-save-fail-message": "Waa lagu guuldarraystay in la kaydiyo dejinta $1.",
*/
/* Fariimaha dejinta */
'sdh-settingsDialog-title': 'Dejinta caawiyaha Sharaxaada Gaaban',
'sdh-header-general': 'Guud',
'sdh-header-appearance': 'Muuqaalka',
'sdh-AddToRedirect-label': 'U oggolow in lagu daro sharaxaad gaaban redirect-yada',
'sdh-AddToRedirect-help': 'Marka la calaamadiyo, redirect-yada waxay yeelan doonaan badhanka "ku dar" si loogu daro sharaxaad gaaban. (caadi ahaan waa dansan yahay)',
'sdh-InputWidth-label': 'Ballaca sanduuqa wax-ka-beddelka ee xarfaha (caadi ahaan waa 40)',
'sdh-FontSize-label': 'Baaxadda farta, oo ah boqolkiiba (caadi ahaan waa 100%)',
/* Fariimaha aragtida bilowga ah */
'sdh-missing-description': 'Waa maqan yahay <a href="/wiki/Wikipedia:Short description">sharaxaadda $1</a>',
'sdh-article-label': 'maqaal',
'sdh-redirect-label': 'redirect',
/* Badhannada aragtida bilowga ah */
'sdh-add-label': 'Ku dar',
'sdh-add-title': 'Ku dar sharaxaad gaaban',
'sdh-edit-label': 'Wax ka beddel',
'sdh-edit-title': 'Wax ka beddel sharaxaadda gaaban',
/* Fariimaha wax-ka-beddelka */
'sdh-description-placeholder': 'Sharaxaad gaaban',
'sdh-summary-placeholder': 'Soo koobidda wax-ka-beddelka gaarka ah',
'sdh-save-label': 'Kaydi',
'sdh-save-title': 'Kaydi sharaxaadda',
'sdh-cancel-label': 'Jooji',
'sdh-cancel-title': 'Jooji wax-ka-beddelka',
'sdh-summary-label': 'Soo koobid',
'sdh-summary-title': 'Tusi sanduuqa soo koobidda wax-ka-beddelka',
'sdh-settings-title': 'Dejinta',
/* Fariimaha soo koobidda Wikidata */
'sdh-wd-summary': '([[w:en:Wikipedia:Shortdesc helper|Caawiyaha Sharaxaada Gaaban]])',
'sdh-wd-edit-failed': 'Kaydinta wax-ka-beddelka ee Wikidata way guuldarraysatay.',
'sdh-wd-edit-failed-prefix': '\n\nMacluumaadka ay bixisay Wikidata waa in:\n\n'
};
/**
* Fariimahan uma baahna turjumaad maadaama lagu isticmaalo oo keliya enwiki
* sababtoo ah enwiki waxay leedahay erayga sixirka ah ee {{SHORTDESC:}}.
*/
var enwikiMessages = {
/* Fariimaha dejinta */
'sdh-MarkAsMinor-label': 'Calaamadi wax-ka-beddelka mid yar (minor)',
'sdh-header-Wikidata': 'Wikidata',
'sdh-SaveWikidata-label': 'Kaydi isbeddellada Wikidata',
'sdh-SaveWikidata-help': 'Haddii la cusboonaysiinayo sharaxaadda Wikidata marka la isticmaalayo qoraalka (script).',
'sdh-SaveWikidata-add-label': 'Kaliya marka aysan jirin sharaxaad Wikidata ah (caadi)',
'sdh-SaveWikidata-all-label': 'Dhammaan wax-ka-beddellada',
'sdh-SaveWikidata-never-label': 'Marna',
'sdh-ShowWikidataOption-label': 'Tusi sharaxaadda Wikidata',
'sdh-ShowWikidataOption-always-label': 'Mar walba',
'sdh-ShowWikidataOption-nolocal-label': 'Kaliya marka aysan jirin sharaxaad maxalli ah (caadi)',
'sdh-ShowWikidataOption-never-label': 'Marna',
'sdh-ExportButton-label': 'Ku dar badhan, "dhoofi (export)", si loo cusboonayssiiyo sharaxaadda Wikidata si ay ula mid noqoto sharaxaadda maxalliga ah.',
/* Fariimaha aragtida bilowga ah */
'sdh-wikidata-link-label': 'Wikidata',
'sdh-no-description': 'Boggani si ula kac ah uma laha sharaxaad.',
/* Badhannada aragtida bilowga ah */
'sdh-infoClicky-label': '?',
'sdh-infoClicky-title': 'Gujiso wixii macluumaad ah',
'sdh-override-label': 'Ka gudub (Override)',
'sdh-override-title': 'Ka gudub sharaxaadda gaaban ee hadda',
'sdh-import-label': 'Soo dejiso (Import)',
'sdh-import-title': 'Ka soo dejiso sharaxaadda Wikidata',
'sdh-editimport-label': 'Wax ka beddel oo soo dejiso',
'sdh-editimport-title': 'Wax ka beddel oo ka soo dejiso sharaxaadda Wikidata',
'sdh-export-label': 'Dhoofi (Export)',
'sdh-export-title': 'U dhoofi sharaxaadda gaaban ee maxalliga ah Wikidata',
/* Qoraalka Popup-ka */
'sdh-no-description-popup': 'Sharaxaaddani waa mid si ula kac ah madhan. Eeg <a href = "/wiki/Wikipedia:Short_description#SDNONE">bogga siyaasadeenna ee ku saabsan sharaxaadyada gaaban ee (none)</a> wixii macluumaad dheeraad ah.',
'sdh-override-popup': 'In kasta oo sharaxaaddani lagaga gudbi karo sharaxaad gaaban oo maxalli ah oo kale, lama beddeli karo si toos ah. Tani waxay u badan tahay sababtoo ah waxaa si toos ah u soo saaraya sanduuqa macluumaadka ee maqaalka (infobox) ama template kale. Eeg <a href = "/wiki/Wikipedia:WikiProject_Short_descriptions#Auto-generated_and_bot-generated_descriptions"> siyaasadeenna ku saabsan sharaxaadyada si toos ah loo soo saaray iyo kuwa bot-ku soo saaray</a> wixii macluumaad dheeraad ah.',
'sdh-disambig-popup': 'Sharaxaaddadan gaaban waa in aan la beddelin sababtoo ah waxaa si toos ah u soo saaraya template-ka kala-soocidda (disambiguation) mana u baahna in la beddelo.',
'sdh-useless-popup': 'Soo dejinta sharaxaaddan waa la damiyay maadaama ay tahay mid aad u guud oo aan faa\'iido lahayn.',
/* Fariimaha soo koobidda */
'sdh-summary-changing': 'Wax ka beddelidda [[Wikipedia:Short description|sharaxaadda gaaban]] laga bilaabo $1 ilaa $2',
'sdh-summary-adding-custom': 'Ku daridda [[Wikipedia:Short description|sharaxaadda gaaban]]: $2, iyadoo laga gudbayo sharaxaadda si toos ah loo soo saaray',
'sdh-summary-importing-wikidata': 'Soo dejinta [[Wikipedia:Short description|sharaxaadda gaaban]] ee Wikidata: $2',
'sdh-summary-adding-local': 'Ku daridda [[Wikipedia:Short description|sharaxaadda gaaban]] ee maxalliga ah: $2, iyadoo laga gudbayo sharaxaadda Wikidata $1',
'sdh-summary-adding': 'Ku daridda [[Wikipedia:Short description|sharaxaadda gaaban]]: $2',
/* Fariimaha soo koobidda ee none */
'sdh-summary-changing-none': 'Beddelidda [[Wikipedia:Short description|sharaxaadda gaaban]] laga bilaabo $1 ilaa mid ah oo ah [[WP:SDNONE|si ula kac ah madhan]]',
'sdh-summary-adding-custom-none': 'Ku daridda sharaxaad [[WP:SDNONE|si ula kac ah madhan]], halkii laga heli lahaa sharaxaadda si toos ah loo soo saaray',
'sdh-summary-adding-local-none': 'Ku daridda sharaxaad [[WP:SDNONE|si ula kac ah madhan]], iyadoo laga gudbayo sharaxaadda Wikidata $1',
'sdh-summary-adding-none': 'Ku daridda sharaxaad [[WP:SDNONE|si ula kac ah madhan]]',
/* Fariinta guuldarrada */
'sdh-edit-failed': 'Kaydinta ku daridda ama wax-ka-beddelka sharaxaadda gaaban way guuldarraysatay.',
'sdh-edit-failed-no-template': 'Wax-ka-beddelku wuu guuldarraystay, maadaama aan template sharaxaad gaaban la helin wikitext-ka bogga. Tani waxay u badan tahay khilaaf wax-ka-beddel awgeed.'
};
/**
* Dejinta window.sdh.messages ugu dambayn waxay ka dhigan tahay inay ka sarreyso fariimihii hore
* Sidaas darteed waxay u oggolaanaysaa turjumaadaha inay ka sarreeyaan fariimihii hore.
*/
mw.messages.set( messages );
mw.messages.set( enwikiMessages );
mw.messages.set( window.sdh.messages );
};
window.sdh.main = function () {
/**
* Qaybta ay ku jirto sharaxaadda gaaban, taas oo la go'aamin doono dambe
* iyadoo la baarayo DOM-ka. Waxaa loo isticmaalaa in haddii sharaxaadda gaaban ay ku jirto hordhaca
* ay tahay oo keliya in la soo dejiyo wikitext-ka qaybta 0.
*
* @type {number}
*/
var section;
// Consts
/**
* Xulaha (selector) si loo helo sharaxaadda gaaban ee DOM-ka.
*
* @type {string}
*/
var SDELEMENT = '.shortdescription';
/**
* Xulaha si loo helo template-ka kala-soocidda.
*
* @type {string}
*/
var DISAMBIGELEMENT = '#disambigbox';
/**
* Qaabka raadinta ee helitaanka sharaxaadda gaaban ee wikitext.
* Kooxda 1 ee regex-ka waa sharaxaadda gaaban.
*
* @type {RegExp}
*/
var PATTERN = /\{\{\s*[Ss]hort description\s*\|(.*?)\}\}/;
/**
* Liiska sharaxaadyada Wikidata ee aan ku filnayn faa'iido si toos ah looga soo dejiyo.
*
* @type {Array}
*/
var USELESS_DESCRIPTIONS = [
'Wikimedia project page'
];
/**
* Qaabka xilli-taariikhda (date spans), si loo beddelo hyphen loogana dhigo en dash.
*
* @type {RegExp}
*/
var DATEPATTERN = /(\d\d+)-(\d\d+)/;
/**
* Beddelka xilli-taariikhda.
*
* @type {string}
*/
var DATEREPLACEMENT = '$1–$2';
// Isbeddellada habaynta (Config variables)
var title = mw.config.get( 'wgPageName' );
var namespace = mw.config.get( 'wgNamespaceNumber' );
var wgQid = mw.config.get( 'wgWikibaseItemId' );
var language = mw.config.get( 'wgContentLanguage' );
var canEdit = mw.config.get( 'wgIsProbablyEditable' );
var isRedirect = mw.config.get( 'wgIsRedirect' );
var DBName = mw.config.get( 'wgDBname' );
/**
* onlyEditWikidata waa calaamad goob-oo-dhan ah (site-wide flag).
* Haddii ay run tahay, markaa sharaxaadyada keliya ee wiki-ga waxaa loo malaynayaa inay ku jiraan Wikidata.
* Haddii ay beenta tahay, markaa waxay ka dhigan tahay in sharaxaadaha sidoo kale lagu dari karo iyada oo la adeegsanayo {{SHORTDESC:}}
* (hadda, tani waa kaliya kiiska enwiki).
* Calaamadani waxay wax ka beddeshaa dabeecadda habab kala duwan si loo tusi karo badhamada habboon iyo
* dejinta, oo ka dhigaysa sharaxaadda mid lagu kaydiyo meesha saxda ah.
*
* @type {boolean}
*/
var onlyEditWikidata = ( DBName !== 'enwiki' );
/**
* Hubi haddii isticmaalahu uu wax ka beddeli karo bogga,
* oo diid wax-ka-beddelka template-yada iyo qaybaha si looga hortago in si kedis ah loogu daro.
*
* @type {boolean}
*/
var allowEditing = (
(
canEdit &&
[ 10, 14, 710, 828, 2300, 2302 ].indexOf( namespace ) === -1
)
);
// Qeex wakiilka isticmaalaha (user agent) marka la gelayo API-ga
var APIoptions = {
ajax: {
headers: {
'Api-User-Agent': 'Qalabka wax ka beddelka/aragtida sharaxaada gaaban (w:en:Wikipedia:Shortdesc helper)'
}
}
};
var API = new mw.Api( APIoptions );
var wikidataAPI = new mw.ForeignApi( 'https://www.wikidata.org/w/api.php', APIoptions );
/**
* Hel wikitext-ka bogga.
*
* @return {Promise}
*/
var getText = function () {
return API.get( {
action: 'query',
prop: 'revisions',
titles: title,
rvprop: 'content',
rvsection: section,
rvslots: 'main',
formatversion: 2
} );
};
/**
* Soo deji wikitext. Haddii la soo dejinayo wikitext-ka oo dhan,
* ama keliya hordhaca wikitext-ka qaybta ayaa la go'aamiyaa.
*
* @type {Promise}
*/
var callPromiseText = ( function () {
var elements;
if ( onlyEditWikidata ) {
return;
}
/**
* Hel in sharaxaadda gaaban ay ku jirto qaybta koowaad, si loo go'aamiyo
* haddii aan u baahanahay inaan soo dejino wikitext-ka bogga oo dhan.
* Tani ku samee adoo baaraya curiyeyaasha ka sarreeya madaxa koowaad ee ".shortdescription"
*/
// eslint-disable-next-line no-jquery/no-global-selector, no-jquery/variable-pattern
elements = $( '.mw-parser-output > h2' ).first().prevAll();
/**
* Waxaa loo baahan yahay in la hubiyo curiyeyaasha walaalaha ah oo leh filter iyo carruurtooda
* oo leh find si loo helo sharaxaadda gaaban. Haddii dhererku > 0 markaas la helay
* sharaxaad gaaban ka hor madaxa koowaad, markaa hel wikitext-ka qaybta 0.
*/
if ( elements.filter( SDELEMENT ).add( elements.find( SDELEMENT ) ).length > 0 ) {
section = 0;
}
// Hel wikitext-ka
return getText();
}() );
/**
* Hel sharaxaadda gaaban ee maxalliga ah
*
* @type {Promise}
*/
var callPromiseDescription = API.get( {
action: 'query',
titles: title,
prop: 'description',
formatversion: 2
} );
/**
* Rar dejinta iyadoo la adeegsanayo libSettings haddii uu jiro
* Haddii kale si naxariis leh ugu noqo kuwa caadiga ah.
*/
var usinglibSettings = !!mw.libs.libSettings;
var ls, optionsConfig, settings, options;
if ( usinglibSettings ) {
ls = mw.libs.libSettings;
optionsConfig = new ls.OptionsConfig( [
new ls.Page( {
title: mw.msg( 'sdh-header-general' ),
preferences: [
new ls.CheckboxOption( {
name: 'MarkAsMinor',
label: mw.msg( 'sdh-MarkAsMinor-label' ),
defaultValue: false,
hide: onlyEditWikidata
} ),
new ls.CheckboxOption( {
name: 'AddToRedirect',
label: mw.msg( 'sdh-AddToRedirect-label' ),
help: mw.msg( 'sdh-AddToRedirect-help' ),
defaultValue: false
} ),
new ls.CheckboxOption( {
name: 'ExportButton',
label: mw.msg( 'sdh-ExportButton-label' ),
defaultValue: false,
hide: onlyEditWikidata
} ),
new ls.DropdownOption( {
name: 'ShowWikidata',
label: mw.msg( 'sdh-ShowWikidataOption-label' ),
defaultValue: 'nolocal',
values: [
{ data: 'always', label: mw.msg( 'sdh-ShowWikidataOption-always-label' ) },
{ data: 'nolocal', label: mw.msg( 'sdh-ShowWikidataOption-nolocal-label' ) },
{ data: 'never', label: mw.msg( 'sdh-ShowWikidataOption-never-label' ) }
],
hide: onlyEditWikidata
} ),
// Ikhtiyaarka dhammaan waa la damiyay dhibaatooyinka la xiriira dadka aan si sax ah u isticmaalin
new ls.DropdownOption( {
name: 'SaveWikidata',
label: mw.msg( 'sdh-SaveWikidata-label' ),
help: mw.msg( 'sdh-SaveWikidata-help' ),
defaultValue: 'add',
values: [
{ data: 'add', label: mw.msg( 'sdh-SaveWikidata-add-label' ) },
// { data: 'all', label: mw.msg( 'sdh-SaveWikidata-all-label' ) },
{ data: 'never', label: mw.msg( 'sdh-SaveWikidata-never-label' ) }
],
hide: onlyEditWikidata
} )
]
} ),
new ls.Page( {
title: mw.msg( 'sdh-header-appearance' ),
preferences: [
new ls.NumberOption( {
name: 'InputWidth',
label: mw.msg( 'sdh-InputWidth-label' ),
defaultValue: 40,
UIconfig: {
min: 10,
max: 999
}
} ),
new ls.NumberOption( {
name: 'FontSize',
label: mw.msg( 'sdh-FontSize-label' ),
defaultValue: 100,
UIconfig: {
min: 10,
max: 500
}
} )
]
} )
] );
settings = new mw.libs.libSettings.Settings( {
title: mw.msg( 'sdh-settingsDialog-title' ),
scriptName: 'Shortdesc-helper',
helpInline: true,
size: 'large',
height: 350,
optionsConfig: optionsConfig
} );
options = settings.get();
} else {
// Isticmaal kuwa caadiga ah
options = {
MarkAsMinor: false,
AddToRedirect: false,
InputWidth: 40,
FontSize: 100,
ExportButton: false,
SaveWikidata: 'add',
ShowWikidata: 'nolocal'
};
}
/**
* Hel sharaxaadda gaaban ee Wikidata
*
* @type {Promise}
*/
var callPromiseWDDescription = ( options.ShowWikidata === 'never' || wgQid === null ) ? null : wikidataAPI.get( {
action: 'wbgetentities',
ids: wgQid,
props: 'descriptions',
formatversion: 2,
languages: language
} );
// CSS firfircoon oo ku salaysan ikhtiyaarrada
mw.util.addCSS(
'#sdh { font-size:' + options.FontSize + '%}' +
'#sdh-descriptionbox { width:' + ( options.InputWidth + 3 ) + 'ch };' // Ku dar +3 maadaama ballacu uu ku jiro tiriyaha xarfaha
);
/* Koodka ugu weyn ee la socodsiiyo marka labada sharaxaadood ee maxalliga ah iyo Wikidata la helo */
var onResponses = function ( response, responseWD ) {
/**
* Llabadan doorsoome waa curiyeyaal UI ah oo u baahan in la xiro oo la furo,
* iyo sidaas darteed waxay u baahan yihiin in laga galo meel ka baxsan xadka shaqooyinka
* ee qeexaya.
*/
/**
* Waxaa lagu isticmaalaa InfoClickyPopup
*
* @type {OO.ui.PopupWidget}
*/
var infoPopup;
/**
* Waxaa lagu isticmaalaa textInput
*
* @type {OO.ui.ActionFieldLayout}
*/
var actionField;
/**
* Waxaa lagu isticmaalaa textInput
*
* @type {OO.ui.TextInputWidget}
*/
var descriptionInput;
/**
* Saddexdan doorsoome waxaa qeexaya badhanka la gujiyay
*/
/**
* Fariinta loo isticmaalo soo koobidda
*
* @type {string}
*/
var summaryMsg;
/**
* Miyuu ficilku yahay beddel ku yimid sharaxaad maxalli ah oo horay u jirtay
* mise waa ku-darid, soo-dejin, iwm.
*
* @type {boolean}
*/
var change;
/**
* Run marka aysan jirin sharaxaad meel kasta, iyo sidaas darteed
* sharaxaadda waa in lagu daraa Wikidata marka options.SaveWikidata ay tahay 'add'.
*
* @type {boolean}
*/
var addWikidata;
/**
* Halka ay tahay inuu qoraal ku jiro bilowga sanduuqa gelinta.
*
* @type {boolean}
*/
var emptyPreload = false;
/**
* Curiyeyaasha HTML ee kala duwan
*/
var $sdh = $( '<div>' ).prop( 'id', 'sdh' );
var $description = $( '<div>' ).addClass( 'sdh-showdescrip' );
var $clickies = $( '<span>' ).addClass( 'sdh-clickies' );
var pages = response[ 0 ].query.pages[ 0 ];
/**
* Ma sharaxaaddaone ka timid Wikidata (aan maxalli ahayn) mise erayga sixirka ah ee {{SHORTDESC:}}?
*
* @type {boolean}
*/
var isLocal = ( pages.descriptionsource === 'local' );
/**
* Sharaxaadaha Wikidata.
*/
var wikidataDescriptions = responseWD ? responseWD[ 0 ].entities[ wgQid ].descriptions : {};
/**
* Sharaxaadda Wikidata, haddii ay jirto.
*/
var wikidataDescription = Object.keys( wikidataDescriptions ).length !== 0 ? wikidataDescriptions[ language ].value : '';
/**
* Sharaxaadda gaaban ee bogga.
*
* @type {string}
*/
var pageDescription = ( isLocal ? pages.description : wikidataDescription ).trim();
/**
* Haddii tani ay tahay bog kala-soocid / dejinta tusmada ama aysan ahayn, oo lagu go'aamiyay adoo baaraya DOM-ka.
* Haddii ay tahay, markaa ikhtiyaarka ah in lagaga gudbo sharaxaadda gaaban waa la damin doonaa.
*
* @type {boolean}
*/
var disambigPage = $( DISAMBIGELEMENT ).length > 0;
/**
* Haddii sharaxaadda Wikidata ay tahay mid aad u guud oo aan faa'iido lahayn.
*
* @type {boolean}
*/
var uselessDescription = !isLocal && USELESS_DESCRIPTIONS.indexOf( pageDescription ) !== -1;
/**
* Haddii la lifaaqayo sharaxaadda Wikidata
*
* @type {boolean}
*/
var appendWDDescription = options.ShowWikidata === 'always' && isLocal && wikidataDescription;
/**
* Waxay abuurtaa "clickies", badhamada xiriiriyaha fudud.
* Waxyaabaha waxaa loo sameeyaa si wanaagsan sida ku xusan https://stackoverflow.com/a/10510353
* Xiriiriyeyaasha waxaa lagu duuduubaa spans si loo oggolaado in kala-soocyada lagu daro iyadoo la adeegsanayo css
* iyada oo aan noqonayn qayb ka mid ah xiriiriyaha.
*
* @param {string} msgName
* @param {Function} func
* @return {Object}
*/
var Clicky = function ( msgName, func ) {
return $( '<span>' )
.addClass( 'sdh-clicky' )
.append( $( '<a>' )
.attr( {
title: mw.msg( msgName + '-title' ),
role: 'button',
tabindex: '0'
} )
.text( mw.msg( msgName + '-label' ) )
.on( 'click', func )
.on( 'keydown', function ( e ) {
if ( [ 13, 32 ].indexOf( event.which ) !== -1 ) { // Meel bannaan (Space) iyo gala (enter)
e.preventDefault();
return func();
}
} )
);
};
/**
* Abuur Clickyfuraya PopupWidget ee OOui.
*
* @param {string} text
* @return {Clicky}
*/
var InfoClickyPopup = function ( text ) {
var self = this;
self.text = text;
self.infoClicky = new Clicky(
'sdh-infoClicky',
function () {
if ( !infoPopup ) {
mw.loader.using( [ 'oojs-ui-core', 'oojs-ui-widgets' ] ).then( function () {
infoPopup = new OO.ui.PopupWidget( {
$content: $( '<span>' ).append( self.text ),
$autoCloseIgnore: self.infoClicky,
padded: true,
autoClose: true,
width: 300,
position: 'after'
} );
$clickies.append( infoPopup.$element );
infoPopup.toggle( true );
} );
} else {
infoPopup.toggle( false );
}
}
);
return self.infoClicky;
};
/**
* Waxay abuurtaa badhamada OOui, kuwaas oo loo isticmaalo kaydinta iyo joojinta.
*
* @param {string} msgName
* @param {Function} func
* @param {Array<string>} flags
* @param {string} icon
* @return {OO.ui.ButtonWidget}
*/
var OOuiClicky = function ( msgName, func, flags, icon ) {
return new OO.ui.ButtonWidget( {
label: mw.msg( msgName + '-label' ),
icon: icon,
title: mw.msg( msgName + '-title' ),
flags: flags,
classes: [ 'sdh-ooui-clicky' ]
} ).on( 'click', func );
};
/**
* Shaqada lagu hubinayo in sharaxaadda gaaban ay ku jirto wikitext-ka.
* Haddii ay tahay, soo celi wikitext-ka iyo sharaxaadda gaaban sida lagu qeexay qoraalka
*
* @param {Object} wikitextResult
* @return {Array}
*/
var shortdescInText = function ( wikitextResult ) {
var wikitext = wikitextResult.query.pages[ 0 ].revisions[ 0 ].slots.main.content;
var match = wikitext && wikitext.match( PATTERN );
if ( match ) {
return [ wikitext, match[ 1 ] ];
} else {
return [ wikitext, false ];
}
};
/**
* Ogeysii isticmaalaha in wax-ka-beddelku guuldarraystay oo diiwaangeli macluumaadka cilmi-baarista (debug).
*
* @param {string} msgName
* @param {*} debug
* @param {string} extraMsg
*/
var editFailed = function ( msgName, debug, extraMsg ) {
var message = mw.msg( msgName ) + extraMsg;
mw.notify(
message,
{
autoHide: false
}
);
if ( debug ) {
mw.log.warn( debug );
}
};
/**
* Deji sharaxaadda Wikidata adoo adeegsanaya API-ga.
*
* @param {string} newDescription
* @param {string} summary Soo koobidda wax-ka-beddelka gaarka ah.
* @return {Promise}
*/
var setWikidataDescription = function ( newDescription, summary ) {
return mw.loader.using( 'mediawiki.ForeignApi' ).then( function () {
return wikidataAPI.postWithToken( 'csrf', {
action: 'wbsetdescription',
id: wgQid,
language: language,
summary: ( summary || '' ) + mw.message( 'sdh-wd-summary', language ).plain(),
value: newDescription
} );
} );
};
/**
* Shaqadani waxay wax ka beddeshaa sharaxaadda Wikidata waxaana lagu isticmaalaa wikis-yada aan ahayn enwiki.
* Wixii ka baxsan waxa setWikidataDescription samaynayso, waxay dib u rartaa bogga marka ay guulaysato
* waxayna bixisaa ogeysiis qalad oo xog badan leh.
*
* @param {string} newDescription
* @param {string} summary Soo koobidda wax-ka-beddelka gaarka ah.
*/
var editWikidataDescription = function ( newDescription, summary ) {
setWikidataDescription( newDescription, summary ).then(
function () {
window.location.reload();
},
function () {
editFailed(
'sdh-wd-edit-failed',
arguments,
arguments[ 1 ].error.info ? (
mw.msg( 'sdh-wd-edit-failed-prefix' ) +
arguments[ 1 ].error.info
) : ''
);
}
);
};
/**
* Shaqadani waxay ku daraysaa ama beddeshaa sharaxaadyada gaaban.
*
* @param {string} newDescription
* @param {string} summary Soo koobidda wax-ka-beddelka gaarka ah.
*/
var editDescription = function ( newDescription, summary ) {
var replacement, prependText, appendText, text, prependDescription;
/**
* Shaqada caawiyaha ah ee lagu daro xigashooyinka qoraalka ku xeeran,
* oo la isticmaalo marka la abuurayo soo koobidda.
*
* @param {string} textToQuote
* @return {string}
*/
var quotify = function ( textToQuote ) {
return '"' + textToQuote + '"';
};
/**
* Wuxuu lifaaqayaa, horay u gelinayaa, ama beddelayaa wikitext-ka.
* iyadoo ku xiran mid ka mid ah text, prependText, iyo appendText ee jira.
*/
var makeEdit = function () {
API.postWithEditToken( {
action: 'edit',
section: section,
text: text,
title: title,
prependtext: prependText,
appendtext: appendText,
summary: summary,
nocreate: true,
minor: options.MarkAsMinor,
tags: 'shortdesc helper'
} ).then(
function () {
// Dib u rar bogga
window.location.reload();
},
function () {
editFailed( 'sdh-edit-failed', arguments );
}
);
};
/**
* Waxay beddeshaa sharaxaadda gaaban ee maxalliga ah ee hadda midda cusub.
* Haddii sharaxaadda gaaban aysan ka jirin qoraalka, soo celi beenta (false).
*
* @param {string} wikitextResult Natiijada getText()
* @return {boolean} Haddii uu jiro sharaxaad ku jirta wikitext-ka
* iyo sidaas darteed in makeEdit la wici karo.
*/
var replaceAndEdit = function ( wikitextResult ) {
var output = shortdescInText( wikitextResult );
var oldtext = output[ 0 ];
var descriptionFromText = output[ 1 ];
if ( descriptionFromText ) {
text = oldtext.replace( PATTERN, replacement );
makeEdit();
return true;
} else {
return false;
}
};
// Hagaaji gelinta gacanta ee "none"
if ( newDescription.toLowerCase() === 'none' ) {
newDescription = '';
}
// Ku beddel hyphen-yada taariikhaha en dashes
newDescription = newDescription.replace( DATEPATTERN, DATEREPLACEMENT );
// Ku samee wax-ka-beddelka Wikidata sida ku habboon
if (
wgQid &&
( options.SaveWikidata === 'add' && addWikidata ) && // options.SaveWikidata === 'all'
newDescription !== ''
) {
setWikidataDescription( newDescription );
}
// Weyneeyo xarafka koowaad si caadi ah ilaa laga beddelayo sharaxaadda maxalliga ah
if ( !isLocal ) {
newDescription = (
newDescription.charAt( 0 ).toUpperCase() +
newDescription.slice( 1 )
);
}
if ( newDescription === '' ) {
newDescription = 'none';
}
// Isticmaal 1= haddii sharaxaaddu leedahay '='
if ( newDescription.indexOf( '=' ) !== -1 ) {
prependDescription = '1=';
} else {
prependDescription = '';
}
replacement = '{{Short description|' + prependDescription + newDescription + '}}';
// Tilmaamaha xiriiriyaha haddii loo beddelayo sharaxaad none ah
summary = summary || mw.message(
summaryMsg + ( newDescription === 'none' ? '-none' : '' ),
quotify( pageDescription ),
quotify( newDescription )
).plain();
/**
* change = true waxay ka dhigan tahay inuu jiray sharaxaad gaaban oo hore oo wikitext-ka ah
* taas oo u baahan in la beddelo.
*/
if ( change ) {
/**
* Hel wikitext-ka mar kale isla markiiba ka hor inta aadan samayn wax-ka-beddelka
* si looga fogaado dhibaatooyinka khilaafka wax-ka-beddelka, oo samee wax-ka-beddelka.
*/
getText().then( function ( result ) {
if ( !replaceAndEdit( result ) ) {
editFailed( 'sdh-edit-failed-no-template' );
}
} );
} else {
if ( isRedirect ) {
appendText = '\n' + replacement;
} else {
prependText = replacement + '\n';
}
makeEdit();
}
};
/**
* Waxay abuurtaa sanduuqa gelinta oo wata badhamada kaydinta iyo joojinta.
* Haddii sanduuqa gelinta la abuuray horay, tus mar kale.
* Haddii kale, abuur sanduuqa gelinta adoo adeegsanaya OOui.
*/
var textInput = function () {
if ( actionField ) {
$description.addClass( 'sdh-showdescrip-hidden' );
actionField.toggle( true );
descriptionInput.focus();
} else {
mw.loader.using( [ 'oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui.styles.icons-interactions' ] ).then( function () {
var length, saveInput, buttons;
// Qeex sanduuqa gelinta, sanduuqa soo koobidda, iyo badhannada.
descriptionInput = new OO.ui.TextInputWidget( {
autocomplete: false,
autofocus: true,
id: [ 'sdh-descriptionbox' ],
label: '0',
value: emptyPreload ? '' : pageDescription,
placeholder: mw.msg( 'sdh-description-placeholder' )
} );
var summaryInput = new OO.ui.TextInputWidget( {
autocomplete: false,
autofocus: true,
id: [ 'sdh-summarybox' ],
placeholder: mw.msg( 'sdh-summary-placeholder' )
} );
var saveButton = new OOuiClicky(
'sdh-save',
function () {
saveInput();
},
[ 'primary', 'progressive' ]
);
var cancelButton = new OOuiClicky(
'sdh-cancel',
function () {
actionField.toggle( false );
$description.removeClass( 'sdh-showdescrip-hidden' );
},
[ 'safe', 'destructive' ]
);
var summaryButton = new OOuiClicky(
'sdh-summary',
function () {
summaryInput.toggle();
},
[ 'safe' ]
);
var settingsButton = new OO.ui.ButtonWidget( {
icon: 'settings',
framed: false,
title: mw.msg( 'sdh-settings-title' ),
flags: [ 'safe' ],
classes: [ 'sdh-ooui-clicky' ]
} ).on( 'click', function () {
settings.display();
} );
/**
* Marka la beddelo, cusboonaysii summadda tirada xarfaha.
* Haddii sharaxaadda maxalliga ah aan la beddelin, ka hortag
*/
var updateOnChange = function () {
var description = descriptionInput.getValue().trim();
length = descriptionInput.getInputLength();
var classes = [ '' ];
if ( length > 40 ) {
if ( length > 60 ) {
classes = [ 'sdh-very-long' ];
} else {
classes = [ 'sdh-too-long' ];
}
}
descriptionInput.setLabel(
$( '<span>' )
.addClass( classes )
.text( String( length ) )
);
if ( isLocal && description === pageDescription ) {
saveButton.setDisabled( true );
} else {
saveButton.setDisabled( false );
}
};
var items = [ saveButton, summaryButton, cancelButton ];
if ( usinglibSettings ) {
items.push( settingsButton );
}
buttons = new OO.ui.ButtonGroupWidget( {
items: items
} );
/**
* Tani waxay ku xiran tahay badhanka kaydinta.
* Waxay damisaa dhammaan curiyeyaasha waxayna wacdaa shaqada khuseysa
* ee masuulka ka ah kaydinta sharaxaadda gaaban ee la geliyay.
*/
saveInput = function () {
var description = descriptionInput.getValue().trim();
var summary = summaryInput.getValue().trim();
descriptionInput
.setDisabled( true )
.pushPending( true );
summaryInput
.setDisabled( true )
.pushPending( true );
items.forEach( function ( item ) {
item.setDisabled( true );
} );
if ( onlyEditWikidata ) {
editWikidataDescription( description, summary );
} else {
editDescription( description, summary );
}
};
actionField = new OO.ui.ActionFieldLayout(
descriptionInput,
buttons,
{
align: 'top',
id: 'sdh-editbox'
}
);
summaryInput.toggle( false );
// Tirada xarfaha bilowga ah
updateOnChange();
descriptionInput.on( 'change', updateOnChange );
descriptionInput.on( 'enter', saveInput );
summaryInput.on( 'enter', saveInput );
summaryInput.on( 'toggle', function ( visible ) {
if ( visible ) {
summaryInput.focus();
} else {
descriptionInput.focus();
}
} );
actionField.$element.append( summaryInput.$element );
// Qari clickies-kii hore ee la soo bandhigay oo ku dar DOM-ka
$description.addClass( 'sdh-showdescrip-hidden' );
$sdh.append( actionField.$element );
descriptionInput.focus();
} );
}
};
/**
* Abuur html-ka oo ku lifaaq DOM-ka
*
* @param {Object} textElement
* @param {Array<Clicky>} clickyElements
* @param {InfoClickyPopup} popupElement
*/
var updateSDH = function ( textElement, clickyElements, popupElement ) {
if ( popupElement ) {
clickyElements.push( popupElement );
}
$description.append( textElement );
if ( clickyElements.length > 0 ) {
$clickies.append( clickyElements );
$description.append( $clickies );
}
$sdh.append( $description );
$sdh.addClass( 'noprint' );
var hideSDH = function () {
$sdh.addClass( 'sdh-ve-hidden' );
};
var showSDH = function () {
$sdh.removeClass( 'sdh-ve-hidden' );
};
$.ready.then( function () {
// Ka saar buuxinta (padding) loo isticmaalo in lagu hagaajiyo boodboodka nuxurka
mw.util.addCSS( '.skin-vector.ns-0 #mw-content-subtitle::after {content: none;}' );
// Ku dar qaybta ugu weynsubtitle-ka
mw.util.addSubtitle( $sdh[0] );
mw.hook( 've.activationComplete' ).add( function () {
hideSDH();
} );
mw.hook( 've.deactivationComplete' ).add( function () {
showSDH();
} );
} );
};
/**
* Damis dhammaan badhamada oo abuur animation socodsiin (...) (processing)
* Waxaa isticmaala badhamada dhoofinta iyo soo dejinta.
*/
var setProcessing = function () {
var x;
var $processing = $( '<div>' )
.addClass( 'sdh-processing' );
// Damis dhammaan badhamada clicky
$clickies
.children( '.sdh-clicky' )
.addClass( 'sdh-clicky-disabled' )
.children( 'a' )
.off();
// Ku dar animation socodsiin ...
$description.append( $processing );
for ( x = 0; x < 3; x++ ) {
$processing.append(
$( '<div>' )
.addClass( [
'sdh-processing-dot',
'sdh-processing-dot-' + x
] )
.text( '.' )
);
}
};
/**
* Qoraallada, clickies, iyo popups waxay ka kooban yihiin
* curiyeyaal oo samayn kara bandhigga bilowga ah.
*/
var texts = {
noDescription: $( '<span>' )
.addClass( 'sdh-no-description' )
.text( mw.msg( 'sdh-no-description' ) ),
missingDescription: $( '<span>' )
.addClass( 'sdh-missing-description' )
.html( mw.msg( 'sdh-missing-description', mw.msg( 'sdh-' + (isRedirect ? 'redirect' : 'article') + '-label' ) ) ),
pageDescription: $( '<span>' )
.addClass( 'mw-page-description ' )
.text( pageDescription + ( appendWDDescription ?
( ' (Wikidata: ' + wikidataDescription + ')' ) : '' ) )
};
var clickies = {
add: new Clicky(
'sdh-add',
function () {
summaryMsg = 'sdh-summary-adding';
addWikidata = true; // Sharaxaadda waa in lagu daraa wikidata xaaladdan
textInput();
}
),
addNone: new Clicky(
'sdh-add',
function () {
summaryMsg = 'sdh-summary-changing';
change = true;
emptyPreload = true;
textInput();
}
),
addUseless: new Clicky(
'sdh-add',
function () {
summaryMsg = 'sdh-summary-adding-local';
emptyPreload = true;
textInput();
}
),
edit: new Clicky(
'sdh-edit',
function () {
summaryMsg = 'sdh-summary-changing';
change = true;
textInput();
}
),
editimport: new Clicky(
'sdh-editimport',
function () {
summaryMsg = 'sdh-summary-adding-local';
textInput();
}
),
export: new Clicky(
'sdh-export',
function () {
setProcessing();
editWikidataDescription( pageDescription );
}
),
import: new Clicky(
'sdh-import',
function () {
setProcessing();
summaryMsg = 'sdh-summary-importing-wikidata';
editDescription( pageDescription );
}
),
override: new Clicky(
'sdh-override',
function () {
summaryMsg = 'sdh-summary-adding-custom';
textInput();
}
),
wikidataLink: $( '<span>' )
.addClass( [
'sdh-clicky',
'sdh-wikidata-description'
] )
.append( $( '<a>' )
.attr( 'href', 'https://www.wikidata.org/wiki/Special:SetLabelDescriptionAliases/' + wgQid + '/' + language )
.text( mw.msg( 'sdh-wikidata-link-label' ) )
)
};
var popups = {
disambig: new InfoClickyPopup(
mw.message( 'sdh-disambig-popup' ).plain()
),
noDescription: new InfoClickyPopup(
mw.message( 'sdh-no-description-popup' ).plain()
),
override: new InfoClickyPopup(
mw.message( 'sdh-override-popup' ).plain()
),
useless: new InfoClickyPopup(
mw.message( 'sdh-useless-popup' ).plain()
)
};
/**
* Iyadoo ku xiran arrimo kala duwan, sida
* in sharaxaaddu jirto iyo in kale,
* in sharaxaaddu ku taal wikidata iyo in kale,
* iyo in boggu ku jiro mainspace,
* koodkani wuxuu go'aaminayaa waxa curiyeyaasha ay tahay inay ka kooban yihiin bandhigga bilowga ah.
* updateSDH() ayaa markaa la wacaa si loo abuuro html-ka
* oo loogu daro DOM-ka.
*
* @param {Object} wikitextResult
*/
var determineElements = function ( wikitextResult ) {
/**
* Sharaxaadda sida lagu go'aamiyay wikitext-ka.
*
* @type {string}
*/
var descriptionFromText;
/**
* Sharaxaadda gaaban ama fariin leh inaysan jirin sharaxaad iwm.
*
* @type {Object}
*/
var textElement;
/**
* Waa maxay badhamada ku habboon ("clickies").
*
* @type {Array<Clicky>}
*/
var clickyElements = [];
/**
* Waa maxay sharaxaadda popup ee la gujin karo haddii ay jirto
*
* @type {InfoClickyPopup}
*/
var popupElement;
/**
* Haddii sharaxaaddu tahay mid aan jirin (none)
*
* @type {boolean}
*/
var isNone;
// Haddii la tusayo "Sharaxaadda maqaalka oo maqan" haddii ay khusayso
var showMissing = (
( namespace === 0 || namespace === 118 ) &&
( !isRedirect || options.AddToRedirect )
);
// Haddii aysan ahayn enwiki, dhamaystir macquulka kiiska aan enwiki ahayn oo ka bax.
if ( onlyEditWikidata ) {
if ( pageDescription ) {
textElement = pageDescription;
clickyElements.push( clickies.edit );
} else if ( showMissing ) {
textElement = texts.missingDescription;
clickyElements.push( clickies.add );
}
updateSDH( textElement, clickyElements, popupElement );
return;
}
/**
* Go'aami in sharaxaadda gaaban ay ku jirto wikitext-ka
* mise waxaa soo saaraya infobox.
*/
descriptionFromText = shortdescInText( wikitextResult )[ 1 ];
/**
* Go'aami in sharaxaaddu tahay none.
*/
isNone = descriptionFromText && descriptionFromText.toLowerCase() === 'none';
// Tusi xiriiriyaha wikidata bilowga haddii la bandhigayo sharaxaad aan maxalli ahayn.
if ( pageDescription && !isLocal ) {
clickyElements.push( clickies.wikidataLink );
}
if ( isNone ) {
// Maaree {{Short description|none}}
isLocal = true;
textElement = texts.noDescription;
clickyElements.push( clickies.addNone );
popupElement = popups.noDescription;
} else {
// Maaree kiiska soo haray
if ( pageDescription ) {
textElement = texts.pageDescription;
if ( isLocal ) {
if ( descriptionFromText ) {
clickyElements.push( clickies.edit );
} else {
if ( disambigPage ) {
popupElement = popups.disambig;
} else {
clickyElements.push( clickies.override );
popupElement = popups.override;
}
}
} else {
if ( uselessDescription ) {
popupElement = popups.useless;
clickyElements.push(
clickies.addUseless
);
} else {
clickyElements.push(
clickies.import,
clickies.editimport
);
}
}
} else if ( showMissing ) {
textElement = texts.missingDescription;
clickyElements.push( clickies.add );
}
}
// Ha tusin clickies-ka wax-ka-beddelka haddii aan la oggolayn wax-ka-beddelka
if ( !allowEditing ) {
clickyElements = [];
}
if ( isLocal && !isNone && options.ExportButton ) {
clickyElements.push( clickies.export );
}
updateSDH( textElement, clickyElements, popupElement );
};
if ( callPromiseText ) {
callPromiseText.then( function ( wikitextResult ) {
determineElements( wikitextResult );
} );
} else {
determineElements();
}
};
$.when( callPromiseDescription, callPromiseWDDescription ).then( onResponses );
};
/* Rar haddii aad eegayso bog si caadi ah (ma aha aragtida diff) */
if (
mw.config.get( 'wgIsArticle' ) &&
!mw.config.get( 'wgDiffOldId' ) &&
mw.config.get( 'wgArticleId' ) !== 0
) {
/**
* Faallo laga bixiyay dhibaatooyinka laga soo tabiyay
* [[Special:PermaLink/925885151#Doubled_short_descriptions_from_Template:Infobox_settlement]].
* Dab ka shid hook-ga postEdit si aad u rarto ka dib kaydinta Visual Editor,
* maadaama VE uusan dhab ahaantii dib u rarineyn bogga.
* Nasiib darro, postEdit wuxuu shaqeeyaa labadaba ka dib wax-ka-beddellada caadiga ah iyo wax-ka-beddellada VE,
* markaa tusaalooyinka labanlaaban ayaa sababi doona ka dib wax-ka-beddel caadi ah haddii la socodsiiyo mar walba
* postEdit.
* window.sdh.hasRun waxaa loo dejiyay run hoos, waxayna noqon doontaa mid aan la qeexin ka dib dib-u-rarid sax ah,
* laakiin ma aha ka dib dib-u-rarid dinamik ah oo VE ah.
* FIIRO GAAR AH: Hook-ga postEdit wuxuu shaqeeyaa goor hore, taas oo macnaheedu yahay haddii wax-ka-beddele uu ku daro sharaxaad gaaban iyadoo la adeegsanayo VE
* aysan tusi doonin sharaxaadda saxda ah.
*
* mw.hook( 'postEdit' ).add( function () {
* if ( window.sdh.hasRun ) {
* window.sdh.main();
* }
* } );
*
* if ( !window.sdh.hasRun ) { // Ha marin laba jeer
* window.sdh.hasRun = true;
* window.sdh.initMessages();
* window.sdh.main();
* }
*/
window.sdh.initMessages();
window.sdh.main();
}
// </nowiki>
kn8ewr6vuhmk6b76plc6rfq5pl0w4pe
MediaWiki:Gadget-Shortdesc-helper.css
8
53906
311108
2026-10-25T16:47:16Z
Isma4l
41797
Abuuray
311108
css
text/css
/* _____________________________________________________________________________
* | |
* | === WARNING: GLOBAL GADGET FILE === |
* | Changes to this page affect many users. |
* | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. |
* |_____________________________________________________________________________|
*
*/
/* v3.5.3 */
/* Stylings for missing description and links to wikidata */
.sdh-missing-description {
color: DarkRed; /* Using DarkRed rather than previous Red to meet WCAG AA */
}
.sdh-wikidata-description a {
color: MediumVioletRed; /* Using MediumVioletRed rather than previous HotPink to meet WCAG AA */
}
.sdh-ve-hidden {
display: none;
}
/**
* Interestingly, Vector's stylesheet makes <a> elements without href have a pointer automatically
* This is for other skins.
*/
.sdh-clicky a {
cursor: pointer;
}
.sdh-clicky-disabled a {
pointer-events: none;
}
/* Brackets and seperators for clickies */
.sdh-clicky + .sdh-clicky::before {
content: ' · ';
}
.sdh-clickies::before {
content: ' (';
}
.sdh-clickies::after {
content: ')';
}
/* Used to hide display of description when switching to editing box */
.sdh-showdescrip-hidden {
display: none;
}
/* Styling for editing bar */
#sdh-editbox {
padding: 0;
margin: 0;
display: flex;
flex-direction: column;
}
/* Make things flex to allow description input box size to be set exactly, and everything else to look good. */
#sdh .oo-ui-fieldLayout-field {
display: flex;
align-items: center;
}
#sdh-descriptionbox {
margin-right: 0;
}
/* Styling for processing animation */
@keyframes wave {
0% { transform: translateY( 0 ); }
20% { transform: translateY( -0.25em ); }
40% { transform: translateY( 0 ); }
100% { transform: translateY( 0 ); }
}
.sdh-processing {
display: inline-block;
margin-left: 0.5em;
}
.sdh-processing-dot {
display: inline-block;
animation: wave 1s ease-out infinite;
}
.sdh-processing-dot-1 {
animation-delay: 200ms;
}
.sdh-processing-dot-2 {
animation-delay: 400ms;
}
.sdh-processing-dot-3 {
animation-delay: 600ms;
}
/* Styling for character counter based on length */
.sdh-too-long {
color: #d43900;
}
.sdh-very-long {
color: #e00000;
font-weight: bold;
}
0ilizwthafp6m4ckaxozzgmb812vgw6
MediaWiki:Gadget-Shortdesc-helper
8
53907
311109
2026-10-25T16:48:08Z
Isma4l
41797
/* */
311109
wikitext
text/x-wiki
[[:en:Wikipedia:Shortdesc helper|Caawiyaha Sharaxaada Gaaban]]: si fudud ku dar oo wax ka beddel [[:en:Wikipedia:Short description|sharaxaadaha gaaban]] ee bogga
931oe0yu8ut2pfpsiwdd4tb2dy1ys1r
MediaWiki:Gadget-Shortdesc-helper-pagestyles-vector.css
8
53908
311110
2026-10-25T16:48:46Z
Isma4l
41797
Abuuray
311110
css
text/css
/* This is its own file/gadget because a CSS-only gadget like this is page blocking, but CSS in a JavaScript gadget is loaded later. Doing it this way avoids a flash of unstyled content where the short description jumps around. */
/* Fix content jump */
.skin-vector.ns-0 #mw-content-subtitle::after {
content: '\200B';
}
.skin-vector.ns-0 .noarticletext {
margin-top: -1.008em; /* 0.84 * 1.2em */
}
/* Fix layout for deleted mainspace pages */
.skin-vector.ns-0:not(.skin-vector-2022) #contentSub2 {
margin-top: -1.2em;
}
.skin-vector.ns-0 .mw-warning-with-logexcerpt {
margin-bottom: 1.2em;
}
a0ny5pgcmp01m9qmqh63b6pin8d7t6o
MediaWiki:Gadget-Shortdesc-helper-pagestyles-vector
8
53909
311111
2026-10-25T16:49:41Z
Isma4l
41797
/* */
311111
wikitext
text/x-wiki
Qaybaha qalabka caawiyaha sharaxaada gaaban
dm6t248s3a43jpag8v5qz4wsq2gnxxa
MediaWiki:Gadget-libSettings.js
8
53910
311112
2026-10-25T16:51:05Z
Isma4l
41797
Abuuray
311112
javascript
text/javascript
/* Koodka aan la koobin oo aan la turjumin waxaa laga helayaa https://github.com/galobtter/libSettings - tani sida cad waa in aan si toos ah loo beddelin. */
!function(){"use strict";var t={594:function(t){t.exports=JSON.parse('{"libSettings-settings-title":"Dejinta","libSettings-save-label":"Kaydi dejinta","libSettings-cancel-label":"Jooji","libSettings-showDefaults-label":"Tusi heerarka caadiga ah","libSettings-showCurrentSettings-label":"Tusi dejinta hadda","libSettings-save-success-message":"Dejinta $1 si guul leh ayaa loo kaydiyay.","libSettings-save-fail-message":"Waa lagu guuldarraystay in la kaydiyo dejinta $1."}')}},e={};function n(o){var r=e[o];if(void 0!==r)return r.exports;var i=e[o]={exports:{}};return t[o](i,i.exports,n),i.exports}!function(){function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}function e(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}function o(t,e){return o=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},o(t,e)}function r(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,o=u(t);if(e){var r=u(this).constructor;n=Reflect.construct(o,arguments,r)}else n=o.apply(this,arguments);return i(this,n)}}function i(e,n){if(n&&("object"===t(n)||"function"==typeof n))return n;if(void 0!==n)throw new TypeError("Dhisayaasha ka dhashay waxay soo celin karaan oo keliya shay ama undefined");return function(t){if(void 0===t)throw new ReferenceError("this lama bilaabin - super() lama wicin");return t}(e)}function u(t){return u=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},u(t)}var c=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Muujinta Super waa inay noqotaa mid null ah ama shaqo");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&o(t,e)}(s,OO.EventEmitter);var n,i,u,c=r(s);function s(t){var e;!function(t,e){if(!(t instanceof e))throw new TypeError("Lama wici karo fasal sidoo kale shaqo")}(this,s),(e=c.call(this)).name=t.name,e.defaultValue=t.defaultValue,e.label=t.label,e.type=t.type,e.UIconfig=t.UIconfig||{},e.help=t.help,e.hide=t.hide,e.helpInline=t.helpInline;var n=["libSettings-".concat(e.type,"Option")];if(e.UIconfig.classes=e.UIconfig.classes?e.UIconfig.classes.push(n):n,e.validInput=!0,e.propertyNameUI="value",void 0===e.name||void 0===e.defaultValue){var o=void 0===e.name?"name":"defaultValue";throw Error('[libSettings] "'.concat(o,'" ee Option waxaa looga baahan yahay in la qeexo laakiin lama qeexin.'))}if(void 0===e.type)throw Error('[libSettings] "config.type" waxaa looga baahan yahay in la qeexo fasallada kordhiya Option.');return e}return n=s,(i:[{key:"value",get:function(){return void 0!==this.customValue?this.customValue:this.defaultValue},set:function(t){this.customValue=t}},{key:"customUIValue",get:function(){var t;return(t=this.hasUI?this.UIvalue:this.value)!==this.defaultValue?t:void 0}},{key:"change",value:function(){this.emit("change")}},{key:"buildUI",value:function(){if(!this.hide)return this.hasUI=!0,this.UI(this[this.propertyNameUI])}},{key:"UIvalue",get:function(){return mw.log.error("Getter UIvalue lama qeexin fasalka kordhiyay ".concat(this.type,"Option."))}},{key:"UI",value:function(){return mw.log.error("Shaqada UI lama qeexin fasalka kordhiyay ".concat(this.type,"Option."))}}])&&e(n.prototype,i),u&&e(n,u),Object.defineProperty(n,"prototype",{writable:!1}),s}();function s(t){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},s(t)}function a(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}function f(){return f="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(t,e,n){var o=l(t,e);if(o){var r=Object.getOwnPropertyDescriptor(o,e);return r.get?r.get.call(arguments.length<3?t:n):r.value}},f.apply(this,arguments)}function l(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=b(t)););return t}function p(t,e){return p=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},p(t,e)}function y(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,o=b(t);if(e){var r=b(this).constructor;n=Reflect.construct(o,arguments,r)}else n=o.apply(this,arguments);return h(this,n)}}function h(t,e){if(e&&("object"===s(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Dhisayaasha ka dhashay waxay soo celin karaan oo keliya shay ama undefined");return function(t){if(void 0===t)throw new ReferenceError("this lama bilaabin - super() lama wicin");return t}(t)}function b(t){return b=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},b(t)}var v=function(){return function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Muujinta Super waa inay noqotaa mid null ah ama shaqo");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&p(t,e)}(i,OO.ui.ProcessDialog);var e,n,o,r=y(i);function i(t,e,n){var o;return function(t,e){if(!(t instanceof e))throw new TypeError("Lama wici karo fasal sidoo kale shaqo")}(this,i),(o=r.call(this,t)).optionsConfig=e,o.height=n,o}return e=i,(n:[{key:"setPropertyNameUI",value:function(t){this.optionsConfig.traverse((function(e){e.propertyNameUI=t}))}},{key:"genInternalUI",value:function(){var t,e=this.optionsConfig.getConfig(),n=1===e.filter((function(t){return!t.hide})).length,o=e.map((function(t){return t.buildUI(n)}));return o.filter((function(t){return t})),n?t=o[0]:(t=new OO.ui.BookletLayout({outlined:!0})).addPages(o),t}},{key:"setupUI",value:function(){this.content=this.genInternalUI(),this.$body.html(this.content.$element),this.changeHandler()}},{key:"changeHandler",value:function(){var t=!0,e=!1,n=!1;this.optionsConfig.traverse((function(o){if(o.hasUI){o.validInput||(t=!1);var r=o.UIvalue;r!==o.value&&(e=!0),r!==o.defaultValue&&(n=!0)}})),this.actions.setAbilities({save:t&&e,showDefault:n,showCurrentSettings:e})}},{key:"regenUI",value:function(){var t;this.content.getCurrentPageName&&(t=this.content.getCurrentPageName()),this.setupUI(),t&&this.content.setPage(t)}},{key:"getSetupProcess",value:function(){var t=this,e=f(b(i.prototype),"getSetupProcess",this).call(this);return e.next((function(){return t.setupUI()})),e}},{key:"getActionProcess",value:function(t){var e=this;return"save"===t?new OO.ui.Process((function(){e.emit("startSave"),e.actions.setAbilities({save:!1,showDefault:!1,showCurrentSettings:!1,cancel:!1}),e.pushPending()})):("cancel"===t&&this.close(),"showDefault"===t?new OO.ui.Process((function(){e.setPropertyNameUI("defaultValue"),e.regenUI()})):"showCurrentSettings"===t?new OO.ui.Process((function(){e.setPropertyNameUI("value"),e.regenUI()})):f(b(i.prototype),"getActionProcess",this).call(this,t))}},{key:"getBodyHeight",value:function(){return this.height||1*this.content.$element.outerWidth(!0)/1.61803398875}}])&&a(e.prototype,n),o&&a(e,o),Object.defineProperty(e,"prototype",{writable:!1}),i}()};function g(t){return g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},g(t)}function d(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}function m(t,e){return m=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},m(t,e)}function w(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,o=S(t);if(e){var r=S(this).constructor;n=Reflect.construct(o,arguments,r)}else n=o.apply(this,arguments);return O(this,n)}}function O(t,e){if(e&&("object"===g(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Dhisayaasha ka dhashay waxay soo celin karaan oo keliya shay ama undefined");return function(t){if(void 0===t)throw new ReferenceError("this lama bilaabin - super() lama wicin");return t}(t)}function S(t){return S=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},S(t)}var I=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Muujinta Super waa inay noqotaa mid null ah ama shaqo");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&m(t,e)}(i,OO.EventEmitter);var e,n,o,r=w(i);return function(t){var e;return function(t,e){if(!(t instanceof e))throw new TypeError("Lama wici karo fasal sidoo kale shaqo")}(this,i),(e=r.call(this)).optionsConfig=t.optionsConfig,e.scriptName=t.scriptName,e.optionName="userjs-".concat(t.optionName||t.scriptName),e.size=t.size,e.title=t.title||mw.msg("libSettings-settings-title"),e.useUserOptions=void 0===t.useUserOptions||t.useUserOptions,e.notifyUponSave=void 0===t.notifyUponSave||t.notifyUponSave,e.reloadUponSave=void 0===t.reloadUponSave||t.reloadUponSave,e.userOptions=t.userOptions||{},e.optionsConfig.traverse((function(e){void 0===e.helpInline&&(e.helpInline=t.helpInline)})),e.height=t.height,e.saveLabel=t.saveLabel||mw.msg("libSettings-save-label"),e.cancelLabel=t.cancelLabel||mw.msg("libSettings-cancel-label"),e.showDefaultsLabel=t.showDefaultsLabel||mw.msg("libSettings-showDefaults-label"),e.showCurrentSettingsLabel=t.showCurrentSettingsLabel||mw.msg("libSettings-showCurrentSettings-label"),e.saveMessage=mw.msg("libSettings-save-success-message",e.scriptName),e.saveFailMessage=mw.msg("libSettings-save-fail-message",e.scriptName),e}();function P(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}var j=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Lama wici karo fasal sidoo kale shaqo")}(this,t),this.config=e,this.options=this.depthCopyTraverse()}var e,n,o;return e=t,(n=[{key:"depthCopyTraverse",value:function(){var t={},e=function(e){t[e.name]=e};return this.config.forEach((function(t){t.traverse(e)})),t}},{key:"getConfig",value:function(){return this.config}},{key:"traverse",value:function(t){for(var e in this.options)t(this.options[e])}},{key:"retrieveProperty",value:function(t){var e={};for(var n in this.options){var o=this.options[n];e[n]=o[t]}return e}},{key:"updateProperty",value:function(t,e){for(var n in e){var o=e[n],r=this.options[n];r&&(r[t]=o)}}}])&&P(e.prototype,n),o&&P(e,o),Object.defineProperty(e,"prototype",{writable:!1}),t}();function U(t){return U="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},U(t)}function _(t,e){return _=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_(t,e)}function k(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,o=C(t);if(e){var r=C(this).constructor;n=Reflect.construct(o,arguments,r)}else n=o.apply(this,arguments);return R(this,n)}}function R(t,e){if(e&&("object"===U(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Dhisayaasha ka dhashay waxay soo celin karaan oo keliya shay ama undefined");return function(t){if(void 0===t)throw new ReferenceError("this lama bilaabin - super() lama wicin");return t}(t)}function C(t){return C=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},C(t)}function E(t,e){if(!(t instanceof e))throw new TypeError("Lama wici karo fasal sidoo kale shaqo")}function x(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}function T(t,e,n){return e&&x(t.prototype,e),n&&x(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}var D=function(){function t(e){E(this,t),this.title=e.title,this.level=e.level,this.hide=e.hide,this.preferences=e.preferences,this.UIconfig=e.UIconfig||{}}return T(t,[{key:"traverse",value:function(t){this.preferences.forEach((function(e){"traverse"in Object.getPrototypeOf(e)?e.traverse((function(e){return t(e)})):t(e)}))}},{key:"buildUI",value:function(t){if(!this.hide)return this.hasUI=!0,this.UI(t)}},{key:"UI",value:function(t){this.UIconfig.padded=t,this.UIconfig.scrollable=!1;var e=this,n=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Muujinta Super waa inay noqotaa mid null ah ama shaqo");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_(t,e)}(o,OO.ui.PageLayout);var n=k(o);return function(){var t;return E(this,o),t=n.call(this,e.title,e.UIconfig),e.preferences.forEach((function(e){var n=e.buildUI();n&&t.$element.append(n.$element)})),t}()}();return new n}}]),t}();function N(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}var L=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Lama wici karo fasal sidoo kale shaqo")}(this,t),this.header=e.header,this.hide=e.hide,this.options=e.options,this.UIconfig=e.UIconfig||{}}var e,n,o;return e=t,(n=[{key:"traverse",value:function(t){this.options.forEach((function(e){t(e)}))}},{key:"buildUI",value:function(){if(!this.hide)return this.hasUI=!0,this.UI()}},{key:"UI",value:function(){this.UIconfig.label=this.header;var t=new OO.ui.FieldsetLayout(this.UIconfig),e=this.options.map((function(t){return t.buildUI()}));return e=e.filter((function(t){return t})),t.addItems(e),t}}])&&N(e.prototype,n),o&&N(e,o),Object.defineProperty(e,"prototype",{writable:!1}),t}();function B(t){return B="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},B(t)}function V(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}function M(t,e){return M=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},M(t,e)}function A(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,o=$(t);if(e){var r=$(this).constructor;n=Reflect.construct(o,arguments,r)}else n=o.apply(this,arguments);return W(this,n)}}function W(t,e){if(e&&("object"===B(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Dhisayaasha ka dhashay waxay soo celin karaan oo keliya shay ama undefined");return function(t){if(void 0===t)throw new ReferenceError("this lama bilaabin - super() lama wicin");return t}(t)}function $(t){return $=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},$(t)}var F=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Muujinta Super waa inay noqotaa mid null ah ama shaqo");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&M(t,e)}(i,t);var e,n,o,r=A(i);return function(t){return function(t,e){if(!(t instanceof e))throw new TypeError("Lama wici karo fasal sidoo kale shaqo")}(this,i),t.type="Checkbox",r.call(this,t)}();function H(t){return H="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},H(t)}function z(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}function G(t,e){return G=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},G(t,e)}function J(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,o=K(t);if(e){var r=K(this).constructor;n=Reflect.construct(o,arguments,r)}else n=o.apply(this,arguments);return q(this,n)}}function q(t,e){if(e&&("object"===H(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Dhisayaasha ka dhashay waxay soo celin karaan oo keliya shay ama undefined");return function(t){if(void 0===t)throw new ReferenceError("this lama bilaabin - super() lama wicin");return t}(t)}function K(t){return K=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},K(t)}var Q=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Muujinta Super waa inay noqotaa mid null ah ama shaqo");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&G(t,e)}(i,t);var e,n,o,r=J(i);return function(t){var e;return function(t,e){if(!(t instanceof e))throw new TypeError("Lama wici karo fasal sidoo kale shaqo")}(this,i),t.type=t.type||"Text",(e=r.call(this,t)).widget="TextInputWidget",e}();function X(t){return X="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},X(t)}function Y(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}function Z(){return Z="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(t,e,n){var o=tt(t,e);if(o){var r=Object.getOwnPropertyDescriptor(o,e);return r.get?r.get.call(arguments.length<3?t:n):r.value}},Z.apply(this,arguments)}function tt(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=rt(t)););return t}function et(t,e){return et=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},et(t,e)}function nt(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,o=rt(t);if(e){var r=rt(this).constructor;n=Reflect.construct(o,arguments,r)}else n=o.apply(this,arguments);return ot(this,n)}}function ot(t,e){if(e&&("object"===X(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Dhisayaasha ka dhashay waxay soo celin karaan oo keliya shay ama undefined");return function(t){if(void 0===t)throw new ReferenceError("this lama bilaabin - super() lama wicin");return t}(t)}function rt(t){return rt=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},rt(t)}var it=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Muujinta Super waa inay noqotaa mid null ah ama shaqo");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&et(t,e)}(i,t);var e,n,o,r=nt(i);return function(t){var e;return function(t,e){if(!(t instanceof e))throw new TypeError("Lama wici karo fasal sidoo kale shaqo")}(this,i),t.type="Number",(e=r.call(this,t)).widget="NumberInputWidget",e}();function ut(t){return ut="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ut(t)}function ct(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}function st(t,e){return st=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},st(t,e)}function at(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,o=lt(t);if(e){var r=lt(this).constructor;n=Reflect.construct(o,arguments,r)}else n=o.apply(this,arguments);return ft(this,n)}}function ft(t,e){if(e&&("object"===ut(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Dhisayaasha ka dhashay waxay soo celin karaan oo keliya shay ama undefined");return function(t){if(void 0===t)throw new ReferenceError("this lama bilaabin - super() lama wicin");return t}(t)}function lt(t){return lt=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},lt(t)}var pt=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Muujinta Super waa inay noqotaa mid null ah ama shaqo");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&st(t,e)}(i,t);var e,n,o,r=at(i);return function(t){var e;return function(t,e){if(!(t instanceof e))throw new TypeError("Lama wici karo fasal sidoo kale shaqo")}(this,i),t.type="Dropdown",(e=r.call(this,t)).values=t.values,e}();mw.libs.libSettings={},mw.libs.libSettings.Option=c,mw.libs.libSettings.Settings=I,mw.libs.libSettings.OptionsConfig=j,mw.libs.libSettings.Page=D,mw.libs.libSettings.Group=L,mw.libs.libSettings.CheckboxOption=F,mw.libs.libSettings.TextOption=Q,mw.libs.libSettings.NumberOption=it,mw.libs.libSettings.DropdownOption=pt;var yt=n(594);mw.messages.set(yt),mw.util.addCSS(".libSettings-NumberOption {\n\tmax-width: 15em\n}")}();
p4wdbitp4i5f1gdtrnkq9p2hbsfe3ki
MediaWiki:Gadget-libSettings
8
53911
311113
2026-10-25T16:51:57Z
Isma4l
41797
/* */
311113
wikitext
text/x-wiki
Qaybta qalabka habaynta maktabadda
mq0fxx2dzgbrl61j3da1v20je5swbs0
MediaWiki:Gadget-wikEd.js
8
53912
311114
2026-10-25T16:52:34Z
Isma4l
41797
Abuuray
311114
javascript
text/javascript
// _________________________________________________________________________________________
// | |
// | === WARNING: GLOBAL GADGET FILE === |
// | Changes to this page affect many users. |
// | Please discuss changes on the talk page or on [[Wikipedia_talk:Gadget]] before editing. |
// |_________________________________________________________________________________________|
//
// Imports [[User:Cacycle/wikEd.js]]
// wikEd is a full-featured in-browser editor for Wikipedia, see [[User:Cacycle/wikEd]]
// disable loading for IE, not needed, but might save a few milliseconds
if ( navigator.appName !== 'Microsoft Internet Explorer' ) {
// load [[User:Cacycle/wikEd]] in-browser text editor
// please do not use the importScript(), importScriptURI(), or mw.loader.load() functions as these interfere with the script's own installation mechanism and will delay the startup
( function () { var script = document.createElement( 'script' ); script.src = '//en.wikipedia.org/w/index.php?title=User:Cacycle/wikEd.js&action=raw&ctype=text/javascript'; script.async = true; document.getElementsByTagName( 'head' )[ 0 ].appendChild( script ); } ) ();
}
68s5qjuxor2e521mwp2xf9gvnv8et3e
MediaWiki:Gadget-wikEd
8
53913
311115
2026-10-25T16:54:16Z
Isma4l
41797
/* */
311115
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-user}}">(U)</abbr></sup> [[en:User:Cacycle/wikEd|wikEd]]: tifaftiraha qoraalka isku-dhafnaanta leh ee buuxa ee loogu talagalay [[:en:Mozilla Firefox|Firefox]], [[:en:Safari (web browser)|Safari]], iyo [[:en:Google Chrome|Google Chrome]] ([[en:User:Cacycle/wikEd help|dukumentiyada]])
qmj0380y3qtxohb48xsjm32xsa02r8e
MediaWiki:Gadget-afchelper.js
8
53914
311116
2026-10-25T16:55:12Z
Isma4l
41797
Abuuray
311116
javascript
text/javascript
// <nowiki>
( function () {
// Hubi in aan joogno meel magac (namespace) oo isticmaasha AFCH.
// Qalabkan gadiidka ah, meelaha magaca waxaa hubiya kordhinta gadgets-ka, hubinta hoos ku xusan looma baahna, maadaama aan ku qeexnay meelaha magaca ee MediaWiki:Gadgets-definition.
// Laakiin server.js, ma helno hubintan gadget-ka, markaa waxaan u baahanahay inaan hubino hoos. Haddii kale waxaad arki doontaa AFCH oo ka muuqata Bogga Hore :)
const userNamespace = 2;
const draftNamespace = 118;
if ( ![ draftNamespace, userNamespace ].includes( mw.config.get( 'wgNamespaceNumber' ) ) ) {
return;
}
// Bilow shayga AFCH
window.AFCH = {};
// Deji halbeegyada joogtada ah (constants)
AFCH.consts = {};
AFCH.consts.scriptpath = mw.config.get( 'wgServer' ) + mw.config.get( 'wgScript' );
// Laba weedhood ee soo socda (dejinta beta iyo baseurl) waxaa laga yaabaa in la beddelo
// iyadoo la adeegsanayo qoraalka soo gelinta! Haddii aad beddesho, hubi in qoraalka soo gelinta
// ee scripts/deploy.js uusan jabin.
AFCH.consts.beta = false;
AFCH.consts.baseurl = AFCH.consts.scriptpath +
'?action=raw&ctype=text/javascript&title=MediaWiki:Gadget-afchelper.js';
$.getScript( AFCH.consts.baseurl + '/core.js' ).done( () => {
const loaded = AFCH.load( 'submissions' ); // laga yaabo in mar uun ay jiri doonaan qaybo dheeraad ah marka laga reebo 'submissions' oo keliya
if ( !loaded ) {
mw.notify( 'AFCH lama soo dejin karo: ' + ( AFCH.error || 'qalad aan la aqoon' ),
{ title: 'Qaladka AFCH' } );
}
} );
}() );
// </nowiki>
ez0cc9ob9186km66qjut6x8tn7046nz
MediaWiki:Gadget-afchelper
8
53915
311117
2026-10-25T16:56:16Z
Isma4l
41797
/* */
311117
wikitext
text/x-wiki
[[:en:Wikipedia:WikiProject Articles for creation/Helper script|Qoraalka Caawiyaha AFC]]: si fudud u eeg oo dib u eegis ugu samee gudbinta [[:en:WP:AFC|Maqaallada abuurista]] (qabyo qoraallada)
q0w5lwtvj3kipwbskus6a1pim4u83ie
MediaWiki:Gadget-afchelper.css
8
53916
311118
2026-10-25T16:57:56Z
Isma4l
41797
Abuuray
311118
css
text/css
/**
* General styling for AFCH
*/
/* Nice colors */
/* General styles */
.hidden {
display: none !important;
}
.hidden2 {
display: none !important;
}
.centered {
text-align: center;
}
.text-left {
text-align: left;
}
.text-right {
text-align: right;
}
.text-smaller {
font-size: 0.7em;
}
.link:hover {
cursor: pointer;
text-decoration: underline;
}
/* Button styling */
div.gradient-button,
.gradient-button {
cursor: pointer;
text-decoration: none;
-webkit-user-select: none;
user-select: none;
transition: box-shadow 0.1s ease-in-out;
}
div.gradient-button:hover,
.gradient-button:hover {
text-decoration: none;
background-image: linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1));
box-shadow: 0 1px rgba(0, 0, 0, 0.1), inset 0 -3px rgba(0, 0, 0, 0.2);
}
div.gradient-button:active,
.gradient-button:active {
color: #111111;
background-image: linear-gradient(bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1));
box-shadow: 0 1px rgba(0, 0, 0, 0.2);
}
div.gradient-button.disabled,
.gradient-button.disabled {
background-color: #DDDDDD;
text-decoration: none;
-webkit-user-select: none;
user-select: none;
cursor: not-allowed;
}
div.gradient-button.disabled:active,
.gradient-button.disabled:active,
div.gradient-button.disabled:hover,
.gradient-button.disabled:hover {
background-image: none;
box-shadow: none;
}
/* Form styling */
.afch .afch-option,
.afch-form .afch-option {
display: block;
padding: 5px;
}
.afch .afch-label,
.afch-form .afch-label {
padding: 5px;
}
.afch select .afch-input,
.afch-form select .afch-input {
vertical-align: baseline;
}
.afch .afch-textfield,
.afch-form .afch-textfield {
-webkit-appearance: none;
border: 1px solid #DDDDDD;
border-collapse: collapse;
box-sizing: border-box;
cursor: auto;
display: inline-block;
font-size: 14px;
height: 30px;
margin: 0px;
padding-left: 5px;
vertical-align: middle;
width: 25%;
min-width: 150px;
}
.afch .afch-textfield:focus,
.afch-form .afch-textfield:focus {
border: 1px solid #979797;
outline: 0;
}
.afch .afch-textarea,
.afch-form .afch-textarea {
height: 150px;
width: 50%;
margin-top: 5px;
margin-left: auto;
margin-right: auto;
}
.afch label,
.afch-form label,
.afch input,
.afch-form input {
display: inline-block;
}
.afch label,
.afch-form label {
text-align: left;
font-size: 0.8em;
}
.afch label + input[type=text],
.afch-form label + input[type=text] {
width: 30%;
min-width: 250px;
}
.afch input + input,
.afch-form input + input {
float: right;
}
.afch-preferences label.afch-label {
font-size: 1em;
padding: 0;
}
.afch-preferences div + div {
border-top: 1px dashed gray;
padding: 8px 0;
}
.afch-preferences .details {
padding-bottom: 10px;
}
.afch-preferences > div {
margin: 5px;
}
.afch-preferences > div > label,
.afch-preferences > div > [input="checkbox"] {
display: inline;
}
/**
* Styling for submissions.js
*/
/* Link that opens the review panel */
.afch-open {
font-size: 0.5em;
padding-left: 5px;
line-height: 1em;
cursor: pointer;
}
.afch {
/* Reset base sizes, thanks typography refresh :P */
font-size: 13px;
line-height: 19px;
/* This mixin sets the color of the panel */
/* Constant UI elements */
/* MAIN (+SPLASH) */
/* ACCEPT */
/* DECLINE */
/* COMMENT */
/* TAG FOR G13 DELETION */
/* POSTPONE G13 */
/* SUBMIT */
/* MARK/UNMARK AS UNDER REVIEW */
/* OTHER */
}
.afch .review-panel {
border-width: 2px;
border-style: solid;
font-family: Helvetica, sans-serif;
font-size: 1.2em;
margin-bottom: 20px;
}
.afch .top-bar {
position: relative;
width: 100%;
z-index: 999;
}
.afch .top-bar div {
color: #FFFFFF;
font-size: 1em;
cursor: pointer;
position: absolute;
padding: 5px;
}
.afch .top-bar .back-link {
font-size: 0.9em;
text-transform: uppercase;
}
.afch .top-bar .close-link {
right: 0;
margin-top: -0.4em;
font-size: 1.2em;
}
.afch .header {
height: 60px;
line-height: 1.2em;
font-size: 60px;
color: #FFFFFF;
font-weight: bold;
text-align: right;
text-transform: uppercase;
overflow: hidden;
vertical-align: top;
}
.afch #afchEditConflict {
display: none;
color: red;
}
.afch #afchSubmitForm {
text-align: center;
width: 30%;
padding: 5px;
margin-top: 10px;
margin-left: auto;
margin-right: 0px;
}
.afch #afchSubmitForm.button-centered {
margin-left: auto;
margin-right: auto;
}
.afch #afchStatus {
list-style-position: inside;
text-align: left;
}
.afch .content {
background-color: #FFFFFF;
padding: 10px;
}
.afch .bad-input,
.afch .bad-input:focus {
border-width: medium;
border-color: #FF4136;
}
.afch .initial,
.afch .splash {
background-color: #111111;
border-color: #111111;
}
.afch .initial-header {
font-size: 25px;
color: #FFFFFF;
text-align: center;
margin: 10px;
position: relative;
}
.afch .initial-header > span {
display: block;
font-size: 15px;
padding-bottom: 4px;
}
.afch .warnings {
text-align: center;
background-color: #FF851B;
margin: 0px 10px 10px;
padding: 5px;
}
.afch .afch-warning {
padding: 8px 0px;
}
.afch .afch-warning > a {
padding-left: 5px;
font-size: 0.8em;
color: #111111;
}
.afch .afch-warning + .afch-warning {
border-top: 1px solid black;
}
.afch .deletion-log {
background-color: #FFFFFF;
text-align: left;
padding: 5px;
margin: 10px 20px;
border: 1px dashed black;
max-height: 90px;
overflow: auto;
}
.afch .deletion-log td {
padding: 5px;
}
.afch .deletion-log .timestamp {
color: #979797;
text-align: right;
white-space: nowrap;
vertical-align: top;
}
.afch .deletion-log .reason {
font-family: monospace, Courier;
}
.afch .deletion-log .actor {
color: #979797;
font-size: 0.75em;
white-space: nowrap;
}
.afch div.code-wrapper > pre {
padding: 0.1em;
/* Wrap lines */
white-space: pre-wrap;
word-wrap: break-word;
}
.afch .button-wrapper {
width: 100%;
display: table;
table-layout: fixed;
}
.afch .afch-button {
vertical-align: middle;
line-height: 2em;
font-family: arial, sans-serif;
font-size: 1.5em;
color: #111111;
text-align: center;
padding: 5px;
display: table-cell;
}
.afch #afchDecline {
font-size: 1.3em;
}
.afch .extra {
background-color: #FFFFFF;
height: 100%;
width: 20px;
vertical-align: top;
}
.afch .extra .wrapper {
position: relative;
}
.afch .extra .wrapper .open {
position: absolute;
height: 100%;
font-size: 1.5em;
cursor: pointer;
}
.afch .extra .wrapper .open:hover {
font-weight: bold;
}
.afch .extra .wrapper .links {
text-align: left;
padding-left: 26px;
padding-top: 8px;
}
.afch .extra .wrapper .links a {
display: none;
line-height: 1em;
font-size: 0.7em;
color: #111111;
}
.afch .accept {
background-color: #2ECC40;
border-color: #2ECC40;
/* Supplement jquery.chosen hackery; this is for the "manually add project" link. */
/*
Since we are hacking this dynamic suggestion feature into
jquery.chosen, we have to manually set the width of the input.
(see "Offer dynamic category suggestions" in submissions.js)
*/
}
.afch .accept .afch-label {
margin-top: 12px;
width: 20%;
min-width: 150px;
}
.afch .accept select#lifeStatus.afch-input {
vertical-align: middle;
}
.afch .accept #titleStatus {
font-size: 0.75em;
color: #FF4136;
}
.afch .accept #stubSorterContainer {
display: inline-block;
}
.afch .accept #stub-sorter-save {
display: none;
}
.afch .accept .chzn-container {
margin-top: 10px;
vertical-align: bottom;
}
.afch .accept #newWikiProjects_chzn a {
cursor: pointer;
}
.afch .accept #newCategories_chzn input {
width: 350px !important;
}
.afch .decline {
background-color: #FF4136;
border-color: #FF4136;
}
.afch .decline #declineInputWrapper {
padding-top: 5px;
}
.afch .decline #declineInputPreview,
.afch .decline #rejectInputPreview {
text-align: left;
}
.afch .decline #previewTrigger {
font-size: 80%;
}
.afch .decline #previewContainer {
border: thin dotted gray;
width: 50%;
margin: 0.5em auto;
text-align: left;
padding: 0 0.5em;
}
.afch .decline #previewContainer:empty {
display: none;
}
.afch .decline #declineRejectWrapper {
font-size: 120%;
padding: 0;
border: 0;
margin: 0 0 0.5em 0;
}
.afch .comment {
background-color: #FFDC00;
border-color: #FFDC00;
}
.afch #commentText {
height: 100px;
width: 60%;
}
.afch #commentPreview {
text-align: left;
}
.afch .g13 {
background-color: #FF851B;
border-color: #FF851B;
}
.afch .postpone-g13 {
background-color: #FFDC00;
border-color: #FFDC00;
}
.afch .submit {
background-color: #0074D9;
border-color: #0074D9;
}
.afch .submit select {
vertical-align: baseline;
}
.afch .submit .error {
font-size: 0.8em;
color: #FF4136;
}
.afch .mark {
background-color: #0074D9;
border-color: #0074D9;
}
.afch .other-action {
background-color: #FFDC00;
border-color: #FFDC00;
}
fcvocj8gyrj5bqcgc65faymigbtv9fl
MediaWiki:Gadget-charinsert.js
8
53917
311119
2026-10-25T16:58:48Z
Isma4l
41797
Abuuray
311119
javascript
text/javascript
/**
* charinsert loader
*/
if ( /^(edit|submit)$/.test( mw.config.get( 'wgAction' ) ) || mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Upload' ) {
mw.loader.load( 'ext.gadget.charinsert-core' );
}
kt0voujo93kc03xdrn4wl6rtrpu6miz
MediaWiki:Gadget-charinsert
8
53918
311120
2026-10-25T16:59:56Z
Isma4l
41797
/* */
311120
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-default}}">(D)</abbr></sup> [[:en:Help:CharInsert|CharInsert]]: ku dar qalabka hawsha ee hooseeya sanduuqa wax-ka-beddelka si aad si degdeg ah ugu geliso calaamadaha wiki iyo xarfaha gaarka ah ([[:en:WP:VPT|dhibaatooyin ma jiraan?]])
cl5vo9bvemj7vx0j8pkq86r9675nr0n
MediaWiki:Gadget-charinsert-core.js
8
53919
311121
2026-10-25T17:01:18Z
Isma4l
41797
Abuuray
311121
javascript
text/javascript
/**
* <https://en.wikipedia.org/wiki/MediaWiki:Gadget-charinsert-core.js>
*
* Asal ahaan waxaa saldhig u ahaa [[mw:User:Alex Smotrov/edittools.js]], oo loo beddelay in loogu isticmaalo Wikipedia-ga Ingiriiska.
*
* Qaabaynta (In laga dejiyo [[Special:MyPage/common.js]]):
* window.charinsertCustom – Shay (Object). Lagu daray liiska caadiga ah ee charinsert. Tusaale ahaan, dejinta
* tani si ay u noqoto { Symbols: '‽' } waxay ku dari doontaa interrobang dhammaadka qaybta Calaamadaha.
* window.editToolsRecall – Boolean. U deji run si aad u abuurto badhanka xusuusta (recall switch).
* window.charinsertDontMove – Boolean. U deji run si aad sanduuqa ugu dayato booskiisa caadiga ah, halkii
* lagu wareejin lahaa ka sarreeya soo koobidda wax-ka-beddelka.
* window.updateEditTools() – Shaqo (Function). Wac ka dib marka la cusboonaysiiyo window.charinsertCustom si dib loogu soo saaro
* daaqadda EditTools.
*/
/* global $, mw, charinsertCustom */
window.updateEditTools = function () {
};
$( function () {
var $currentFocused,
editTools;
function getSelectedSection() {
var selectedSection = mw.storage.get( editTools.storageKey )
|| mw.storage.session.get( editTools.storageKey );
return selectedSection;
}
function saveSelectedSection( newIndex ) {
mw.storage.set( editTools.storageKey, newIndex )
|| mw.storage.session.set( editTools.storageKey, newIndex );
}
editTools = {
// Gelitaannada uu ka horreeyo ␥ (U+2425 SYMBOL FOR DELETE FORM TWO) kama muuqan doonaan magaca namespace-ka maqaalka (namespace 0).
// Fadlan wax kasta oo beddel ah ku samee [[MediaWiki:Edittools]] sidoo kale, si kastaba ha ahaatee, halkii aad isticmaali lahayd summadda ␥, isticmaal {{#ifeq:{{NAMESPACE}}|{{ns:0}}| | }}.
charinsert: {
'Insert': ' – — ° ′ ″ rss ≈ ≠ ≤ ≥ ± − × ÷ ← → · § ␥Sign_your_posts_on_talk_pages: ␥~~\~~ Cite_your_sources: <ref>+</ref>',
'Wiki markup': 'Geli: – — ° ′ ″ rss ≠ ≤ ≥ ± − × ÷ ← → · § ␥~~\~~ <ref>+</ref> Wiki_markup: {\{+}} {\{\{+}}} | [+] [\[+]] [\[Category:+]] #REDIRECT.[\[+]] <s>+</s> <sup>+</sup> <sub>+</sub> <code>+</code> <pre>+</pre> <blockquote>+</blockquote> <ref.name="+"_/> {\{#tag:ref|+|group="nb"|name=""}} {\{Reflist}} <references./> <includeonly>+</includeonly> <noinclude>+</noinclude> {\{DEFAULTSORT:+}} <nowiki>+</nowiki> <!--.+_--> <span.class="plainlinks">+</span>',
'Symbols': '~ | ¡¿†‡↔↑↓•¶#∞ ‹+› «+» {\{angle.bracket|+}} ¤₳฿₵¢₡₢$₫₯€₠₣ƒ₴₭₤ℳ₥₦₧₰£៛₨₪৳₮₩¥ ♠♣♥♦ 𝄫♭♮♯𝄪 ¼½¾ © ◌ ☉☾☿♀🜨♂♃♄⛢♆',
'Latin': 'A a Á á À à  â Ä ä Ǎ ǎ Ă ă Ā ā à ã Å å Ą ą Æ æ Ǣ ǣ B b C c Ć ć Ċ ċ Ĉ ĉ Č č Ç ç D d Ď ď Đ đ Ḍ ḍ Ð ð E e É é È è Ė ė Ê ê Ë ë Ě ě Ĕ ĕ Ē ē Ẽ ẽ Ę ę Ẹ ẹ Ɛ ɛ Ǝ ǝ Ə ə F f G g Ġ ġ Ĝ ĝ Ğ ğ Ģ ģ H h Ĥ ĥ Ħ ħ Ḥ ḥ I i İ ı Í í Ì ì Î î Ï ï Ǐ ǐ Ĭ ĭ Ī ī Ĩ ĩ Į į Ị ị J j Ĵ ĵ K k Ķ ķ L l Ĺ ĺ Ŀ ŀ Ľ ľ Ļ ļ Ł ł Ḷ ḷ Ḹ ḹ M m Ṃ ṃ N n Ń ń Ň ň Ñ ñ Ņ ņ Ṇ ṇ Ŋ ŋ O o Ó ó Ò ò Ô ô Ö ö Ǒ ǒ Ŏ ŏ Ō ō Õ õ Ǫ ǫ Ọ ọ Ő ő Ø ø Œ œ Ɔ ɔ P p Q q R r Ŕ ŕ Ř ř Ŗ ŗ Ṛ ṛ Ṝ ṝ S s Ś ś Ŝ ŝ Š š Ş ş Ș ș Ṣ ṣ ß T t Ť ť Ţ ţ Ț ț Ṭ ṭ Þ þ U u Ú ú Ù ù Û û Ü ü Ǔ ǔ Ŭ ŭ Ū ū Ũ ũ Ů ů Ų ų Ụ ụ Ű ű Ǘ ǘ Ǜ ǜ Ǚ ǚ Ǖ ǖ V v W w Ŵ ŵ X x Y y Ý ý Ŷ ŷ Ÿ ÿ Ỹ ỹ Ȳ ȳ Z z Ź ź Ż ż Ž ž ß Ð ð Þ þ Ŋ ŋ Ə ə Ɂ ɂ Ꞌ ꞌ ʻ ʼ ʽ ꞉ ꞏ',
'Greek': 'ΆάΈέΉήΊίΌόΎύΏώ ΑαΒβΓγΔδ ΕεΖζΗηΘθ ΙιΚκΛλΜμ NνΞξΟοΠπ ΡρΣσςΤτΥυ ΦφΧχΨψΩω Ϝϝυ̯ι̯ ᾼᾳᾴᾺὰᾲᾶᾷἈἀᾈᾀἉἁᾉᾁἌἄᾌᾄἊἂᾊᾂἎἆᾎᾆἍἅᾍᾅἋἃᾋᾃἏἇᾏᾇ ῈὲἘἐἙἑἜἔἚἒἝἕἛἓ ῌῃῄῊὴῂῆῇἨἠᾘᾐἩἡᾙᾑἬἤᾜᾔἪἢᾚᾒἮἦᾞᾖἭἥᾝᾕἫἣᾛᾓἯἧᾟᾗ ῚὶῖἸἰἹἱἼἴἺἲἾἶἽἵἻἳἿἷΪϊΐῒῗ ῸὸὈὀὉὁὌὄὊὂὍὅὋὃ ῤῬῥ ῪὺῦὐὙὑὔὒὖὝὕὛὓὟὗΫϋΰῢῧ ῼῳῴῺὼῲῶῷὨὠᾨᾠὩὡᾩᾡὬὤᾬᾤὪὢᾪᾢὮὦᾮᾦὭὥᾭᾥὫὣᾫᾣὯὧᾯᾧ ᾹᾱᾸᾰῙῑῘῐῩῡῨῠ {{lang|el|+}} {{lang|grc|+}}',
'Cyrillic': 'АаБбВвГг ҐґЃѓДдЂђ ЕеЁёЄєЖж ЗзЅѕИиІі ЇїЙйЈјКк ЌќЛлЉљМм НнЊњОоПп РрСсТтЋћ УуЎўФфХх ЦцЧчЏџШш ЩщЪъЫыЬь ЭэЮюЯя ӘәӨөҒғҖҗ ҚқҜҝҢңҮү ҰұҲҳҸҹҺһ ҔҕӢӣӮӯҘҙ ҠҡҤҥҪҫӐӑ ӒӓӔӕӖӗӰӱ ӲӳӸӹӀ ҞҟҦҧҨҩҬҭ ҴҵҶҷҼҽҾҿ ӁӂӃӄӇӈӋӌ ӚӛӜӝӞӟӠӡ ӤӥӦӧӪӫӴӵ ́',
'Hebrew': 'אבגדהוזחטיכךלמםנןסעפףצץקרשת ׳ ״ װױײ',
'Arabic': ' Turjumaad (Transliteration): ʾ ā ī ū ṯ ḥ ḫ ẖ ḏ š ṣ ḍ ṭ ẓ ʿ ġ ẗ á ا ﺁ ب t ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك l م n ه ة و ي ى ء أ إ ؤ ئ',
'IPA (English)': 'ˈ ˌ ŋ ɡ tʃ dʒ ʃ ʒ θ ð ʔ ɑː ɒ æ aɪ aʊ ɛ ɛər+ eɪ ɪ ɪər+ iː ɔː ɔɪ oʊ ʊ ʊər+ uː ʌ ɜːr+ ə ər ɒ̃ æ̃ {\{IPAc-en|+}} {\{IPA|+}} {\{angle.bracket|+}}',
'IPA': 'Consonants: ɱɳɲŋɴ : t̪ d̪ ʈɖɟɡɢʡʔ : ɸβθð ʃʒʂʐɕʑ çʝɣχʁ ħʕʜʢɦɧ : ʋɹɻɥɰʍ : ʙⱱɾɽʀ ɺ ɫɬɮɭʎʟ : ɓɗᶑʄɠʛ ʘǀǃǂǁ Vowels: ɪʏɨʉɯʊ : øɘɵɤ ə ɚ ɛœɜɝɞʌɔ : æɶɐɑɒ Spacing_diacritics: ˈˌːˑʼˀˤᵝᵊᶢˠʰʱʲˡⁿᵑʷᶣ˞‿˕˔ Combining_diacritics: ̚ ̪ ̺ ̻ ̼ ̬ ̊ ̥ ̞ ̝ ̘ ̙ ̽ ̟ ̠ ̈ ̤ ̹ ̜ ̍ ̩ ̆ ̯ ̃ ̰ ͡ ͜ Tone: ̋ ́ ̄ ̀ ̏ ̌ ̂ ᷄ ᷅ ᷇ ᷆ ᷈ ᷉ ˥˦˧˨˩ꜛꜜ : ↗↘‖ extIPA: ͈ ͉ ͎ ̣ ̫ ͊ ᷽ ͇ : ˭ᵻᵿ {\{angle.bracket|+}} {\{IPA|+}} {\{IPA.link|+}}',
'Math and logic': '− × ÷ ⋅ ° ∗ ∘ ± ∓ ≤ ≥ ≠ ≡ ≅ ≜ ≝ ≐ ≃ ≈ ⊕ ⊗ ⇐ ⇔ ⇒ ∞ ← ↔ → ≪ ≫ ∝ √ ∤ ≀ ◅ ▻ ⋉ ⋊ ⋈ ∴ ∵ ↦ ¬ ∧ ∨ ⊻ ∀ ∃ ∈ ∉ ∋ ⊆ ⊈ ⊊ ⊂ ⊄ ⊇ ⊉ ⊋ ⊃ ⊅ ∪ ∩ ∑ ∏ ∐ ′ ∫ ∬ ∭ ∮ ∇ ∂ ∆ ∅ ℂ ℍ ℕ ℙ ℚ ℝ ℤ ℵ ⌊ ⌋ ⌈ ⌉ ⊤ ⊥ ⊢ ⊣ ⊧ □ ∠ ⟨ ⟩ <math>+</math> {\{math|+}} {\{mvar|+}} {\{frac|+|}} {\{sfrac|+|}}'
},
charinsertDivider: "\240",
storageKey: 'edittoolscharsubset',
createEditTools: function ( placeholder ) {
var sel, id;
var box = document.createElement( 'div' );
var prevSubset = 0, curSubset = 0;
box.id = 'editpage-specialchars';
box.className = "nopopups";
box.title = 'Guji xarafka ama calaamadda si aad ugu geliso sanduuqa wax-ka-beddelka';
// ku dar qaybaha uu isticmaalahu qeexay
if ( window.charinsertCustom ) {
for ( id in charinsertCustom ) {
if ( !editTools.charinsert[id] ) {
editTools.charinsert[id] = '';
}
}
}
// abuur sanduuqa soo-baxa (drop-down select)
sel = document.createElement( 'select' );
for ( id in editTools.charinsert ) {
sel.options[sel.options.length] = new Option( id, id );
}
sel.selectedIndex = 0;
sel.style.marginRight = '.3em';
sel.title = 'Dooro qaybta hoose ee xarfaha';
sel.onchange = sel.onkeyup = selectSubset;
box.appendChild( sel );
// abuur badhanka "xusuusta" (recall)
if ( window.editToolsRecall ) {
var recall = document.createElement( 'span' );
recall.appendChild( document.createTextNode( '↕' ) ); // ↔
recall.onclick = function() {
sel.selectedIndex = prevSubset;
selectSubset();
};
recall.style.cssFloat = 'left';
recall.style.marginRight = '5px';
recall.style.cursor = 'pointer';
box.appendChild( recall );
}
if ( getSelectedSection() ) {
sel.selectedIndex = getSelectedSection();
}
placeholder.parentNode.replaceChild( box, placeholder );
selectSubset();
return;
function selectSubset() {
// xasuusnow kii hore (badhanka "recall")
prevSubset = curSubset;
curSubset = sel.selectedIndex;
// ku keydi keydka mareegaha (web storage) si uu u sii jiro
saveSelectedSection( curSubset );
// qari qaybaha hoose ee kale
var pp = box.getElementsByTagName( 'p' ) ;
for ( var i = 0; i < pp.length; i++ ) {
pp[i].style.display = 'none';
}
// tusi/abuur qaybta hoose ee hadda
var id = sel.options[curSubset].value;
var p = document.getElementById( id );
if ( !p ) {
p = document.createElement( 'p' );
p.className = 'nowraplinks';
p.id = id;
if ( id == 'Arabic' || id == 'Hebrew' ) {
p.style.fontSize = '120%';
p.dir = 'rtl';
}
var tokens = editTools.charinsert[id];
if ( window.charinsertCustom && charinsertCustom[id] ) {
if ( tokens.length > 0 ) {
tokens += ' ';
}
tokens += charinsertCustom[id];
}
editTools.createTokens( p, tokens );
box.appendChild( p );
}
p.style.display = 'inline';
}
},
createTokens: function ( paragraph, str ) {
var tokens = str.split( ' ' ), token, i, n;
for ( i = 0; i < tokens.length; i++ ) {
token = tokens[i];
n = token.indexOf( '+' );
if ( token.charAt( 0 ) === '␥' ) {
if ( token.length > 1 && mw.config.get( 'wgNamespaceNumber' ) === 0 ) {
continue;
} else {
token = token.substring( 1 );
}
}
if ( token === '' || token === '_' ) {
addText( editTools.charinsertDivider + ' ' );
} else if ( token === '\n' ) {
paragraph.appendChild( document.createElement( 'br' ) );
} else if ( token === '___' ) {
paragraph.appendChild( document.createElement( 'hr' ) );
} else if ( token.charAt( token.length-1 ) === ':' ) { // : dhamaadka waxay ka dhigan tahay qoraal oo keliya
addBold( token );
} else if ( n === 0 ) { // +<tag> -> <tag>+</tag>
addLink( token.substring( 1 ), '</' + token.substring( 2 ), token.substring( 1 ) );
} else if ( n > 0 ) { // <tag>+</tag>
addLink( token.substring( 0, n ), token.substring( n+1 ) );
} else {
var chars = Array.from(token);
if ( chars.length > 2 && token.charCodeAt( 0 ) > 127 ) { // xarfo la gelin karo oo xarig ah (string)
for ( var j = 0; j < chars.length; j++ ) {
addLink( chars[ j ], '' );
}
} else {
addLink( token, '' );
}
}
}
return;
function addLink( tagOpen, tagClose, name ) {
var handler;
var dle = tagOpen.indexOf( '\x10' );
var a = document.createElement( 'a' );
if ( dle > 0 ) {
var path = tagOpen.substring( dle + 1 ).split( '.' );
tagOpen = tagOpen.substring( 0, dle );
handler = window;
for ( var i = 0; i < path.length; i++ ) {
handler = handler[path[i]];
}
$( a ).on( 'click', handler );
} else {
tagOpen = tagOpen.replace( /\./g,' ' );
tagClose = tagClose ? tagClose.replace( /_/g,' ' ) : '';
$( a ).on( 'click', {
tagOpen: tagOpen,
sampleText: '',
tagClose: tagClose
}, insertTags );
}
name = name || tagOpen + tagClose;
name = name.replace( /\\n/g,'' );
a.appendChild( document.createTextNode( name ) );
a.href = '';
paragraph.appendChild( a );
addText( ' ' );
}
function addBold( text ) {
var b = document.createElement( 'b' );
b.appendChild( document.createTextNode( text.replace( /_/g,' ' ) ) );
paragraph.appendChild( b );
addText( ' ' );
}
function addText( txt ) {
paragraph.appendChild( document.createTextNode( txt ) );
}
function insertTags( e ) {
e.preventDefault();
if ( $currentFocused && $currentFocused.length && !$currentFocused.prop( 'readonly' ) ) {
$currentFocused.textSelection(
'encapsulateSelection', {
pre: e.data.tagOpen,
peri: e.data.sampleText,
post: e.data.tagClose
}
);
}
}
},
setup: function () {
var placeholder;
if ( $( '#editpage-specialchars' ).length ) {
placeholder = $( '#editpage-specialchars' )[0];
} else {
placeholder = $( '<div id="editpage-specialchars"> </div>' ).prependTo( '.mw-editTools' )[0];
}
if ( !placeholder ) {
return;
}
if ( !window.charinsertDontMove ) {
$( '.editOptions' ).before( placeholder );
}
// Hel curiyaha la diiradda saaray (focused)
$currentFocused = $( '#wpTextbox1' );
// Ku dabool sanduuqyada qoraalka ee si dinamik ah loo abuuray iyo kuwa caadiga ah labadaba
$( document ).on( 'focus', 'textarea, input:text, .CodeMirror', function () {
if ( $( this ).is( '.CodeMirror' ) ) {
// CodeMirror waxay ku xirantaa #wpTextbox1 isbeddellada textSelection
$currentFocused = $( '#wpTextbox1' );
} else {
$currentFocused = $( this );
}
} );
// Waxaa loo isticmaalaa in lagu go'aamiyo halka lagu gelinayo calaamadaha (tags)
editTools.createEditTools( placeholder );
window.updateEditTools = function () {
editTools.createEditTools( $( '#editpage-specialchars' )[0] );
};
}
}; // dhammaadka editTools
editTools.setup();
} );
fie9agecvjcbasrfpy447j8rv0i4o95
MediaWiki:Gadget-charinsert-styles.css
8
53920
311122
2026-10-25T17:01:55Z
Isma4l
41797
Abuuray
311122
css
text/css
/* _____________________________________________________________________________
* | |
* | === WARNING: GLOBAL GADGET FILE === |
* | Changes to this page affect many users. |
* | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. |
* |_____________________________________________________________________________|
*
*/
/* Overwrites selector from MediaWiki:Common.css */
div#editpage-specialchars {
display: block;
border: 1px solid var( --border-color-base, #a2a9b1 );
padding: .5em 1em;
}
#editpage-specialchars a {
background-color: var( --background-color-interactive-subtle, #f8f9fa );
color: var( --color-progressive, #36c );
border: 1px solid var( --border-color-interactive, #72777d );
padding: 1px 4px;
}
textarea#wpTextbox1 + #editpage-specialchars,
.wikiEditor-ui-clear + #editpage-specialchars {
border-top: 0;
}
qyd3rw16ijjqrifoew5xtp699xbzpi4
MediaWiki:Gadget-charinsert-core
8
53921
311123
2026-10-25T17:03:03Z
Isma4l
41797
/* */
311123
wikitext
text/x-wiki
Qaybaha qalabka CharInsert
jf7olki3wwfpok51hmv9tf56vx4f2ly
MediaWiki:Gadget-legacyToolbar.js
8
53922
311124
2026-10-25T17:04:20Z
Isma4l
41797
Abuuray
311124
javascript
text/javascript
/* _____________________________________________________________________________
* | |
* | === DIGRIIN: FAYLKA GADGET-KA CAALAMIGA AH === |
* | Isbeddellada faylkan waxay saameeyaan isticmaaleyaal badan. |
* | Fadlan kala hadal isbeddellada bogga wadahadalka ama [[WT:Gadget]] ka hor inta aadan wax ka beddelin.|
* |_____________________________________________________________________________|
*
* Laga soo qaatay MediaWiki Core, ka hor inta aan laga saarin 2018-10-17.
* Waxaa laga soo dejiyay frwiki oo laga helay https://fr.wikipedia.org/wiki/MediaWiki:Gadget-mediawiki.toolbar.js, oo wata turjumaado iyo ku darid badhammo.
*
* Qalabka is-dhexgalka ee qalabka wax-ka-beddelka caadiga ah.
*/
( function () {
var toolbar, isReady, $toolbar, queue, slice, $currentFocused;
/**
* Caawiyaha gudaha ee fuliya gelinta dhabta ah ee badhanka ee qalabka wax-ka-beddelka (toolbar).
*
* Wixii la jaanqaadida gadaal (backwards-compatibility), gudbinta `imageFile`, `speedTip`, `tagOpen`, `tagClose`,
* `sampleText` iyo `imageId` oo ah doodaha kala duwan (habkan) sidoo kale waa la taageeraa.
*
* @private
*
* @param {Object} button Shay leh sifooyinka soo socda.
* Waxaa lagaa rabaa inaad bixiso *ama* cabbirka `onClick`, ama saddexda cabbir
* `tagOpen`, `tagClose` iyo `sampleText`, laakiin ma aha labadaba (waa kuwo is-diidaya).
* @param {string} [button.imageFile] Sawirka loo isticmaalayo badhanka.
* @param {string} button.speedTip Talo-bixinta (tooltip) ee muuqata marka isticmaalahu dul-mariyo jiirka badhanka.
* @param {Function} [button.onClick] Shaqada la fulinayo marka badhanka la gujiyo.
* @param {string} [button.tagOpen]
* @param {string} [button.tagClose]
* @param {string} [button.sampleText] Beddelka `onClick`. `tagOpen`, `tagClose` iyo
* `sampleText` oo isla jira waxay bixiyaan calaamadaynta (markup) ee ay tahay in lagu geliyo qoraalka bogga
* booska hadda ee khaanad-tilmaameedka (cursor).
* @param {string} [button.imageId] Sifo `id` ee curiyaha HTML ee badhanka. Waxaa loo isticmaali karaa
* in lagu qeexayo sawirka oo wata CSS haddii aysan u bixin sida `imageFile`.
* @param {string} [speedTip]
* @param {string} [tagOpen]
* @param {string} [tagClose]
* @param {string} [sampleText]
* @param {string} [imageId]
*/
function insertButton( button, speedTip, tagOpen, tagClose, sampleText, imageId ) {
var $button;
// La jaanqaadka gadaal (Backwards compatibility)
if ( typeof button !== 'object' ) {
button = {
imageFile: button,
speedTip: speedTip,
tagOpen: tagOpen,
tagClose: tagClose,
sampleText: sampleText,
imageId: imageId
};
}
if ( button.imageFile ) {
$button = $( '<img>' ).attr( {
src: button.imageFile,
alt: button.speedTip,
title: button.speedTip,
id: button.imageId || undefined,
'class': 'mw-toolbar-editbutton'
} );
} else {
$button = $( '<div>' ).attr( {
title: button.speedTip,
id: button.imageId || undefined,
'class': 'mw-toolbar-editbutton'
} );
}
$button.click( function ( e ) {
if ( button.onClick !== undefined ) {
button.onClick( e );
} else {
toolbar.insertTags( button.tagOpen, button.tagClose, button.sampleText );
}
return false;
} );
$toolbar.append( $button );
}
isReady = false;
$toolbar = false;
/**
* @private
* @property {Array}
* Waxaa ku jira shayada badhanka (iyo wixii la jaanqaadida gadaal, waxay sidoo
* kale ka koobnaan kartaa safka doodaha ee insertButton).
*/
queue = [];
slice = queue.slice;
toolbar = {
/**
* Ku dar badhamada qalabka wax-ka-beddelka.
*
* Waxay daryeeshaa xaaladaha tartanka (race conditions) iyo ku-tiirsanaanta ku saleysan waqtiga iyadoo gelineysa badhamada saf (queue) haddii
* habkan la waco ka hor inta aan la abuurin qalabka wax-ka-beddelka.
*
* Wixii la jaanqaadida gadaal, gudbinta `imageFile`, `speedTip`, `tagOpen`, `tagClose`,
* `sampleText` iyo `imageId` oo ah doodaha kala duwan (habkan) sidoo kale waa la taageeraa.
*
* @inheritdoc #insertButton
*/
addButton: function () {
if ( isReady ) {
insertButton.apply( toolbar, arguments );
} else {
// U beddel liiska doodaha saf
queue.push( slice.call( arguments ) );
}
},
/**
* Ku dar badhamada badan qalabka wax-ka-beddelka (eeg sidoo kale #addButton).
*
* Tusaalaha isticmaalka:
*
* addButtons( [ { .. }, { .. }, { .. } ] );
* addButtons( { .. }, { .. } );
*
* @param {...Object|Array} [buttons] Saf ka kooban shayada badhanka ama badhanka
* koowaad ee liiska doodaha kala duwan (variadic arguments).
*/
addButtons: function ( buttons ) {
if ( !Array.isArray( buttons ) ) {
buttons = slice.call( arguments );
}
if ( isReady ) {
buttons.forEach( function ( button ) {
insertButton( button );
} );
} else {
// Geli badhan kasta safka
queue.push.apply( queue, buttons );
}
},
/**
* Ku dabool tagOpen/tagClose xulashada sanduuqa qoraalka ee hadda diiradda saaran.
*
* Waxay isticmaashaa `sampleText` haddii xulashadu ay madhan tahay.
*
* @param {string} tagOpen
* @param {string} tagClose
* @param {string} sampleText
*/
insertTags: function ( tagOpen, tagClose, sampleText ) {
if ( $currentFocused && $currentFocused.length ) {
$currentFocused.textSelection(
'encapsulateSelection', {
pre: tagOpen,
peri: sampleText,
post: tagClose
}
);
}
}
};
// Wixii la jaanqaadida gadaal. Waxaa horay looga yeeri jiray EditPage.php, laga yaabaa meelo kale sidoo kale.
toolbar.init = $.noop;
// Soo bandhig API si fagaare ah
mw.toolbar = toolbar;
$( function () {
var $textBox, i, button;
// Waxaa loo isticmaalaa in lagu go'aamiyo halka lagu gelinayo calaamadaha
$currentFocused = $( '#wpTextbox1' );
// Buuxi kaydka xulaha (selector cache) ee $toolbar
$toolbar = $( '#toolbar' );
if ( $toolbar.length === 0 ) {
$textBox = $( '#wpTextbox1' );
if ( $textBox.length === 0 ) {
return;
}
$toolbar = $( '<div>' ).attr( { id: 'toolbar' } );
$toolbar.insertBefore( $textBox );
}
for ( i = 0; i < queue.length; i++ ) {
button = queue[ i ];
if ( Array.isArray( button ) ) {
// Safka doodaha ee la sii gudbiyay ee ka yimid mw.toolbar.addButton
insertButton.apply( toolbar, button );
} else {
// Shayga ceyriinka ah ee ka yimid mw.toolbar.addButtons
insertButton( button );
}
}
// Nadiifi safka
queue.length = 0;
// Tani waxay keentaa in wicitaanada kale ee addButton ay toos ugu tagaan gelinta
// halkii ay ka ahaan lahaayeen safka.
// Waa muhiim in tani ay timaado ka dib midka keliya ee wareegga (loop) dhex mara
// safka
isReady = true;
mw.hook("mw.toolbar").fire();
// Ku dabool sanduuqyada qoraalka ee si dinamik ah loo abuuray iyo kuwa caadiga ah labadaba
$( document ).on( 'focus', 'textarea, input:text', function () {
$currentFocused = $( this );
} );
} );
}() );
mw.toolbar.addButton( {
imageFile: "//upload.wikimedia.org/wikipedia/commons/e/e2/Button_bold.png",
speedTip: "Qoraal geesinso leh (Bold)",
tagOpen: "'''",
tagClose: "'''",
sampleText: "qoraal geesinso leh",
imageId: "mw-editbutton-bold"
} );
mw.toolbar.addButton( {
imageFile: "//upload.wikimedia.org/wikipedia/commons/1/1d/Button_italic.png",
speedTip: "Qoraal furan/qalloocan (Italic)",
tagOpen: "''",
tagClose: "''",
sampleText: "qoraal qalloocan",
imageId: "mw-editbutton-italic"
} );
mw.toolbar.addButton( {
imageFile: "//upload.wikimedia.org/wikipedia/commons/c/c0/Button_link.png",
speedTip: "Xiriiriye gudaha ah",
tagOpen: "[[",
tagClose: "]]",
sampleText: "cinwaanka bogga",
imageId: "mw-editbutton-link"
} );
mw.toolbar.addButton( {
imageFile: "//upload.wikimedia.org/wikipedia/commons/e/ec/Button_extlink.png",
speedTip: "Xiriiriye dibadda ah",
tagOpen: "[",
tagClose: "]",
sampleText: "http://www.example.com cinwaanka xiriiriyaha",
imageId: "mw-editbutton-extlink"
} );
mw.toolbar.addButton( {
imageFile: "//upload.wikimedia.org/wikipedia/commons/7/78/Button_head_A2.png",
speedTip: "Madax heerka 2aad",
tagOpen: "== ",
tagClose: " ==",
sampleText: "magaca madaxa",
imageId: "mw-editbutton-headline"
} );
mw.toolbar.addButton( {
imageFile: "//upload.wikimedia.org/wikipedia/commons/d/de/Button_image.png",
speedTip: "Sawir",
tagOpen: "[[File:",
tagClose: "|thumb|Sharaxaada sawirka.]]",
sampleText: "Tusaale.jpg",
imageId: "mw-editbutton-image"
} );
mw.toolbar.addButton( {
imageFile: "//upload.wikimedia.org/wikipedia/commons/1/19/Button_media.png",
speedTip: "Warbaahin (Media)",
tagOpen: "[[File:",
tagClose: "|thumb|Sharaxaada warbaahinta.]]",
sampleText: "Tusaale.ogg",
imageId: "mw-editbutton-media"
} );
mw.toolbar.addButton( {
imageFile: "//upload.wikimedia.org/wikipedia/commons/8/82/Nowiki_icon.png",
speedTip: "Calaamadaha Nowiki",
tagOpen: "<nowiki"+">",
tagClose: "</"+"nowiki>",
sampleText: "",
imageId: "mw-editbutton-nowiki"
} );
mw.toolbar.addButton( {
imageFile: "//upload.wikimedia.org/wikipedia/commons/6/6d/Button_sig.png",
speedTip: "Sax إeexda iyo taariikhda",
tagOpen: "-- ~~"+"~~",
tagClose: "",
sampleText: "",
imageId: "mw-editbutton-signature"
} );
mw.toolbar.addButton( {
imageFile: "//upload.wikimedia.org/wikipedia/commons/0/0d/Button_hr.png",
speedTip: "Kariiska jiifka ah (Horizontal line)",
tagOpen: "--"+"--",
tagClose: "",
sampleText: "",
imageId: "mw-editbutton-hr"
} );
1ydybk2q88uypi4lytdyup1ukguzl4l
MediaWiki:Gadget-extra-toolbar-buttons-core.js
8
53923
311125
2026-10-25T17:05:28Z
Isma4l
41797
Abuuray
311125
javascript
text/javascript
/* global mw */
/* jshint strict: false, browser: true, jquery: true */
/**
* Badhamada dheeraadka ah ee qalabka wax-ka-beddelka (Extra toolbar options)
*
* Sharaxaada: Waxay ku dartaa badhamada dheeraadka ah qalabka wax-ka-beddelka ee duugga ah (ka aan la horumarin).
*
* Eegayaasha/Hagaajiyaasha: [[User:MarkS]], [[User:Voice of All]], [[User:R. Koot]]
*/
function addExtraButtons () {
mw.toolbar.addButtons(
{
imageId: 'button-redirect',
imageFile: '//upload.wikimedia.org/wikipedia/en/c/c8/Button_redirect.png',
speedTip: 'U wareejinta (Redirect)',
tagOpen: '#REDIRECT[[',
tagClose: ']]',
sampleText: 'Magaca bogga la hiigsanayo'
},
{
imageId: 'button-strike',
imageFile: '//upload.wikimedia.org/wikipedia/en/c/c9/Button_strike.png',
speedTip: 'Garaafka dhexda (Strike-through)',
tagOpen: '<s>',
tagClose: '</s>',
sampleText: 'Qoraal dhexda laga xariiqay'
},
{
imageId: 'button-enter',
imageFile: '//upload.wikimedia.org/wikipedia/en/1/13/Button_enter.png',
speedTip: 'Jebinta sadarka (Line break)',
tagOpen: '<br/>',
tagClose: '',
sampleText: ''
},
{
imageId: 'button-subscript',
imageFile: '//upload.wikimedia.org/wikipedia/en/7/70/Button_lower_letter.png',
speedTip: 'Qoraalka hoose (Subscript)',
tagOpen: '<sub>',
tagClose: '</sub>',
sampleText: 'Qoraal hoose'
},
{
imageId: 'button-superscript',
imageFile: '//upload.wikimedia.org/wikipedia/en/8/80/Button_upper_letter.png',
speedTip: 'Qoraalka sare (Superscript)',
tagOpen: '<sup>',
tagClose: '</sup>',
sampleText: 'Qoraal sare'
},
{
imageId: 'button-small',
imageFile: '//upload.wikimedia.org/wikipedia/en/5/58/Button_small.png',
speedTip: 'Yar (Small)',
tagOpen: '<small>',
tagClose: '</small>',
sampleText: 'Qoraal yar'
},
{
imageId: 'button-hide-comment',
imageFile: '//upload.wikimedia.org/wikipedia/en/3/34/Button_hide_comment.png',
speedTip: 'Geli faallo qarsan (Hidden comment)',
tagOpen: '<!-- ',
tagClose: ' -->',
sampleText: 'Faallo'
},
{
imageId: 'button-gallery',
imageFile: '//upload.wikimedia.org/wikipedia/en/1/12/Button_gallery.png',
speedTip: 'Geli gallery sawiro ah',
tagOpen: '\n<gallery>\n',
tagClose: '\n</gallery>',
sampleText: 'File:Example.svg|Sharaxaad1\nFile:Example.jpg|Sharaxaad2'
},
{
imageId: 'button-blockquote',
imageFile: '//upload.wikimedia.org/wikipedia/en/f/fd/Button_blockquote.png',
speedTip: 'Geli qayb qoraal ah oo la soo xigtay',
tagOpen: '<blockquote>\n',
tagClose: '\n</blockquote>',
sampleText: 'Xigashada blokga'
},
{
imageId: 'button-insert-table',
imageFile: '//upload.wikimedia.org/wikipedia/en/6/60/Button_insert_table.png',
speedTip: 'Geli miis (Table)',
tagOpen: '{| class="wikitable"\n|',
tagClose: '\n|}',
sampleText: '-\n! madaxa 1\n! madaxa 2\n! madaxa 3\n|-\n| safka 1, unugga 1\n| safka 1, unugga 2\n| safka 1, unugga 3\n|-\n| safka 2, unugga 1\n| safka 2, unugga 2\n| safka 2, unugga 3'
},
{
imageId: 'button-insert-reflink',
imageFile: '//upload.wikimedia.org/wikipedia/commons/7/79/Button_reflink.png',
speedTip: 'Geli tixraac (Reference)',
tagOpen: '<ref>',
tagClose: '</ref>',
sampleText: 'Halkan geli qoraalka xigashada'
}
);
}
mw.hook( 'mw.toolbar' ).add( addExtraButtons );
3if06zhw8etup7ft9k2b4eu78cgtzo3
MediaWiki:Gadget-refToolbar
8
53924
311126
2026-10-25T17:07:50Z
Isma4l
41797
/* */
311126
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-default}}">(D)</abbr></sup> [[:en:Wikipedia:RefToolbar|refToolbar]]: ku dar badhanka "soo xigashada" qalabka wax ka beddelka si aad si degdeg ah ugu darto tampleetyada xigashada ee caadiga ah
hgxawalrtrzihpzgqwln8i5swdx2c0h
MediaWiki:Gadget-refToolbarBase.js
8
53925
311127
2026-10-25T17:09:08Z
Isma4l
41797
Abuuray
311127
javascript
text/javascript
/* jshint asi: true */
/* global mw, $, CiteTB, citeTemplate, citeErrorCheck */
if (window.CiteTB === undefined) {
window.CiteTB = {
"Templates": {}, // Dhammaan tampleetyada
"Options": {}, // Ikhtiyaarrada caalamiga ah
"UserOptions": {}, // Ikhtiyaarrada isticmaalaha
"DefaultOptions": {}, // Heerarka caadiga ah ee qoraalka
"ErrorChecks": {} // Shaqooyinka hubinta khaladaadka
};
}
// Shayga tampleetyada xigashada (cite templates)
window.citeTemplate = function (templatename, shortform, basicfields, expandedfields) {
// Sifooyinka
this.templatename = templatename; // Magaca tampleetka - "cite web", "cite book", iwm.
this.shortform = shortform; // Nooc gaaban, oo loo isticmaalo sanduuqa hoos-u-dhaca (dropdown box)
this.basic = basicfields; // Goobaha aasaasiga ah - qoraa, cinwaan, daabacaaye...
// Kuwa aan sida badan loo isticmaalin - xigasho (quote), archiveurl - waa inay ahaadaan wax kasta oo tampleetku taageerayo marka laga reebo kuwa aasaasiga ah
this.extra = expandedfields;
this.incrementables = {};
// Ku dar liiska
CiteTB.Templates[this.templatename] = this;
// Hababka (Methods)
this.makeFormInner = function (fields, incrsetup) {
var i = 0;
var trs = [];
var autofills = []
for (i = 0; i < fields.length; i++) {
var fieldobj = fields[i];
var field = labelfield = fieldobj.field;
var ad = false;
if (incrsetup && fieldobj.increment_group) {
field = fieldobj.field.replace('<N>', '1');
labelfield = fieldobj.field.replace('<N>', '');
if (this.incrementables[fieldobj.increment_group] && !this.incrementables[fieldobj.increment_group].setup) {
// Shayga waa la abuuray, laakiin si buuxda looma bilaabin
this.incrementables[fieldobj.increment_group]['fields'].push(fieldobj)
} else if (!this.incrementables[fieldobj.increment_group]) {
// Shayga weli lama abuurin
this.incrementables[fieldobj.increment_group] = {
'fields': [fieldobj],
'val': 1,
'setup': false
};
} else if (this.incrementables[fieldobj.increment_group] && this.incrementables[fieldobj.increment_group].setup) {
// Si buuxda loogu bilaabay wicitaankii hore ee shaqadan, oo kaliya dib loo dejinayo lambarka
this.incrementables[fieldobj.increment_group].val = 1
}
} else if (fieldobj.increment_group) {
// Ku daridda saf cusub
incrval = this.incrementables[fieldobj.increment_group].val;
field = fieldobj.field.replace('<N>', incrval.toString());
labelfield = fieldobj.field.replace('<N>', '');
}
if ($.inArray(field, CiteTB.getOption('autodate fields')) != -1) {
im = $('<img />').attr('src', '//upload.wikimedia.org/wikipedia/commons/thumb/7/7b/Nuvola_apps_date.svg/20px-Nuvola_apps_date.svg.png');
im.attr('alt', mw.messages.get('cite-insert-date')).attr('title', mw.messages.get('cite-insert-date'));
var ad = $('<a />').attr('href', '#');
ad.append(im);
ad.attr('id', 'cite-date-' + CiteTB.escStr(this.shortform) + '-' + field);
$(document).on('click', '#cite-date-' + CiteTB.escStr(this.shortform) + '-' + field, CiteTB.fillAccessdate);
}
if (fieldobj.autofillid) {
var autotype = fieldobj.autofillid;
im = $('<img />').attr('src', '//upload.wikimedia.org/wikipedia/commons/thumb/1/17/System-search.svg/20px-System-search.svg.png');
im.attr('alt', mw.messages.get('cite-autofill-alt')).attr('title', mw.messages.get('cite-autofill-alt'));
var ad = $('<a />').attr('href', '#');
ad.append(im);
ad.attr('id', 'cite-auto-' + CiteTB.escStr(this.shortform) + '-' + field + '-' + autotype);
autofills.push('#cite-auto-' + CiteTB.escStr(this.shortform) + '-' + field + '-' + autotype);
}
if (fieldobj.increment_button) {
var incrtype = fieldobj.increment_group;
im = $('<img />').attr('src', '//upload.wikimedia.org/wikipedia/commons/thumb/b/b9/Nuvola_action_edit_add.svg/20px-Nuvola_action_edit_add.svg.png');
im.attr('alt', mw.messages.get('cite-increment-alt')).attr('title', mw.messages.get('cite-increment-alt'));
var ad = $('<a />').attr('href', '#');
ad.append(im);
ad.attr('id', 'cite-incr-' + CiteTB.escStr(this.shortform) + '-' + incrtype);
}
var display = mw.messages.get('cite-' + labelfield + '-label');
if (typeof display !== 'string') {
if (fieldobj.label) {
display = CiteTB.fixStr(fieldobj.label);
} else {
display = CiteTB.fixStr(labelfield)
}
}
var tooltip = fieldobj.tooltip ? $('<abbr />').attr('title', mw.messages.get(fieldobj.tooltip)).html('<sup>?</sup>') : false;
var input = '';
if (ad) {
input = $('<input tabindex="1" style="width:85%" type="text" />');
} else {
input = $('<input tabindex="1" style="width:100%" type="text" />');
}
input.attr('id', 'cite-' + CiteTB.escStr(this.shortform) + '-' + field);
if (fieldobj.autofillprop) {
classname = 'cite-' + CiteTB.escStr(this.shortform) + '-' + fieldobj.autofillprop
if (fieldobj.increment_group) {
input.addClass('cite-' + CiteTB.escStr(this.shortform) + '-incr-' + fieldobj.increment_group);
classname += '-' + this.incrementables[fieldobj.increment_group].val.toString();
}
input.addClass(classname);
}
var label = $('<label />');
label.attr('for', 'cite-' + CiteTB.escStr(this.shortform) + '-' + field).text(display);
if (tooltip) {
label.append(tooltip);
}
var style = 'text-align:right; width:20%;';
if (i % 2 == 1) {
style += ' padding-left:1em;';
} else {
var tr = $('<tr />');
}
var td1 = $('<td class="cite-form-td" />').attr('style', style);
td1.append(label);
tr.append(td1);
var td2 = $('<td class="cite-form-td" style="width:30%" />');
td2.append(input);
if (ad) {
td2.append(ad);
}
tr.append(td2);
if (i % 2 == 0) {
trs.push(tr);
}
}
var needsetup = false;
for (g in this.incrementables) {
if (!this.incrementables[g].setup) {
needsetup = true;
$(document).on('click', '#cite-incr-' + CiteTB.escStr(this.shortform) + '-' + g, CiteTB.incrementFields);
this.incrementables[g].setup = true;
}
}
if (needsetup || $.isEmptyObject(this.incrementables)) {
for (i = 0; i < autofills.length; i++) {
$(document).on('click', autofills[i], CiteTB.initAutofill);
}
}
return trs;
}
// waxay bixisaa HTML yar si foomka furan loo aqoonsado
this.getInitial = function () {
var hidden = '<input type="hidden" class="cite-template" value="' + this.templatename + '"/>';
return hidden;
}
// waxay abuurootaa foomka lagu isticmaalo sanduuqyada wada-hadalka (dialog boxes)
this.getForm = function () {
var main = $("<div class='cite-form-container' />");
var form1 = $('<table style="width:100%; background-color:transparent;" class="cite-basic-fields" />');
var i = 0;
var trs = this.makeFormInner(this.basic, true);
for (var i = 0; i < trs.length; i++) {
form1.append(trs[i]);
}
var form2 = $('<table style="width:100%; background-color:transparent; display:none" class="cite-extra-fields">');
trs = this.makeFormInner(this.extra, true);
for (var i = 0; i < trs.length; i++) {
form2.append(trs[i]);
}
main.append(form1).append(form2);
var form3 = $('<table style="width:100%; background-color:transparent;padding-top:1em" class="cite-other-fields">');
var tr = $('<tr />');
var td1 = $('<td class="cite-form-td" style="text-align:right; width:20%" />');
var label1 = $('<label />');
label1.attr('for', "cite-" + CiteTB.escStr(this.shortform) + '-name').text(mw.messages.get('cite-name-label'));
td1.append(label1);
var td2 = $('<td class="cite-form-td" style="width:30%" />');
var input1 = $('<input tabindex="1" style="width:100%" type="text" />');
input1.attr('id', 'cite-' + CiteTB.escStr(this.shortform) + '-name');
td2.append(input1);
var td3 = $('<td class="cite-form-td" style="text-align:right; padding-left:1em; width:20%">');
var label2 = $('<label />');
label2.attr('for', 'cite-' + CiteTB.escStr(this.shortform) + '-group').text(mw.messages.get('cite-group-label'));
td3.append(label2);
var td4 = $('<td class="cite-form-td" style="width:30%" />');
var input2 = $('<input tabindex="1" style="width:100%" type="text" />');
input2.attr('id', 'cite-' + CiteTB.escStr(this.shortform) + '-group');
td4.append(input2);
tr.append(td1).append(td2).append(td3).append(td4);
form3.append(tr);
main.append(form3);
var extras = $('<div />');
extras.append('<input type="hidden" class="cite-form-status" value="closed" />');
var hidden = $('<input type="hidden" class="cite-template" />');
hidden.val(this.templatename);
extras.append(hidden);
var span1 = $('<span class="cite-preview-label" style="display:none;" />');
span1.text(mw.messages.get('cite-raw-preview'));
extras.append(span1).append('<div class="cite-ref-preview" style="padding:0.5em; font-size:110%" />');
var span2 = $('<span class="cite-prev-parsed-label" style="display:none;" />');
span2.text(mw.messages.get('cite-parsed-label'));
extras.append(span2).append('<div class="cite-preview-parsed" style="padding-bottom:0.5em; font-size:110%" />');
var link = $('<a href="#" class="cite-prev-parse" style="margin:0 1em 0 1em; display:none; color:darkblue" />');
link.text(mw.messages.get('cite-form-parse'));
extras.append(link);
main.append(extras);
return main;
}
}
/* Fasalka hubinta khaladaadka
FIXME: DOKUMENTIYADA WAAYEL AH
type - nooca hubinta khaladaadka - ikhtiyaarrada hadda:
* 'refcheck' - ku dabool shaqo xigasho kasta si gaar ah
* shaqadu waa inay aqbashaa shay xigasho ah, oo soo celisa xarig (string)
* 'reflist' - ku dabool shaqo liiska xigashada oo dhan
* shaqadu waa inay aqbashaa saf (array) oo ah shayada xigashada, oo soo celisa saf xiriiro ah
* 'search' - ku dabool shaqo qoraalka bogga
* shaqadu waa inay aqbashaa qoraalka bogga oo ah xarig, oo soo celisa saf xiriiro ah
Xarigyada ay soo celiso shaqadu waa inay ahaadaan HTML sax ah
func - Shaqada lagu sharaxay kor ku xusan
testname - Magaca hubinta khaladaadka, waa inaysan ku jirin meelo bannaan (spaces)
desc - Sharaxaad kooban oo ku saabsan tijaabada
*/
window.citeErrorCheck = function (obj) {
this.obj = obj
CiteTB.ErrorChecks[this.obj.testname] = this;
this.run = function () {
var errors = [];
switch (this.obj['type']) {
case "refcheck":
CiteTB.loadRefs();
for (var i = 0; i < CiteTB.mainRefList.length; i++) {
var e = this.obj.func(CiteTB.mainRefList[i]);
if (e) {
errors.push(e);
}
}
break;
case "reflist":
CiteTB.loadRefs();
errors = this.obj.func(CiteTB.mainRefList);
break;
case "search":
var func = this.obj.func
CiteTB.getPageText(function (text) {
errors = func(text);
});
break;
}
return errors;
}
this.getRow = function () {
var row = $("<li />");
var check = $("<input type='checkbox' name='cite-err-test' />");
check.attr('value', this.obj.testname);
var label = $("<label />").html(mw.messages.get(this.obj.desc));
label.attr('for', this.obj.testname);
row.append(check).append(' – ').append(label);
return row;
}
}
$('head').trigger('reftoolbarbase');
qrkzmfao19psj4p2s9rwz6ezzcs70d2
MediaWiki:Gadget-refToolbarBase
8
53926
311128
2026-10-25T17:09:59Z
Isma4l
41797
/* */
311128
wikitext
text/x-wiki
Qaybaha qalabka xigashada ee refToolbar
mxtwebg8i26e808oqobxlkttve9uv1q
MediaWiki:Gadget-WatchlistGreenIndicatorsMono.css
8
53927
311129
2026-10-25T17:10:58Z
Isma4l
41797
Abuuray
311129
css
text/css
/* _____________________________________________________________________________
* | |
* | === WARNING: GLOBAL GADGET FILE === |
* | Changes to this page affect many users. |
* | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. |
* |_____________________________________________________________________________|
*
* Imported as of 27 may 2015 from [[User:Edokter/vector.css]], [[MediaWiki:Common.css]] and [[MediaWiki:Monobook.css]]
* Display green collapsible arrows and green bullets for changed pages in Watchlist, history and recent changes
*
* Please prefix selectors with .mw-rcfilters-disabled unless they are tested with and intended to work with the new ChangesList UI (RCFilters / WLFilters / Structured Change Filters)
*/
/* Standard watchlist, history and recent changes */
.mw-rcfilters-disabled #mw-wlheader-showupdated,
.mw-rcfilters-disabled #mw-wlheader-green {
display: inline;
}
.mw-rcfilters-disabled #mw-watchlist-resetbutton {
display: block;
}
.mw-rcfilters-disabled li.mw-changeslist-line-watched {
list-style-image: url(//upload.wikimedia.org/wikipedia/commons/f/fa/ChangedBulletMono.png);
}
/* Enhanced watchlist and recent changes */
.mw-rcfilters-disabled td.mw-enhanced-rc,
.mw-rcfilters-disabled .mw-enhanced-rc-time {
font-family: monospace, monospace;
}
.mw-rcfilters-disabled .mw-enhanced-rc-nested {
background-position: 0 1px;
}
.mw-rcfilters-disabled .mw-enhancedchanges-arrow-space {
background-position: center top;
}
.mw-rcfilters-disabled .mw-enhanced-rc-nested,
.mw-rcfilters-disabled .mw-enhancedchanges-arrow-space {
background-repeat: no-repeat;
background-image: url(//upload.wikimedia.org/wikipedia/commons/7/7a/Bullet.png);
}
.mw-rcfilters-disabled .mw-enhanced-watched .mw-enhanced-rc-nested,
.mw-rcfilters-disabled .mw-changeslist-line-watched .mw-enhancedchanges-arrow-space {
background-image: url(//upload.wikimedia.org/wikipedia/commons/f/fa/ChangedBulletMono.png);
}
.mw-rcfilters-disabled .mw-changeslist-line-not-watched .mw-collapsible-arrow.mw-collapsible-toggle-collapsed {
background-position: center top;
background-image: url(//upload.wikimedia.org/wikipedia/commons/b/bc/Vector_right_arrow_link.png);
}
.mw-rcfilters-disabled .mw-changeslist-line-not-watched .mw-collapsible-arrow.mw-collapsible-toggle-expanded {
background-position: center top;
background-image: url(//upload.wikimedia.org/wikipedia/commons/2/27/Vector_down_arrow_link.png);
}
.mw-rcfilters-disabled .mw-changeslist-line-watched .mw-collapsible-arrow.mw-collapsible-toggle-collapsed {
background-image: url(//upload.wikimedia.org/wikipedia/commons/a/af/Vector_right_arrow_changed.png);
}
.mw-rcfilters-disabled .mw-changeslist-line-watched .mw-collapsible-arrow.mw-collapsible-toggle-expanded {
background-image: url(//upload.wikimedia.org/wikipedia/commons/e/e5/Vector_down_arrow_changed.png);
}
g28rmutejabcal6bysjk1pgdbkw2vk5
MediaWiki:Gadget-WatchlistGreenIndicatorsMono
8
53928
311130
2026-10-25T17:11:52Z
Isma4l
41797
/* */
311130
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-default}}">(D)</abbr></sup> Muuji fallaadho cagaaran oo la soo laabi karo iyo xabbado cagaaran oo loogu talagalay bogagga la beddelay ee Liiskaaga daawashada, Taariikhda, iyo Isbeddellada dhow (lagama heli karo interface-ka liiska daawashada ee la hagaajiyay ee isticmaalaha)
fdsg2acb7e3zyzwxn9mxbmfdnnkgyy7
MediaWiki:Gadget-WatchlistChangesBold.css
8
53929
311131
2026-10-25T17:12:36Z
Isma4l
41797
Abuuray
311131
css
text/css
/* _____________________________________________________________________________
* | |
* | === WARNING: GLOBAL GADGET FILE === |
* | Changes to this page affect many users. |
* | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. |
* |_____________________________________________________________________________|
*
* Display pages on your watchlist that have changed since your last visit in '''bold'''.
*/
#mw-wlheader-green {
display: none;
}
#mw-wlheader-showupdated,
#mw-wlheader-bold {
display: inline;
}
#mw-watchlist-resetbutton {
display: block;
}
.mw-special-Watchlist .mw-changeslist-line-watched .mw-title {
font-weight: bold;
}
46n1bm2gwp82khc4paex86uqyeon8rt
MediaWiki:Gadget-WatchlistChangesBold
8
53930
311132
2026-10-25T17:13:27Z
Isma4l
41797
/* */
311132
wikitext
text/x-wiki
Ku soo bandhig bogagga liiskaaga daawashada ee isbeddelay tan iyo booqashadiisii ugu dambaysay farta '''geesinso leh''' (eeg [[:en:Wikipedia:Customizing watchlists|habaynta liiska daawashada]] si aad u hesho fursado dheeraad ah)
45s29goqnf378t4kexiemrmnyh54jl6
MediaWiki:Gadget-SubtleUpdatemarker.css
8
53931
311133
2026-10-25T17:14:25Z
Isma4l
41797
Abuuray
311133
css
text/css
/* Tone down 'Changed since last visit' colors */
span.updatedmarker {
background-color: transparent;
color: var(--color-content-added, #006400);
}
/*
* this was originally in the WatchlistGreenIndicators.css gadget, but it loads
* on history pages, which we'd like to avoid in that gadget which is currently
* watchlist only
*/
li.mw-history-line-updated {
list-style-image: url(//upload.wikimedia.org/wikipedia/commons/1/19/ChangedBulletVector.svg);
}
cryl0xwu6n6p959i6ams99x1hgic9nl
MediaWiki:Gadget-SubtleUpdatemarker
8
53932
311134
2026-10-25T17:15:17Z
Isma4l
41797
/* */
311134
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-default}}">(D)</abbr></sup> Astaanta cusboonaysiinta ee fudud: Hoos u dhig muujiyaha "La beddelay tan iyo booqashadii ugu dambaysay" ee bogagga taariikhda. (Sida caadiga ah wuxuu u muuqdaa baar cagaaran oo buuxa, suurtagelinta qalabkan waxay u beddelaysaa qoraal cagaaran.)
ckr6npbzxfd22davkhx3khtvsnfxu09
MediaWiki:Gadget-defaultsummaries.js
8
53933
311135
2026-10-25T17:16:20Z
Isma4l
41797
Abuuray
311135
javascript
text/javascript
/* _____________________________________________________________________________
* | |
* | === DIGRIIN: FAYLKA GADGET-KA CAALAMIGA AH === |
* | Isbeddellada faylkan waxay saameeyaan isticmaaleyaal badan. |
* | Fadlan kala hadal isbeddellada bogga wadahadalka ama [[WT:Gadget]] ka hor inta aadan wax ka beddelin.|
* |_____________________________________________________________________________|
*
* Waxaa la soo dejiyay laga bilaabo 09/06/2011 oo laga helay [[User:ErrantX/defaultsummaries.js]]
* Nooca la tafatiray ee laga soo qaatay [[User:MC10/defaultsummaries.js]]
* Waxaa la hirgeliyey sanduuqyada hoos-u-dhaca ee soo-koobidda wax-ka-beddelka caadiga ah (default edit summary dropdown boxes)
*/
/* global mw, ve */
/* eslint-disable no-jquery/no-global-selector */
( function () { // Ku duub shaqo aan la magacaabin (anonymous function)
var $summaryBox = $( '#wpSummary' ),
minorSummaries = [
'Sixitaanka higgaadda/naxwaha/calaamadaha nasashada/khaladaadka daabacaadda',
'Hagaajinta khaladaadka hab-qoraalka/qaab-dhismeedka',
'[[Help:Reverting|Dib u celinta]] [[Wikipedia:Vandalism|kharribidda]] ama wax-ka-beddelka tijaabada ah',
'[[Help:Reverting|Dib u celinta]] ka saaritaanka waxyaabaha aan la sharaxnayn',
'Tafatirka qoraalka (yar)'
],
articleSummaries = [
'Ballaarinta maqaalka',
'Ku daridda/hagaajinta tixraaca(ada)',
'Ku daridda/ka saaritaanka xiriiriyaha/yada wiki',
'Nadiifinta/tafatirka qoraalka',
'Ku daridda/ka saaritaanka qaybta/qaybaha',
'Ku daridda/ka saaritaanka xiriiriyaha/yada dibadda',
'Ka saaritaanka waxyaabaha aan lahayn tixraac'
],
nonArticleSummaries = [
'Jawaab',
'Faallo',
'Talo-bixin'
],
talkPageSummaries = [
'Calaamadaynta [[Wikipedia:WikiProject|Mashruuca Wiki]]',
'Qiimaynta [[Wikipedia:WikiProject|Mashruuca Wiki]]'
];
function addOptionsToDropdown( dropdown, optionTexts ) {
dropdown.menu.addItems( optionTexts.map( function ( optionText ) {
return new OO.ui.MenuOptionWidget( { label: optionText } );
} ) );
}
function onSummarySelect( option ) {
// Keydi qiimaha asalka ah ee goobta soo-koobidda wax-ka-beddelka
var editsummOriginalSummary = $summaryBox.val(),
canned = option.getLabel(),
newSummary = editsummOriginalSummary;
// Ku dar soo-koobidda wax-ka-beddelka ee hore oo ay ku xigto meel bannaan, haddii ay jirto,
// iyo xarafka ugu dambeeya != meel bannaan
if ( newSummary.length !== 0 && newSummary.charAt( newSummary.length - 1 ) !== ' ' ) {
newSummary += ' ';
}
newSummary += canned;
$summaryBox.val( newSummary ).trigger( 'change' );
}
function getSummaryDropdowns() {
// Si loo fududeeyo, ku dar sanduuq hoos-u-dhac ah oo wata xoogaa soo-koobid
// wax-ka-beddel ah oo diyaarsan foomka.
var namespace = mw.config.get( 'wgNamespaceNumber' ),
dropdown = new OO.ui.DropdownWidget( {
label: 'Soo-koobisyada caadiga ah ee wax-ka-beddelka – guji si aad u isticmaasho'
} ),
minorDropdown = new OO.ui.DropdownWidget( {
label: 'Soo-koobisyada caadiga ah ee wax-ka-beddelka yar – guji si aad u isticmaasho'
} );
dropdown.menu.on( 'select', onSummarySelect );
minorDropdown.menu.on( 'select', onSummarySelect );
addOptionsToDropdown( minorDropdown, minorSummaries );
if ( namespace === 0 ) {
addOptionsToDropdown( dropdown, articleSummaries );
} else {
addOptionsToDropdown( dropdown, nonArticleSummaries );
if ( namespace % 2 !== 0 && namespace !== 3 ) {
addOptionsToDropdown( dropdown, talkPageSummaries );
} else if (namespace === 118 ) {
addOptionsToDropdown( dropdown, articleSummaries );
}
}
return dropdown.$element.add( minorDropdown.$element );
}
// VisualEditor
mw.hook( 've.saveDialog.stateChanged' ).add( function () {
var target, $saveOptions, $dropdowns;
// .ve-init-mw-viewPageTarget-saveDialog-checkboxes
if ( $( 'body' ).data( 'wppresent' ) ) {
return;
}
$( 'body' ).data( 'wppresent', 'true' );
target = ve.init.target;
$saveOptions = target.saveDialog.$saveOptions;
$summaryBox = target.saveDialog.editSummaryInput.$input;
if ( !$saveOptions.length ) {
return;
}
$dropdowns = getSummaryDropdowns();
$saveOptions.before( $dropdowns );
} );
// WikiEditor
$.when( mw.loader.using( 'oojs-ui-core' ), $.ready ).then( function () {
var $dropdowns,
$editCheckboxes = $( '.editCheckboxes' );
// Haddii aan weyno fasalka editCheckboxes
if ( !$editCheckboxes.length ) {
return;
}
$dropdowns = getSummaryDropdowns();
$dropdowns.css( {
width: '48%',
'padding-bottom': '1em'
} );
$editCheckboxes.before( $dropdowns );
} );
}() );
7v4i6q59c61oby5x7vknsavzutji1wx
MediaWiki:Gadget-defaultsummaries
8
53934
311136
2026-10-25T17:17:27Z
Isma4l
41797
/* */
311136
wikitext
text/x-wiki
Ku dar laba sanduuq oo cusub oo hoos-u-dhac ah sanduuqa soo koobidda wax ka beddelka hoostiisa, kuwaas oo wata xoogaa soo koobisyo caadi ah oo waxtar leh
4i6l8m9zfzfaf41qpqgtapork98qk5a
MediaWiki:Gadget-citations.js
8
53935
311137
2026-10-25T17:18:26Z
Isma4l
41797
Abuuray
311137
javascript
text/javascript
/* _____________________________________________________________________________
* | |
* | === DIGRIIN: FAYLKA GADGET-KA CAALAMIGA AH === |
* | Isbeddellada faylkan waxay saameeyaan isticmaaleyaal badan. |
* | Fadlan kala hadal isbeddellada bogga wadahadalka ama [[WT:Gadget]] ka hor inta aadan wax ka beddelin.|
* |_____________________________________________________________________________|
*
* Waxaa laga soo dejiyay nooca 1.0 laga bilaabo 17:18, 9 Abriil 2011 (UTC) oo laga helay [[User:Smith609/citations.js]]
* Waxay ku dartaa xiriiriyaha "Citation bot" sanduuqa qalabka (toolbox), iyo badhan ka hooseeya goobaha wax-ka-beddelka, eeg [[User:Smith609/citations]]
*/
// @Version 1.0 - Waxay ku dartaa xiriiriyaha "Ballaari xigashooyinka" sanduuqa qalabka, iyo badhan ka hooseeya goobaha wax-ka-beddelka.
// @Version 1.1 - Waxay wax ka beddeshaa qalabka si uu u isticmaalo jQuery iyo gadgetapi-yada cusub ee Citation Bot ee Tool Labs
// @Version 1.2 - Isticmaal habka widget-ka oo cusub ee oojs-ui
var $spinnerspan;
var cbButton;
function addCBToToolbox() {
if ( mw.config.get( 'wgCanonicalNamespace' ) !== 'Special' ) {
var pTb = document.getElementById("p-tb");
if ( !pTb ) {
return;
}
var escPageName = encodeURIComponent( mw.config.get( 'wgPageName' ));
mw.util.addPortletLink("p-tb", "//citations.toolforge.org/process_page.php?edit=toolbar&slow=1&page="+escPageName, 'Ballaari xigashooyinka', 't-citationbot', "Ballaari xigashooyinka oo hagaaji khaladaadka qaabeynta ee caadiga ah");
}
}
// Ku dar badhanka bot-ka xigashada oo ku xiga badhanka "Muuji isbeddellada"
function addCitationButton() {
if ( document.getElementById( 'wpDiff' ) ) {
var diff = document.getElementById( 'wpDiffWidget' );
cbButton = new OO.ui.ButtonWidget();
cbButton.setElementId( 'wpCitations' )
.setIcon( 'articleCheck' )
.setLabel( 'Xigashooyinka' )
.setFlags( 'secondary' );
cbButton.on( 'click', function () {
$.ajax( {
timeout: 600000, // kun meelood oo ilbiriqsi ah, markaa waa 10 daqiiqo
type: 'POST',
url: 'https://citations.toolforge.org/gadgetapi.php',
data: {
text: $( '#wpTextbox1' ).textSelection( 'getContents' ),
summary: $( '#wpSummary' ).textSelection( 'getContents' )
},
beforeSend: function() {
$( cbButton.$element ).replaceWith( $spinnerspan );
},
success: function( data ) {
expandedText = data.expandedtext;
editSummary = data.editsummary;
$( '#loader' ).replaceWith( cbButton.$element );
if ( expandedText ) {
// Ku buuxi sanduuqa qoraalka qoraalka la ballaariyay ee la helay
$( '#wpTextbox1' ).textSelection( 'setContents', expandedText );
// Ku buuxi sanduuqa soo-koobidda wax-ka-beddelka soo-koobidda wax-ka-beddelka ee la helay
$( '#wpSummary' ).textSelection( 'setContents', editSummary );
// Guji badhanka 'Muuji hor-eegiska' (Show preview)
$( '#wpDiff' ).click();
} else {
$( '#loader' ).replaceWith( cbButton.$element );
alert( 'Khalad: Qoraalka beddelka waa madhan yahay' );
}
},
error: function( data ) {
$( '#loader' ).replaceWith( cbButton.$element );
alert( 'Khalad: Codsigii xigashooyinka wuu fashilmay' );
}
} );
} );
cbButton.$element.insertBefore( $(diff.nextSibling) );
}
}
// Ku dar badhan u oggolaanaya in lagu ballaariyo xigashooyinka qoraalka ku jira sanduuqa wax-ka-beddelka
mw.hook( 'wikipage.editform' ).add( function() {
if( !$spinnerspan ) {
$spinnerspan = $( '<span id="loader"></span>');
}
if ( document.images ) {
// Gif-ka soo dejinta marka codsiga xigashooyinka uu socdo
var spinner = new Image();
spinner.src = "//upload.wikimedia.org/wikipedia/commons/4/42/Loading.gif";
$spinnerspan.append( spinner );
}
if( $('#wpCitations').length === 0 ){
mw.loader.using( [ 'oojs-ui-core', 'oojs-ui.styles.icons-content', 'jquery.textSelection' ] ).then( addCitationButton );
}
} );
// Ku dar badhanka sanduuqa qalabka oo ka shaqaysiiya Citation Bot dib-u-eegiskii ugu dambeeyay ee la keydiyay ee bogga
if ( $.inArray( mw.config.get( 'skin' ), ['monobook', 'modern', 'vector', 'vector-2022', 'timeless'] ) !== -1 ) {
$( addCBToToolbox );
}
b43hwzcx5iv19syijnbua04j2iqhpsg
MediaWiki:Gadget-citations
8
53936
311138
2026-10-25T17:19:47Z
Isma4l
41797
/* */
311138
wikitext
text/x-wiki
[[:en:WP:Citation expander|Ballaariyaha xigashada ]]: si otomaatig ah u ballaari oo u qaabee xigashooyinka iyadoo la adeegsanayo [[:en:WP:UCB|Bot-ka Xigashada]]
b4wn900lvyis0phors5zs5tl71ly5gu
MediaWiki:Gadget-DotsSyntaxHighlighter.js
8
53937
311139
2026-10-25T17:20:28Z
Isma4l
41797
Abuuray
311139
javascript
text/javascript
mw.loader.load('//www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-DotsSyntaxHighlighter.js&action=raw&ctype=text/javascript');
9o5mgo01jz5w6gheybov4hxdvtsozbi
MediaWiki:Gadget-DotsSyntaxHighlighter
8
53938
311140
2026-10-25T17:21:42Z
Isma4l
41797
/* */
311140
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-sister}}">(S)</abbr></sup> [[mw:User:Remember the dot/Syntax highlighter|Soo-bandhige midabaysan ee naxwaha]]: Beddelka midabaynta caadiga ah ee naxwaha wiki ee sanduuqa wax-ka-beddelka (wuxuu si fiican ugu shaqeeyaa [[:en:Mozilla Firefox|Firefox]] wuxuuna ku dhowaad mar kasta ka shaqeeyaa [[:en:Google Chrome|Chrome]] iyo [[:en:Opera (web browser)|Opera]])
8yyn9m7d8s4pwz57019n5h34iw0e0nn
MediaWiki:Gadget-find-archived-section.js
8
53939
311141
2026-10-25T17:23:45Z
Isma4l
41797
Abuuray
311141
javascript
text/javascript
/** _____________________________________________________________________________
* | |
* | === DIGRIIN: FAYLKA GADGET-KA CAALAMIGA AH === |
* | Isbeddellada faylkan waxay saameeyaan isticmaaleyaal badan. |
* | Fadlan kala hadal isbeddellada bogga wadahadalka ama [[WT:Gadget]] ka hor inta aadan wax ka beddelin.|
* |_____________________________________________________________________________|
*
* Qalab loogu socdaalo qayb kaydsan ka dib marka la raaco xiriiryaheeda jabay.
*
* Qoraa: SD0001
* Dokumentiye: [[User:SD0001/find-archived-section]]
*
*/
// HAGAAN KA ANBABAX WAX-KA-BEDDELKA DUDUUMINTA/TURJUMAADA (LOCALISATION)
// Fariimaha: turjum xariggan haddii loo rarayo wiki af kale ku qoran
mw.messages.set({
"fas-finding": 'Waxay u muuqataa in wadahadalka "$1" la kaydiyay. Waxaa la raadinayaa wadahadalkii la kaydiyay...',
"fas-exact-match": 'Waxay u muuqataa in wadahadalka "$1" la kaydiyay. <b><a href="$2">Guji si aad u aragto wadahadalka la kaydiyay</a></b> <small>(<a href="$3">ama ka raadi kaydadka</a>)</small>',
"fas-inexact-match": 'Waxay u muuqataa in wadahadalka "$1" la kaydiyay. <a href="$2">Guji si aad ka raadiso kaydadka</a>.',
"fas-no-results": 'Lama helin natiijooyin raadin ah qaybta "$1" ee kaydadka. Waxaa laga yaabaa in la saaray ama magaca loo beddelay, ama inaad raacday xiriiriye si qaldan u samaysan.',
});
var config = {
// Shaqada lagu soo bandhigayo isbeddellada cawilka ah ee horgalaha.
// Halkan loo isticmaalay maadaama magacyada bogga kaydka ee loo isticmaalo looxyada ogaysiiska maamulaha enwiki ay yihiin kuwo aan caadi ahayn
prefixNormaliser: function(prefix) {
switch (prefix) {
case "Wikipedia:Administrators' noticeboard/Incidents":
return "Wikipedia:Administrators' noticeboard/IncidentArchive";
case "Wikipedia:Administrators' noticeboard/Edit warring":
return "Wikipedia:Administrators' noticeboard/3RRArchive";
case "Wikipedia:Administrators' noticeboard":
return "Wikipedia:Administrators' noticeboard/Archive";
case "Wikipedia:Reference desk/Science":
return "Wikipedia:Reference desk/Archives/Science";
case "Wikipedia:Reference desk/Miscellaneous":
return "Wikipedia:Reference desk/Archives/Miscellaneous";
case "Wikipedia:Reference desk/Mathematics":
return "Wikipedia:Reference desk/Archives/Mathematics";
case "Wikipedia:Reference desk/Language":
return "Wikipedia:Reference desk/Archives/Language";
case "Wikipedia:Reference desk/Humanities":
return "Wikipedia:Reference desk/Archives/Humanities";
case "Wikipedia:Reference desk/Entertainment":
return "Wikipedia:Reference desk/Archives/Entertainment";
case "Wikipedia:Reference desk/Computing":
return "Wikipedia:Reference desk/Archives/Computing";
case "Wikipedia:Reference desk":
return "Wikipedia:Reference desk/Archives";
case "Wikipedia:Teahouse":
return "Wikipedia:Teahouse/Questions";
default:
return prefix;
}
}
};
// JOOJI WAX-KA-BEDDELKA DUDUUMINTA/TURJUMAADA HAKAN
$(function() {
var addsection = document.getElementById('ca-addsection');
var correctNs = mw.config.get('wgNamespaceNumber') % 2 === 1 || mw.config.get('wgNamespaceNumber') === 4;
var minerva = mw.config.get('skin') === 'minerva';
// Muuji oo kaliya bogagga wadahadalka (bogagga leh badhanka "ku dar qayb")
// Muuqaalka minerva (kaas oo aan isticmaalin badhanka ku dar qayb) muuji dhammaan bogagga wadahadalka & meelaha mashruuca
if (!addsection && (!correctNs || !minerva)) {
return;
}
var sectionName = decodeURIComponent(
window.location.hash.slice(1) // si loo saaro # ugu horreeya
.replace(/_/g, ' ')
);
// Wixii ah qaanuunka ku-salaysan barroosinka (UTF-8 percent encoding laakiin % lagu beddelay bando (.) ), reyri in aad ka bixiso qaanuunaynta.
// Sabab la yaab leh darteed, MediaWiki ma qaanuunayso . lafteeda, sababtaas darteed nidaamka qaanuunaynta ma aha
// mid si sax ah loo rogi karo. Laakiin tani waxay ka shaqayn doontaa inta ugu badan ee xaaladaha.
var sectionNameDotDecoded;
try {
sectionNameDotDecoded = decodeURIComponent(sectionName.replace(/\.([0-9A-F]{2})/g, '%$1'));
} catch (e) {
// qoraal toos ah oo ".XX" ah ee magaca qaybta ma aha utf-8 dhibic-qaanuunaysan oo sax ah
sectionNameDotDecoded = sectionName;
}
if (!sectionName || // magac qayb ka ma jiro URL-ka
sectionName.indexOf('/media/') === 0 || // URL-yada ay isticmaasho MediaViewer
/^c-/.test(sectionName) || // URL-yada ay isticmaasho DiscussionTools
/^\d{12} /.test(sectionName) || // URL-yada ay isticmaasho convenientDiscussions
/^noticeApplied-/.test(sectionName) || // URL-yada ay isticmaasho RedWarn
document.getElementById(sectionName.replace(/ /g, '_')) !== null) { // qaybtu waxay ku jirtaa bogga
return;
}
var escapeQuotes = function(str) {
return str.replace(/"/g, '\\"');
};
$('#mw-content-text').before(
$('<div>')
.text(mw.msg('fas-finding', sectionName))
.addClass('archived-section-prompt')
.css({
'font-size': '90%',
'padding': '0 0 10px 20px'
})
);
var prefix = mw.config.get('wgPageName').replace(/_/g, ' ');
// Ku dabool heerkaynta looxyada ogaysiiska maamulaha
if (typeof config.prefixNormaliser === 'function') {
prefix = config.prefixNormaliser(prefix);
}
var searchQuery = sectionNameDotDecoded === sectionName ?
'"' + escapeQuotes(sectionName) + '" prefix:"' + prefix + '"' :
'"' + escapeQuotes(sectionName) + '" OR "' + escapeQuotes(sectionNameDotDecoded) + '" prefix:"' + prefix + '"';
mw.loader.using(['mediawiki.util', 'mediawiki.api']).then(function() {
return new mw.Api({
ajax: { headers: { 'Api-User-Agent': 'w:en:MediaWiki:Gadget-find-archived-section.js' } }
}).get({
action: 'query',
list: 'search',
srsearch: searchQuery,
srprop: 'sectiontitle',
srsort: 'create_timestamp_desc', // u liisgaray kaydadka ugu dambeeyay horay
srlimit: '20'
});
}).then(function(json) {
if (!json || !json.query || !json.query.search) {
return;
}
var results = json.query.search;
if (results.length === 0) {
$('.archived-section-prompt').html(mw.msg('fas-no-results', mw.html.escape(sectionName)));
} else {
var pageTitle,
sectionNameFound; // waxay noqon doontaa sectionName ama sectionNameDotDecoded
// hel habboonaanta cinwaanka qaybta ee saxda ah ee ugu horreysa (kaas oo ka dhalan doona kaydkii ugu dambeeyay)
// wareeggan (loop) wuxuu maraa hal shay oo kaliya inta ugu badan ee xaaladaha
for (var i in results) {
var result = results[i];
if (
result.sectiontitle &&
(result.sectiontitle === sectionName || result.sectiontitle === sectionNameDotDecoded)
) {
pageTitle = result.title;
sectionNameFound = result.sectiontitle;
break;
}
}
var searchLink = mw.util.getUrl('Special:Search', {
search: '~' + searchQuery, // ~ ugu horreeya wuxuu kantaroolaa raadinta xataa haddii uu jiro bog leh magac isku mid ah, eeg [[H:FORCE]]
prefix: prefix,
sort: 'create_timestamp_desc'
});
var escapedSectionName = mw.html.escape(sectionNameFound || sectionName);
if (pageTitle) { // haddii la helay qayb leh magac isku mid ah
var discussionLink = mw.util.getUrl(pageTitle) + '#' + mw.util.wikiUrlencode(sectionNameFound);
$('.archived-section-prompt').html(mw.msg('fas-exact-match', escapedSectionName, discussionLink, searchLink));
} else {
$('.archived-section-prompt').html(mw.msg('fas-inexact-match', escapedSectionName, searchLink));
}
}
}).catch(function(err) {
console.error('[find-archived-section]: ', JSON.stringify(err));
});
});
s6swb8binh7xlmmlhjze5nu39j8pgmj
MediaWiki:Gadget-find-archived-section
8
53940
311142
2026-10-25T17:24:54Z
Isma4l
41797
/* */
311142
wikitext
text/x-wiki
[[:en:User:SD0001/find-archived-section|Hel qaybta la kaydiyay]]: u socdaal si fudud qayb la kaydiyay ka dib marka aad raacdo xiriiriyaha jabay
tfpa8zvh2xy1ndaphnabogovdlnvpdt
MediaWiki:Gadget-geonotice.js
8
53941
311143
2026-10-25T17:25:46Z
Isma4l
41797
Abuuray
311143
javascript
text/javascript
/* _____________________________________________________________________________
* | |
* | === WARNING: GLOBAL GADGET FILE === |
* | Changes to this page affect many users. |
* | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. |
* |_____________________________________________________________________________|
*
* Shows notices to registered users based on their location
*/
/* global mw */
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Watchlist' ) {
mw.loader.load( 'ext.gadget.geonotice-core' );
}
nmojtoo74o0crfmk751cslvhz0edpg1
MediaWiki:Gadget-geonotice
8
53942
311144
2026-10-25T17:26:38Z
Isma4l
41797
/* */
311144
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-default}}">(D)</abbr></sup> [[:en:Wikipedia:Geonotice|Geonotice]]: ku muuji ogaysiisyada ku saabsan dhacdooyinka ka dhacaya gobolkaaga [[Special:Watchlist|liiskaaga daawashada]]
m79b5cpdseq5dstfonms5y0h596o0pz
MediaWiki:Gadget-geonotice-list.js
8
53943
311145
2026-10-25T17:27:42Z
Isma4l
41797
Abuuray
311145
javascript
text/javascript
/* _____________________________________________________________________________
* | |
* | === DIGRIIN: FAYLKA GADGET-KA CAALAMIGA AH === |
* | Isbeddellada faylkan waxay saameeyaan isticmaaleyaal badan. |
* |_____________________________________________________________________________|
*
* Waxay qeexaysaa liiska ogaysiisyada la tusayo isticmaaleyaasha diiwaangashan iyadoo lagu saleynayo goobtooda.
*
* ISTICMAAL [[Wikipedia:Geonotice/list.json]] SI AAD U HABAYSO OGAYSIISYADAADA. Isbeddellada halkaas lagu sameeyo waxaa halkan ku israacin doona
* bot shan daqiiqadood walba. Wax-ka-beddellada tooska ah ee boggan waa la baabi'in doonaa.
*
* Haddii aan la israacin isbeddelladaada, dib u eeg [[User:MusikBot II/GeonoticeSync/Report]] wixii khaladaad ah.
*/
window.GeoNotice = {};
window.GeoNotice.notices = {
"UK20261022": {
"begin": "22 October 2026 11:00 UTC",
"end": "21 November 2026 20:00 UTC",
"country": "GB",
"text": "Ma jeceshahay in aad wadahadal la yeelato Wikimedians-ka kale? Waxaa jira kulamo soo socda oo ka dhici doona <a href=\"https://meta.wikimedia.org/wiki/Meetup/Brixton/19\" class=\"extiw\" title=\"m:Meetup/Brixton/19\">Brixton, 26 Oct</a>; <a href=\"https://meta.wikimedia.org/wiki/Meetup/Brighton/9\" class=\"extiw\" title=\"m:Meetup/Brighton/9\">Brighton, 31 Oct</a>; <a href=\"https://meta.wikimedia.org/wiki/Meetup/Cardiff/WikiBirthdayWales\" class=\"extiw\" title=\"m:Meetup/Cardiff/WikiBirthdayWales\">Cardiff, 3 Nov</a>; <a href=\"https://meta.wikimedia.org/wiki/Event:Meetup/London/234\" class=\"extiw\" title=\"m:Event:Meetup/London/234\">London, 8 Nov</a>; <a href=\"https://meta.wikimedia.org/wiki/Meetup/Leeds/7\" class=\"extiw\" title=\"m:Meetup/Leeds/7\">Leeds, 21 Nov</a>!",
"comments": "8-da xaraf ee ugu dambeeya ee ID-ga waa taariikhda wax-ka-beddelkii ugu dambeeyay ee qaabka CCYYMMDD - beddel tan haddii aad samaynayso wax-ka-beddel weyn ama aad ku darayso kulan; iska daa haddii uu yahay wax-ka-beddel yar ama aad ka saarayso kulan. U deji cabbirka 'begin' taariikhda shalay - beddel oo keliya haddii ID-ga la beddelay. U deji cabbirka 'end' taariikhda kulanka ugu dambeeya ee la muujiyay. Isku day in aad ku koobto 'text' afar kulan, wax ka badan hal degmo/magaalada dhexdeeda, iyo wax ka badan afar toddobaad kahor; soo gaabi magacyada bilaha saddex xaraf haddii la muujiyo afar kulan."
},
"NYCdataday": {
"begin": "8 October 2026 00:00 UTC",
"end": "30 October 2026 00:00 UTC",
"corners": [
[
40.5,
-72.0
],
[
42.0,
-75.0
]
],
"text": "Ku biir <a href=\"/wiki/Event:Wikidata_Day_NYC_2026\" title=\"Event:Wikidata Day NYC 2026\">dabbaaldegga Maalinta Wikidata NYC iyo shir-madaxeedka yar (mini-conference)</a> saacaddu markay tahay 2-6 Galabnimo Jimce Oct 30!"
},
"HamiltonOct2026": {
"begin": "20 October 2026 00:00 UTC",
"end": "28 October 2026 12:00 UTC",
"corners": [
[
43.38,
-80.26
],
[
43.09,
-79.57
]
],
"text": "Baro sida loo wax ka beddelo Wikipedia Maktabadda Dadweynaha ee Hamilton. Macluumaad dheeraad ah waxaa laga heli karaa <a href=\"/wiki/Event:Hamilton_meetup_in_October_2026\" title=\"Event:Hamilton meetup in October 2026\">halkan</a>."
},
"BayAreaNov2026": {
"begin": "18 October 2026 00:00 UTC",
"end": "4 November 2026 08:00 UTC",
"corners": [
[
38.85,
-120.5
],
[
36.6,
-123.5
]
],
"text": "U dabbaaldeg dhalashada Wikidata <b><a href=\"/wiki/Event:Northern_California/Bay_Area/2026/Bay_Area_WikiSalon_November_2026\" title=\"Event:Northern California/Bay_Area/2026/Bay Area WikiSalon November 2026\">Bay Area WikiSalon</a></b> Arbacada November 4, 6-9 fiidnimo, The Fold, ee San Francisco. Soo jeedi hadal kooban ama ku biir aqoon-isweydaarsi. Pizza, keega iyo cabitaanno ayaa la bixin doonaa. Dhammaan saaxiibbada xogta furan waa la martiqaaday!"
},
"UKNov2026": {
"begin": "21 October 2026 00:00 UTC",
"end": "7 November 2026 12:00 UTC",
"corners": [
[
61.0,
2.0
],
[
49.8,
-11.1
]
],
"text": "<b><a href=\"/wiki/Wikipedia:GLAM/The_Gazette/Event\" title=\"Wikipedia:GLAM/The Gazette/Event\">Munaasabadda wax-ka-beddelka khadka the Gazette (<i>The Gazette</i> online editing event)</a></b> Sabtida, 7 November 2026, laga bilaabo 1–5 galabnimo. Hagaaji maqaallada ku saabsan haweenka lagu aqoonsaday Sharafyada UK iyo Commonwealth, ka saar khaladaadka ku saabsan sida loo sifeeyo abaalmarinnada shaqsiyaadka, oo baro sida <i><a href=\"/wiki/The_London_Gazette\" title=\"The London Gazette\">The Gazette</a></i> looga isticmaali karo Wikipedia. Dhammaan tifaftirayaasha waa la soo dhoweeyaa, iyadoo taageero loo fidinayo kuwa bilowga ah."
},
"LosAngelesNov2026": {
"begin": "15 October 2026 08:00 UTC",
"end": "8 November 01:00 UTC",
"corners": [
[
35.8,
-114.13
],
[
33.4,
-119.5
]
],
"text": "Haddii aad ku cusub tahay Wikipedia ama aad tahay tifaftire khibrad leh, fadlan ku biir <a href=\"https://meta.wikimedia.org/wiki/Wikimedians_of_Los_Angeles\" class=\"extiw\" title=\"meta:Wikimedians of Los Angeles\">Kooxda Isticmaaleyaasha Wikimedians ee Los Angeles (WikiLA)</a> si aad dhaqanka iyo aqoonta uga dhigto mid qof walba u bilaash ah <b><a href=\"/wiki/Wikipedia:Meetup/LA/November_2026\" title=\"Wikipedia:Meetup/LA/November 2026\">munaasabadda wax-ka-beddelka wadajirka ah (edit-a-thon)</a></b> oo ka dhacaysa Pico-Union, Los Angeles."
},
"BostonNov2026": {
"begin": "1 November 2026 10:00 UTC",
"end": "14 November 2026 10:00 UTC",
"corners": [
[
42.12,
-71.91
],
[
42.67,
-70.53
]
],
"text": "Ku biir tifaftirayaasha diidmada ah ee Wikipedia <b><a href=\"/wiki/Wikipedia:Meetup/Boston/Boston_Coffee_Chat,_Saturday_November_14\" title=\"Wikipedia:Meetup/Boston/Boston Coffee Chat, Saturday November 14\">Wada-sheekaysiga Qaxwaha ee Boston (Boston Coffee Chat)</a></b> ee ka dhacaya Davis Square, Somerville!"
},
"TorontoWikiClub202611": {
"begin": "13 October 2026 00:00 UTC",
"end": "15 November 2026 23:00 UTC",
"corners": [
[
44.1,
-80.1
],
[
43.0,
-78.7
]
],
"text": "Toronto WikiClub waxay soo qabanqaabinaysaa munaasabad kulan ah galabnimada Axadda November 15. Kaalay la kulan dad qoys ah ama fikrado wadaag ah, ku yeelo wada-sheekaysiyo wiki ah ama ka hel caawinaad wajiga-ka-wajiga ah oo ku saabsan wax-ka-beddelka mashruuc kasta oo Wikimedia ah. Fadlan iska diiwaangeli <a href=\"https://meta.wikimedia.org/wiki/Event:WikiClub_Toronto_-_November_2026\" class=\"extiw\" title=\"meta:Event:WikiClub Toronto - November 2026\">boggeenna munaasabadda</a> si aan u samayno ballan maqaaxi oo sax ah."
},
"SanDiegoNov2026": {
"begin": "7 November 08:00 UTC",
"end": "30 November 01:30 UTC",
"corners": [
[
34.0,
-116.0
],
[
32.51,
-118.12
]
],
"text": "Ku biir Wikimedians-ka kale oo aad timaado <b><a href=\"/wiki/Wikipedia:Meetup/San_Diego/November_2026\" title=\"Wikipedia:Meetup/San Diego/November 2026\">kulan caadi ah oo su'aalo-waydiin ah (pub trivia meetup)</a></b> oo ka dhacaya Midtown, San Diego."
},
"SanDiegoDec2026": {
"begin": "30 November 01:30 UTC",
"end": "12 December 23:00 UTC",
"corners": [
[
34.85,
-116.0
],
[
32.5,
-119.0
]
],
"text": "Ku biir Wikimedians-ka kale <b><a href=\"/wiki/Wikipedia:Meetup/San_Diego/December_2026\" title=\"Wikipedia:Meetup/San Diego/December 2026\">kulan wax-ka-beddel wadajir ah / salon (edit-a-thon/salon)</a></b> oo ka dhacaya Mission Valley, San Diego."
},
"SanDiegoJan2027": {
"begin": "13 December 2026 08:00 UTC",
"end": "9 January 2027 22:00 UTC",
"corners": [
[
33.65,
-114.43
],
[
32.53,
-117.6
]
],
"text": "Ku biir Wikimedians-ka kale <b><a href=\"/wiki/Wikipedia:Meetup/San_Diego/January_2027\" title=\"Wikipedia:Meetup/San Diego/January 2027\">kulan wax-ka-beddel wadajir ah / salon (edit-a-thon/salon)</a></b> oo ka dhacaya Borrego Springs, California."
}
};
mygn3b8q8ri48ce1rec1voomze8vlya
MediaWiki:Gadget-geonotice-core.js
8
53944
311146
2026-10-25T17:28:45Z
Isma4l
41797
Abuuray
311146
javascript
text/javascript
/* _____________________________________________________________________________
* | |
* | === DIGRIIN: FAYLKA GADGET-KA CAALAMIGA AH === |
* | Isbeddellada faylkan waxay saameeyaan isticmaaleyaal badan. |
* | Fadlan kala hadal isbeddellada bogga wadahadalka ama [[WT:Gadget]] ka hor inta aadan wax ka beddelin.|
* |_____________________________________________________________________________|
*
* Waxaa laga soo dejiyay 8 Ogost 2014 oo laga helay [[testwiki:MediaWiki:Gadget-geonotice-core.js]]
* Wuxuu u muujiyaa ogaysiisyada isticmaaleyaasha diiwaangashan iyadoo lagu saleynayo goobtooda
*/
/* global jQuery, mediaWiki */
( function ( mw, $ ) {
'use strict';
mw.messages.set( {
'gn-hideButton': 'Qari'
} );
/**
* Meesha magaca (Namespace) ee dhammaan hababka iyo sifooyinka Geonotice.
* @class
* @singleton
*/
var gn = {};
/**
* @param {string} str Qoraalka wiki-ga ee xiriiriyaha (Wiki-text of the link)
* @param {string} page Cinwaanka bogga la higsanyo ee xiriiriyaha
* @param {string} text Qoraalka loo isticmaalayo xiriiriyaha
*/
/* jshint unused: true */
gn.geoWikiLinker = function (str, page, text) {
text = text || page;
return mw.html.element(
'a', {
href: mw.util.getUrl( page ),
title: page
}, text
);
};
/**
* Maaree dhacdooyinka gujinta (click events).
*
* @param {jQuery.Event} e Dhacdada gujinta
*/
gn.hideGeonotice = function (e) {
e.preventDefault();
var parentId = $(e.target).closest('li').attr('id').replace( /^geonotice/, '');
var hiddenNotices = gn.getHiddenNotices();
hiddenNotices.push(parentId);
gn.saveHiddenNotices(hiddenNotices);
$( '#geonotice' + parentId ).hide();
$( '#geonotice-hr' ).hide();
return false;
};
/**
* Bulean (Boolean) muujinaya in kani yahay ogaysiiskii ugu horreeyay ee bogga lagu daro
*/
gn.firstnotice = true;
/**
* Muujinta caadiga ah (Regular expression) ee loo isticmaalo in lagu ogaado xiriiriyaha qoraalka wiki-ga
*/
gn.regexForInternalLinks = /\[\[([^{|}\[\]\n]+)(?:\|(.*?))?\]\]/g;
/**
* Furaha loo isticmaalo in lagu kaydiyo safka ogaysiisyada qarsoon ee Kaydka Webka (Web Storage)
*/
gn.storageKey = 'hidegeonotices';
/**
* Soo heli liiska ogaysiisyada qarsoon
*/
gn.getHiddenNotices = function () {
var hiddenNotices = mw.storage.get( gn.storageKey )
|| mw.storage.session.get( gn.storageKey );
try {
return JSON.parse(hiddenNotices) || [];
} catch (e) {
return [];
}
};
/**
* Keydi liiska ogaysiisyada qarsoon
*/
gn.saveHiddenNotices = function ( notices ) {
notices = JSON.stringify( notices );
mw.storage.set( gn.storageKey, notices )
|| mw.storage.session.set( gn.storageKey, notices );
};
/**
* Ka saar aqoonsiyada (ids) kaydka goobta (localstorage) ee aan hadda la isticmaalin
*/
gn.expungeOldNotices = function( currentList ) {
var savedList = gn.getHiddenNotices(),
originalLength = savedList.length;
for (var i = savedList.length - 1; i >= 0; i--) {
if( !( savedList[i] in currentList ) ) {
savedList.splice( i, 0 );
}
}
if( originalLength !== savedList.length ) {
gn.saveHiddenNotices( savedList );
}
};
/**
* Ku dar ogaysiis kor ahaan liiska daawashada
*
* @param {Object} notice Shayga đại diện ka ah ogaysiiska
*/
gn.displayGeonotice = function (notice) {
var geonoticeText = notice.text.replace( gn.regexForInternalLinks, gn.geoWikiLinker );
if (gn.firstnotice) {
gn.firstnotice = false;
$('#watchlist-message').prepend(
$( '<hr>' ).attr({ 'id' : 'geonotice-hr' })
);
}
$('#watchlist-message').prepend(
$('<li>')
.attr({
'class' : 'geonotice plainlinks',
'id' : 'geonotice' + notice.id
})
.append(
$( '<span>' )
.html( geonoticeText ),
$( '<small>' )
.append(
$('<a>')
.text( mw.msg( 'gn-hideButton' ) )
.click( gn.hideGeonotice )
.attr( { 'href' : '#' } )
)
)
).show();
};
/**
* Go'aami ogaysiisyada weli shaqaynaya oo lagu beegsanayo goobta isticmaalaha hadda
*/
gn.runGeonotice = function () {
var now = new Date(),
hide, id, notice, minlat, maxlat, minlon, maxlon,
startNotice, endNotice,
hiddenNotices = gn.getHiddenNotices();
for (id in gn.notices) {
hide = hiddenNotices.indexOf( id ) >= 0;
if (!hide) {
notice = gn.notices[id];
notice.id = id;
if (!notice || !notice.begin || !notice.end) {
continue;
}
startNotice = Date.parse(notice.begin);
endNotice = Date.parse(notice.end);
if ( now.getTime() > startNotice &&
now.getTime() < endNotice ) {
if (notice.country && Geo.country === notice.country) {
gn.displayGeonotice(notice);
} else {
if (notice.corners) {
minlat = Math.min(notice.corners[0][0], notice.corners[1][0]);
maxlat = Math.max(notice.corners[0][0], notice.corners[1][0]);
minlon = Math.min(notice.corners[0][1], notice.corners[1][1]);
maxlon = Math.max(notice.corners[0][1], notice.corners[1][1]);
// Iskudhafanaha juqraafiyeed (Geo coordinates) waxay noqon karaan xarig madhan haddii aan la aqoon. parseFloat waxay ka dhigaysaa
// kuwan NaN, si aadan u arkin ogaysiis xaaladaas oo kale ah.
if ( minlat < parseFloat( Geo.lat ) && parseFloat( Geo.lat ) < maxlat &&
minlon < parseFloat( Geo.lon ) && parseFloat( Geo.lon ) < maxlon
) {
gn.displayGeonotice(notice);
}
}
}
}
}
}
gn.expungeOldNotices( gn.notices );
};
// Ku xidh fenestrada (window)
window.GeoNotice = $.extend( gn, window.GeoNotice );
if ( window.Geo !== undefined ) {
$( gn.runGeonotice );
}
}( mediaWiki, jQuery ) );
mg7wz859izhah1p3wy5t6h78uy0hbi0
MediaWiki:Gadget-geonotice-core.css
8
53945
311147
2026-10-25T17:29:27Z
Isma4l
41797
Abuuray
311147
css
text/css
/* _____________________________________________________________________________
* | |
* | === WARNING: GLOBAL GADGET FILE === |
* | Changes to this page affect many users. |
* | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. |
* |_____________________________________________________________________________|
*/
#watchlist-message .geonotice {
width: 98%;
background: transparent;
text-align: left;
line-height: 1.8em;
}
#watchlist-message .geonotice span {
font-size: 120%;
}
#watchlist-message .geonotice small {
font-style: italic;
margin-left: .5em;
}
#watchlist-message .geonotice small a::before {
content: "[";
}
#watchlist-message .geonotice small a::after {
content: "]";
}
4l51cqhdz1drifx4md5l6b1akwg4af1
MediaWiki:Gadget-geonotice-core
8
53946
311148
2026-10-25T17:30:23Z
Isma4l
41797
/* */
311148
wikitext
text/x-wiki
Waxyaabaha dheeraadka ah ee la socda qalabka Geonotice
8du5uy48q5ahssd8r2plskncfgkwkbk
MediaWiki:Gadget-watchlist-notice.js
8
53947
311149
2026-10-25T17:31:03Z
Isma4l
41797
Abuuray
311149
javascript
text/javascript
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Watchlist' ) {
mw.loader.load( 'ext.gadget.watchlist-notice-core' );
}
0qcadfoa32w7c6pmxhzlc84tlwctq6d
MediaWiki:Gadget-watchlist-notice
8
53948
311150
2026-10-25T17:31:58Z
Isma4l
41797
Bog cusub: <sup><abbr title="{{int:gadgets-default}}">(D)</abbr></sup> Ku muuji [[:en:Wikipedia:Watchlist notices|ogaysiisyada liiska daawashada]]
311150
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-default}}">(D)</abbr></sup> Ku muuji [[:en:Wikipedia:Watchlist notices|ogaysiisyada liiska daawashada]]
8uyyvybvkelk4eq0l7gzv8t259cec4h
MediaWiki:Gadget-watchlist-notice-core.js
8
53949
311151
2026-10-25T17:33:24Z
Isma4l
41797
Abuuray
311151
javascript
text/javascript
/**
* Ku dar badhannada qarinaya/diidmada farriimaha liiska daawashada (watchlist-message), ka dibna ka dhig mid soo baxa (unhide)
* Waxay u oggolaaneysaa badhannada qarinaya ee badan [[MediaWiki:Watchlist-messages]] oo wata Aqoonsiyada buskudka (cookie IDs) ee la kordhin karo (hadda waxaa loo isticmaalaa LS).
* Xusuusin: HTML wuxuu la jaanqaadayaa noocii hore (backwards compatible), nooca cusub wuxuu iska indhatiraa naxwaha hore, marka laga reebo Aqoonsiyada la qariyay.
* @author: [[:en:User:Ruud Koot]]
* @author: [[:en:User:MZMcBride]]
*/
/*jslint white: true, regexp: true */
/*global jQuery, mediaWiki */
( function ( mw, $ ) {
'use strict';
var storageKey = 'hidewatchlistmessages';
function getDismissedNotices () {
var hiddenNotices = mw.storage.get( storageKey )
|| mw.storage.session.get( storageKey );
try {
return JSON.parse( hiddenNotices ) || [];
} catch (e) {
return [];
}
}
function saveDismissedNotices ( notices ) {
notices = JSON.stringify( notices );
mw.storage.set( storageKey, notices )
|| mw.storage.session.set( storageKey, notices );
}
// Ka saar aqoonsiyada aan la qeexin mar dambe
function expungeOldNotices ( currentList ) {
var dismissedNotices = getDismissedNotices(),
originalLength = dismissedNotices.length;
for ( var i = dismissedNotices.length - 1; i >= 0; i--) {
if( currentList.indexOf( dismissedNotices[i] ) === -1 ) {
dismissedNotices.splice( i, 1 );
}
}
if( originalLength !== dismissedNotices.length ) {
saveDismissedNotices( dismissedNotices );
}
}
function dismissWatchlistMessage( event ) {
var $message = $( this ).closest( '.watchlist-message' );
var cid = $( this ).data( 'watchlistMessage' ).cid;
var notices = getDismissedNotices();
$message.hide();
notices.push( cid );
saveDismissedNotices( notices );
event.preventDefault();
}
function addDismissButton() {
var watchItems = $( 'div.watchlist-message' );
var watchItemIds = [];
var dismissedNotices = getDismissedNotices();
var dismissedNoticesLength = dismissedNotices.length;
if ( watchItems.length === 0) {
watchItems = $( 'li.watchlist-message' );
}
if ( watchItems.length === 0) {
return;
}
for ( var i = 0; i < watchItems.length; i++ ) {
var watchlistCookieID = parseInt( watchItems[i].className.replace( /.*cookie\-ID\_(\d*).*/ig, '$1' ) );
if ( isNaN( watchlistCookieID ) ) {
continue;
}
watchItemIds.push( watchlistCookieID );
if ( dismissedNotices.indexOf( watchlistCookieID ) !== -1 ) {
watchItems[i].style.display = 'none';
continue;
}
var Button = document.createElement( 'span' );
var ButtonLink = document.createElement( 'a' );
var ButtonText = document.createTextNode( 'qari' );
ButtonLink.className = 'dismissButton';
ButtonLink.setAttribute( 'href', '#' );
ButtonLink.setAttribute( 'title', 'Qari fariintan' );
ButtonLink.appendChild( ButtonText );
$( ButtonLink ).data( 'watchlistMessage', {
index: i,
cid: watchlistCookieID
} );
$( ButtonLink ).click( dismissWatchlistMessage );
Button.appendChild( document.createTextNode(' [' ) );
Button.appendChild( ButtonLink );
Button.appendChild( document.createTextNode( ']' ) );
watchItems[i].appendChild( Button );
}
expungeOldNotices( watchItemIds );
$( '#watchlist-message' ).show();
}
$( addDismissButton );
}( mediaWiki, jQuery ) );
t0lodhwdj7860rctx72agqtul4gngwr
MediaWiki:Gadget-watchlist-notice-core
8
53950
311152
2026-10-25T17:34:37Z
Isma4l
41797
/* */
311152
wikitext
text/x-wiki
Qaybaha loogu talagalay qalabka ogaysiisyada liiska daawashada
13he7je01a5lgc7s2t495h3krvyczpo
MediaWiki:Gadget-WatchlistBase.css
8
53951
311153
2026-10-25T17:35:21Z
Isma4l
41797
Bog cusub: /* _____________________________________________________________________________ * | | * | === WARNING: GLOBAL GADGET FILE === | * | Changes to this page affect many users. | * | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. | * |__________________________________________________________________...
311153
css
text/css
/* _____________________________________________________________________________
* | |
* | === WARNING: GLOBAL GADGET FILE === |
* | Changes to this page affect many users. |
* | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. |
* |_____________________________________________________________________________|
*
* Base styling for updated markers on watchlist, history and recent/related changes
*/
#mw-wlheader-showupdated,
#mw-wlheader-bold,
#mw-wlheader-green,
#mw-watchlist-resetbutton {
display: none;
}
.mw-special-Watchlist .mw-changeslist-line-watched .mw-title,
.mw-enhanced-watched .mw-enhanced-rc-time {
font-weight: normal;
}
nqtpbejnug45n1ocjrpzsi725o1zh9i
MediaWiki:Gadget-WatchlistBase
8
53952
311154
2026-10-25T17:36:12Z
Isma4l
41797
/* */
311154
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-default}}">(D)</abbr></sup> <small>(Tani waxay soo dejineysaa [[MediaWiki:Gadget-WatchlistBase.css|qaab-dhismeedka saldhigga ah]] ee liiska daawashada. Fadlan ha damin ikhtiyaarkan.)</small>
7o463g2zim9eqp8t4ia3gvkgmsha3y3
MediaWiki:Gadget-WatchlistGreenIndicators.css
8
53953
311155
2026-10-25T17:36:52Z
Isma4l
41797
Abuuray
311155
css
text/css
/* _____________________________________________________________________________
* | |
* | === WARNING: GLOBAL GADGET FILE === |
* | Changes to this page affect many users. |
* | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. |
* |_____________________________________________________________________________|
*
* Imported as of 27 may 2015 from [[User:Edokter/vector.css]], [[MediaWiki:Common.css]] and [[MediaWiki:Vector.css]]
* Display green collapsible arrows and green bullets for changed pages in Watchlist, history and recent changes
*
* Please prefix selectors with .mw-rcfilters-disabled unless they are tested with and intended to work with the new ChangesList UI (RCFilters / WLFilters / Structured Change Filters)
*/
/* Standard watchlist, history and recent changes */
.mw-rcfilters-disabled #mw-wlheader-showupdated,
.mw-rcfilters-disabled #mw-wlheader-green {
display: inline;
}
.mw-rcfilters-disabled #mw-watchlist-resetbutton {
display: block;
}
.mw-rcfilters-disabled li.mw-changeslist-line-watched {
list-style-image: url(//upload.wikimedia.org/wikipedia/commons/1/19/ChangedBulletVector.svg);
}
/* Enhanced watchlist and recent changes */
.mw-rcfilters-disabled td.mw-enhanced-rc,
.mw-rcfilters-disabled .mw-enhanced-rc-time {
/* [[WP:MONO]] */
font-family: monospace, monospace;
}
.mw-rcfilters-disabled .mw-enhanced-rc-nested {
background-position: 0 3px;
}
.mw-rcfilters-disabled .mw-enhancedchanges-arrow-space {
background-position: center top;
}
.mw-rcfilters-disabled .mw-enhanced-rc-nested,
.mw-rcfilters-disabled .mw-enhancedchanges-arrow-space {
background-repeat: no-repeat;
background-image: url(//upload.wikimedia.org/wikipedia/commons/b/bf/Vector-bullet-icon.svg);
mask-image: none;
-webkit-mask-image: none;
background-color: transparent;
}
/* T352456 */
.mw-rcfilters-disabled .mw-enhancedchanges-arrow-space {
transform: none !important;
background-size: auto !important;
}
.mw-rcfilters-disabled .mw-enhanced-watched .mw-enhanced-rc-nested,
.mw-rcfilters-disabled .mw-changeslist-line-watched .mw-enhancedchanges-arrow-space {
background-image: url(//upload.wikimedia.org/wikipedia/commons/1/19/ChangedBulletVector.svg);
mask-image: none;
-webkit-mask-image: none;
background-color: transparent;
}
.mw-rcfilters-disabled .mw-enhancedchanges-checkbox:not( :checked ) + .mw-changeslist-line-not-watched .mw-enhancedchanges-arrow {
background-position: center top;
background-image: url(//upload.wikimedia.org/wikipedia/commons/3/39/Vector_right_arrow_link.svg);
mask-image: none;
-webkit-mask-image: none;
background-color: transparent;
}
.mw-rcfilters-disabled .mw-enhancedchanges-checkbox:checked + .mw-changeslist-line-not-watched .mw-enhancedchanges-arrow {
background-position: center top;
background-image: url(//upload.wikimedia.org/wikipedia/commons/d/db/Vector_down_arrow_link.svg);
mask-image: none;
-webkit-mask-image: none;
background-color: transparent;
}
.mw-rcfilters-disabled .mw-enhancedchanges-checkbox:not( :checked ) + .mw-changeslist-line-watched .mw-enhancedchanges-arrow {
background-image: url(//upload.wikimedia.org/wikipedia/commons/0/03/Vector_right_arrow_changed.svg);
mask-image: none;
-webkit-mask-image: none;
background-color: transparent;
}
.mw-rcfilters-disabled .mw-enhancedchanges-checkbox:checked + .mw-changeslist-line-watched .mw-enhancedchanges-arrow {
background-image: url(//upload.wikimedia.org/wikipedia/commons/1/12/Vector_down_arrow_changed.svg);
mask-image: none;
-webkit-mask-image: none;
background-color: transparent;
}
/* T352456 */
/* Workaround for MediaWiki bug applied even when the rest of the gadget is inactive */
/* Remove this after https://gerrit.wikimedia.org/r/c/mediawiki/core/+/981405 is deployed */
.mw-enhancedchanges-arrow-space {
width: 15px !important;
height: 15px !important;
}
ok01qgj93seq43tnvrwr8z5pnoldn8r
MediaWiki:Gadget-WatchlistGreenIndicators
8
53954
311156
2026-10-25T17:37:42Z
Isma4l
41797
/* */
311156
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-default}}">(D)</abbr></sup> Muuji fallaadho cagaaran oo la soo laaban karo iyo xabbado cagaaran oo loogu talagalay bogagga la beddelay ee ku jira liiskaaga daawashada, taariikhda bogga iyo wax-ka-beddelladii ugu dambeeyay (kama shaqeeyo interface-ka horumarsan ee liiska daawashada)
pd0qo0zmaz5xw46nf9snmbaliio4qzz
MediaWiki:Gadget-formWizard.js
8
53955
311157
2026-10-25T17:38:53Z
Isma4l
41797
Abuuray
311157
javascript
text/javascript
/* ______________________________________________________________________________________
* | |
* | === DIGRIIN: FAYLKA GADGET-KA === |
* | Isbeddellada faylkan waxay saameeyaan isticmaaleyaal badan. |
* | Fadlan kala hadal isbeddellada bogga wadahadalka ama [[MediaWiki_talk:Gadgets-definition]] |
* | ka hor inta aadan wax ka beddelin. |
* |_____________________________________________________________________________________|
*
* Eeg https://meta.wikimedia.org/wiki/Meta:FormWizard isticmaalka iyo sharaxaadda.
*/
/* global mw */
if ( mw.config.get('wgCanonicalNamespace') == 'Project' ) {
mw.loader.load( 'ext.gadget.formWizard-core' );
}
28wvcwq3obq5o91qatrcjhk2h0ybrtd
MediaWiki:Gadget-formWizard
8
53956
311158
2026-10-25T17:39:48Z
Isma4l
41797
/* */
311158
wikitext
text/x-wiki
<sup><abbr title="{{int:gadgets-default}}">(D)</abbr></sup> [[meta:Meta:FormWizard|FormWizard]]: [[w:wizard (software)|sixireeye]] loogu talagalay abuurista iyo ballaarinta bogagga mashruuca
1yyj977hyd3fsery6v3n3aqo4gwbne8
MediaWiki:Gadget-formWizard-core.js
8
53957
311159
2026-10-25T17:41:30Z
Isma4l
41797
Abuuray
311159
javascript
text/javascript
/* ______________________________________________________________________________________
* | |
* | === DIGRIIN: FAYLKA GADGET-KA === |
* | Isbeddellada faylkan waxay saameeyaan isticmaaleyaal badan. |
* | Fadlan kala hadal isbeddellada bogga wadahadalka ama [[MediaWiki_talk:Gadgets-definition]] |
* | ka hor inta aadan wax ka beddelin. |
* |_____________________________________________________________________________________|
*
* Eeg https://meta.wikimedia.org/wiki/Meta:FormWizard isticmaalka iyo sharaxaadda.
*/
//<nowiki>
var formsGadget = {
'createDialog' : function(){
var that = this;
var dialogDict = {
dialogClass: 'formsGadget',
autoOpen: false,
//title: that.formDict.config['dialog-title'],
width: '495px',
modal: true,
closeOnEscape: true,
resizable: false,
draggable: false,
};
var dialog = $('#formsDialogExpand');
if(dialog.length){
this.dialog = dialog.dialog(dialogDict);
}
else{
this.dialog = $('<div id="formsDialogExpand"></div>').dialog(dialogDict);
}
dialog.append('<div class="loading"></div>');
},
'dialog' : null,
'openPanel': function(){
this.dialog.dialog('open');
},
'openDialog' : function () {
if (this.dialog === null){
this.createDialog();
}
else{
this.dialog.dialog('open');
}
},
'cleanupDialog': function (){
if (this.dialog){
this.dialog.dialog('destroy');
}
this.dialog = null;
$('#formsDialogExpand').text('');
},
'utilities' : {
/*
* Jidka (Path) ee faylka habaynta (config) ee gadget-ka
*/
'configPath' : 'MediaWiki:Gadget-formWizard',
'apiUrl' : '//en.wikipedia.org/w/api.php?callback=?',
'gadgetNamespace' : function(){
var grant = mw.config.get('wgTitle').replace(/ /g,'_');
return grant;
},
/*
* Si loo ogaado luqadda caadiga ah ee isticmaalaha
*/
'userLanguage' : function(){
return mw.config.get('wgUserLanguage');
},
/*
* Si loo ogaado luqadda bogga
*/
'contentLanguage' : function(){
return mw.config.get('wgContentLanguage');
},
/*
* Waxay ka saartaa meelaha bannaan ee hore/dambe & saxiixa isticmaalaha
* (Waa lagu daray koodhka dhexdiisa)
*/
'cleanupText' : function(text){
text = $.trim(text)+' ';
var indexOf = text.indexOf('~~~~');
if ( indexOf == -1 ){
return text;
}
else{
return text.slice(0,indexOf)+text.slice(indexOf+4);
}
},
/*
* Faylasha habaynta ee lagu turjumi karo caawinta qalabka turjumaadda
* waxay soo saaraan qaab-dhismeed (dict) ay qiimayaashu leeyihiin meelo bannaan oo badan
* oo ku jira lamaanaha furaha iyo qiimaha. Shaqadani waxay nadiifisaa meelaha bannaan.
*/
'stripWhiteSpace' : function(dict){
for (key in dict){
dict[key] = typeof(dict[key]) == 'object' ? this.stripWhiteSpace(dict[key]) : $.trim(dict[key]);
}
return dict;
},
},
'formElement' : {
/*
* Curiyeyaasha la taageerayo
* Sanduuq qoraal oo yar (Small textbox)
* Sanduuq qoraal oo weyn (Large textbox)
* Liiska sanduuqyada calaamadaynta (Checkbox list)
* Liiska badhannada raadiyaha (Radio button list)
* Liiska tallaabooyinka (Stepper list)
* Sawir/Sawirro (Image/s)
* Liiska hoos-u-dhaca (Dropdown)
* Xiriiriye (Link)
* Qoraal (Text)
*/
'hiddenInfoboxFields' : [],
'found' : false,
'timestamp' : 0,
'defaultTextBoxConfig': {
'type': 'smallTextBox',
'placeholder': 'Geli qoraalka',
'title': 'Sanduuqa qoraalka',
'characterLength':100,
'mandatory':false,
'error-messageLength': 'Dhererka ugu sarreeya waa la gaaray',
'error-notFilled': 'Waa goob qasab ah',
'value': '',
'parent': '',
'id': null,
'comment': ''
},
'elementContainer' : function(){
var div = document.createElement('div');
div.className = 'elementContainer';
return div;
},
'addDescription': function(dict,div){
for (key in dict){
if(key.indexOf('text') != -1){
this.addText(div,dict[key],'text');
delete dict[key];
}
}
return div;
},
'checkTitle' : function(string,exists,titleStem,type){
var that = this;
//URL-ka API-ga
var apiUrl = formsGadget.utilities.apiUrl;
var title = titleStem + string;
var searchDict = {
'action':'query',
'format':'json',
'titles':title,
'prop':'imageinfo'
};
var timestamp = Date.now();
//console.log('String before ajax', string);
return $.getJSON(apiUrl,searchDict,function(data){
var query = data['query'];
var pages = data['query']['pages'];
var pageId = Object.keys(pages);
var pageExists = pageId != -1 ? true : false;
var imageExists = pages[pageId]['imagerepository'] ? true : false;
var value = 0;
if (type == 'image'){
value = imageExists;
}
else{
value = pageExists;
}
if(that.timestamp < timestamp){
that.timestamp = timestamp;
that.found = !(value ^ exists) ;
//console.log('String ',string, 'found ',that.found);
}
});
},
'inputList': function(type,list,title,dict,role){
var div = this.elementContainer();
div = this.addText(div,title,'title');
this.addDescription(dict,div);
for (elem in list){
var label = document.createElement('div');
var input = document.createElement('input');
var key = list[elem]['key'];
var value = list[elem]['value'];
input.type = type;
if (type == 'number'){
input.min = dict['min'];
input.max = dict['max'];
}
input.value = value;
input.setAttribute('data-add-to',dict['add-to']);
if(role){
input.setAttribute('data-role',true);
}
input.className = 'inputListItem';
input.setAttribute('data-add-to-attribute',key);
var descriptionText = key.replace(/_/g,' ');
descriptionText = descriptionText.slice(0,1).toUpperCase() + descriptionText.slice(1);
var description = document.createElement('span');
description.className = 'inputListItemDescription';
description.textContent = descriptionText;
label.appendChild(input);
label.appendChild(description);
div.appendChild(label);
}
return div;
},
'createTextBoxConfig':function(defaultConfig,actualConfig){
var config = {};
for (key in defaultConfig){
actualConfig[key] = key in actualConfig? actualConfig[key] : defaultConfig[key];
if (key == 'mandatory' && (typeof(actualConfig[key]) == 'string')){
if (actualConfig[key] == 'true'){
actualConfig[key] = true;
}
else{
actualConfig[key] = false;
}
}
}
return actualConfig;
},
'textBox': function(dict,type,callback,element){
var config = this.createTextBoxConfig(this.defaultTextBoxConfig,dict);
var className = type == 'small'? 'smallTextBox': 'largeTextBox';
var div = this.elementContainer();
div = this.addText(div,config['title'],'title');
this.addDescription(dict,div);
if (type == 'large'){
var input = document.createElement('textarea');
}
else{
var input = document.createElement('input');
}
//Nadiifinta (cleanup)
if(dict['visibility'] == 'hidden'){
div.style['display'] = 'none';
input.value = dict['value'];
}
//Nadiifinta
if('page-title' in dict){
input.setAttribute('page-title',true);
}
if (dict['id']){
input.id = dict['id'];
}
input.setAttribute('type','text');
input.setAttribute('class',className);
input.setAttribute('placeholder',config['placeholder']);
input.setAttribute('maxlength',config['characterLength']);
input.setAttribute('data-mandatory',config['mandatory']);
input.setAttribute('data-comment',config['comment']);
input.setAttribute('data-add-to',config['add-to']);
var conditionalAttr = config['add-to'] == 'infobox' ? config['infobox-param'] : config['section-header'];
input.setAttribute('data-add-to-attribute',conditionalAttr);
var that = this;
/* Xadka errayada */
$(input).on('change keyup paste',function(){
/* Hubinta in xiriiriyaha/faylka/boggu jiro */
var inputTextBox = this;
var enteredString = $(this).val();
if(!enteredString && !dict['mandatory']){
$('#formsDialogExpand [elemType="button"]').trigger('enableButtons');
$(inputTextBox).parent().removeClass('entrySatisfying entryNotSatisfying');
that.timestamp = Date.now();
that.found = true;
}
else{
if( 'validate' in dict && enteredString){
var exists = dict['validate'] == 'exists' ? 1:0;
var titleStem = 'image' in dict ? '' : that.formDict.config['page-home'];
$.when(that.checkTitle(enteredString,exists,titleStem,dict['type'])).then(function(){
//Nadiifinta & ka saarista koodhka aan loo baahnayn
$(inputTextBox).removeClass('entrySatisfying entryNotSatisfying');
$(inputTextBox).addClass(that.found ? 'entrySatisfying' : 'entryNotSatisfying');
$(inputTextBox).parent().removeClass('entrySatisfying entryNotSatisfying');
$(inputTextBox).parent().addClass(that.found ? 'entrySatisfying' : 'entryNotSatisfying');
if (that.found){
$('#formsDialogExpand [elemType="button"]').trigger('enableButtons');
if(typeof(callback) === 'function' && that.found){
//API URL
var apiUrl = formsGadget.utilities.apiUrl;
$.getJSON(apiUrl,{'action':'parse',
'format':'json',
'text':'[['+enteredString+']]'
},function(data){
//console.log(data['parse']['text']['*']);
var src = $('<div>').html(data['parse']['text']['*']).find('img').attr('src');
if(src){
callback(element, src);
}
});
}
}
else{
$('#formsDialogExpand [elemType="button"]').trigger('disableButtons');
}
});
}
}
});
//Si loo muujiyo ansaxinta (validation)
inputElementWrapper = document.createElement('span');
$(inputElementWrapper).addClass('inputElementWrapper');
if('validate' in dict){
$(inputElementWrapper).addClass('validationContainer');
}
if(dict['mandatory']){
$(inputElementWrapper).addClass('mandatoryContainer');
}
inputElementWrapper.appendChild(input);
div.appendChild(inputElementWrapper);
return div;
},
'smallTextBox': function (dict,callback,element) {
return this.textBox(dict,'small',callback,element);
},
'largeTextBox': function (dict,callback,element) {
return this.textBox(dict,'large',callback,element);
},
'checkboxList': function (dict) {
var list = dict['choiceList'];
var hidden = dict['hidden'];
if('hidden' in dict){
this.hiddenInfoboxFields = this.hiddenInfoboxFields.concat(dict['hidden']);
}
return this.inputList('checkbox',list,dict['title'],dict);
},
'addText': function(container,text,type){
var textHolder = $('<p>');
textHolder.text(text);
if (type == 'title'){
textHolder.addClass('title');
}
else if (type == 'text'){
textHolder.addClass('text');
}
else{
textHolder.addClass(type);
}
container.appendChild(textHolder[0]);
return container;
},
'text': function(dict){
var textHolder = $('<p>');
return textHolder.text(dict['string'])[0];
},
'stepperList': function (dict) {
var list = dict['choiceList'];
if('hidden' in dict){
this.hiddenInfoboxFields = this.hiddenInfoboxFields.concat(dict['hidden']);
}
dict['min'] = 0;
if(!('max' in dict)){
dict['max'] = 9;
}
return this.inputList('number',list,dict['title'],dict,true);
},
'dropdownList': function(dict){
var div = this.elementContainer();
div = this.addText(div,dict['title'],'title');
this.addDescription(dict,div);
var values = dict['values'];
var select = document.createElement('select');
select.setAttribute('class','dropdown');
select.setAttribute('data-placeholder',dict['placeholder']);
select.setAttribute('data-add-to',dict['add-to']);
select.setAttribute('data-add-to-attribute',dict['infobox-param']);
var option;
for (elem in values){
option = $('<option>').attr('value',values[elem]).text(values[elem]);
select.appendChild(option[0]);
}
div.appendChild(select);
return div;
},
'link': function(dict){
var link = document.createElement('a');
link.href = 'href' in dict? dict['href'] : '//commons.wikimedia.org/wiki/Main_Page';
link.target = '_blank';
var innerText = 'link' in dict? dict['link'] : 'Ka raadi sawir Wikimedia Commons';
$(link).text(innerText);
return link;
},
'image': function (dict) {
var url = dict['url'];
var text = dict['title'];
dict['add-to'] = 'infobox';
dict['infobox-param'] = 'image';
dict['validate'] = 'exists';
//Nadiifinta
dict['placeholder'] = 'placeholder' in dict ? dict['placeholder'] : 'File:Test.png';
var div = this.elementContainer();
this.addText(div,dict['title'],'title');
this.addDescription(dict,div);
var img = document.createElement('img');
img.src = url;
dict['title'] = 'imageTitleBox' in dict ? dict['imageTitleBox'] : 'Geli magaca faylka';
//Nadiifinta
dict['image'] = true;
var textbox = this.smallTextBox(dict,function(elem,src){
img.src = src;
},img);
div.appendChild(img);
div.appendChild(textbox);
var commonsLink = this.link(dict);
div.appendChild(commonsLink);
return div;
},
'button': function(type,text){
var a = document.createElement('input');
a.type='submit';
a.setAttribute('elemType','button');
if(type == 'cancel' || type == 'back'){
a.className = 'cdx-button cancel cdx-button--weight-quiet';
}
else {
a.className = 'cdx-button cdx-button--action-progressive';
}
a.value = text;
$(a).on('disableButtons',function(){
$(this).attr('disabled',true);
});
$(a).on('enableButtons',function(){
$(this).attr('disabled',false);
});
return a;
},
'cancelButton': function(dict){
var button = this.button('cancel',dict['title']);
button.onclick = function(){
formsGadget.dialog.dialog('close');
};
return button;
},
'doneButton': function(dict){
var that = this;
var button = this.button('done',dict['title']);
button.onclick = function(){
that.validateForm();
};
return button;
},
'nextButton': function(dict){
var button = this.button('next',dict['title']);
var that = this;
button.onclick = function(){
$('#formsDialogExpand [step]').hide();
$('#formsDialogExpand'+' #'+dict['step']).next().show();
};
return button;
},
'backButton': function(dict){
var button = this.button('back',dict['title']);
var that = this;
button.onclick = function(){
$('#formsDialogExpand [step]').hide();
$('#formsDialogExpand'+' #'+dict['step']).prev().show();
};
return button;
},
'validateForm': function(){
var counter = 0;
var firstElem;
$('#formsDialogExpand [data-mandatory="true"]').each(function(){
var elem = $(this);
if(!elem.val()){
if (counter == 0){
firstElem = elem;
}
counter++;
elem.addClass('mandatoryInput');
}
});
//Ku dar dhacdada iyo qaabaynta goobaha qasabka ah
if(firstElem){
$('#formsDialogExpand [step]').hide();
while(true){
if (firstElem.attr('step')){
firstElem.show();
break;
}
firstElem = firstElem.parent();
}
}
else{
if (formsGadget.type == 'create'){
this.createWikiPage();
}
else{
this.modifyWikiPage();
}
}
},
'infoboxString': '',
'remainingSectionString': '',
'extractInfobox' : function(markup, infoboxTemplate){
var startIndex = markup.indexOf('{{' + infoboxTemplate);
var counter = 0;
var endIndex = 0;
for (i=startIndex;i<markup.length;i++){
if(markup[i] == '}' && markup[i+1] == '}'){
counter++;
}
if(markup[i] == '{' && markup[i+1] == '{'){
counter--;
}
if(counter == 0){
var endIndex = i+2;
break;
}
}
if (counter != 0){
return '';
}
var infobox = {
'infobox' : markup.slice(startIndex,endIndex),
'before' : markup.slice(0,startIndex),
'after' : markup.slice(endIndex),
};
return infobox;
},
'infoboxObjectify': function(infoboxString){
var paramRe = /( )*\|( )*[A-Za-z0-9_]+( )*=/gi;
var units = infoboxString.split('\n');
var infobox = [];
var infoboxParams = {};
var parts,line,param,value;
for (unit in units){
line = units[unit];
if(line.search(paramRe) != -1){
parts = line.split('=');
param = $.trim(parts[0].replace('|',''));
value = $.trim(parts[1]);
//infoboxParams[param] = value;
infobox.push({'param': param, 'value': value});
}
else{
infobox.push($.trim(line));
}
}
return infobox;
},
'modifyInfoboxParam': function(infobox,param,newValue){
var flag = true;
for (elem in infobox){
if(typeof(infobox[elem]) == 'object' && infobox[elem]['param'] == param){
infobox[elem]['value'] = newValue;
flag = false;
}
}
if (flag){
infobox.splice(-1,0,{'param':param, 'value':newValue});
}
return infobox;
},
'stringifyInfobox' : function(infobox){
var infoboxString = '';
for (elem in infobox){
if (typeof(infobox[elem]) == 'object'){
if(infobox[elem]['value']){
infoboxString = infoboxString + '|' + infobox[elem]['param'] + '=' + infobox[elem]['value'] + '\n';
}
else{
infoboxString = infoboxString + '|' + infobox[elem]['param'] + '=' + '\n';
}
}
else{
infoboxString = infoboxString + infobox[elem] +'\n';
}
}
return infoboxString;
},
'createEditSummary' : function(title,subcomment){
var summary = '';
var formsConfig = formsGadget.formDict['config'];
if (formsConfig['edit-comment-prefix']){
summary = formsConfig['edit-comment-prefix'] + ' ';
}
else{
summary = formsConfig['edit-comment-default'] + ' ';
}
if(subcomment){
summary = summary + title + ' (' + subcomment + ') ';
}
else{
summary = summary + title + ' ';
}
if (formsConfig['edit-comment-suffix']){
summary = summary + formsConfig['edit-comment-suffix'];
}
return summary;
},
'modifyWikiPage' : function(){
var that = this;
var infobox = '';
var infoboxString = '';
var sections = '';
var api = new mw.Api();
var roots = this.wikiSectionTree.roots;
for (elem in roots){
//console.log('---------');
this.wikiSectionTree.traverse([roots[elem]],1,function(id){
var elem = $('#formsDialogExpand #'+id);
value = elem.val() ? elem.val() : '';
var heading = elem.attr('data-add-to-attribute');
return { 'heading': heading, 'value': value};
});
}
//Naafeynta badhannada marka la dirayo codsiga AJAX (Disabling buttons on ajax post)
$('#formsDialogExpand [elemType="button"]').trigger('disableButtons');
//Dib u habaynta qoraalka adag ee '/Toolkit'
var title = mw.config.get('wgPageName').replace('/Toolkit','');
//Helitaanka sanduuqa macluumaadka (infobox)
var gettingInfobox = api.get({
'format':'json',
'action':'query',
'prop':'revisions',
'rvprop': 'content',
'rvslots': 'main',
'rvsection':0,
'titles': title,
}).then(function(result){
var pages = result.query.pages;
var key = Object.keys(result.query.pages)[0];
var content = pages[key]['revisions'][0]['slots']['main']['*'];
var infoboxTemplate = formsGadget.formDict.config['infobox'] ? formsGadget.formDict.config['infobox'] : 'Probox/Idealab';
var elements = that.extractInfobox(content, infoboxTemplate);
var infobox = that.infoboxObjectify(elements['infobox']);
var before = elements['before'];
var after = elements['after'];
$('#formsDialogExpand [data-add-to]').each(function(index,elem){
var elem = $(elem);
if(elem.attr('data-add-to') == 'infobox' ){
if(elem.attr('type') == 'checkbox'){
if (elem.is(':checked')){
infobox = that.modifyInfoboxParam(infobox,elem.attr('data-add-to-attribute'),elem.val());
}
else{
infobox = that.modifyInfoboxParam(infobox,elem.attr('data-add-to-attribute'),null);
}
}
else if(elem.attr('data-role')){
for (var i=0;i<elem.val(); i++){
infobox = that.modifyInfoboxParam(infobox,elem.attr('data-add-to-attribute')+(i+1), null);
}
}
else{
infobox = that.modifyInfoboxParam(infobox,elem.attr('data-add-to-attribute'),elem.val());
}
}
});
/*
* Gelitaanka sanduuqa macluumaadka (infobox entries)
*/
var hiddenFields = that.hiddenInfoboxFields;
for(entry in hiddenFields){
infobox = infobox.push({'param':hiddenFields[entry]['key'],'value':hiddenFields[entry]['value']});
}
modifiedSection = before + $.trim(that.stringifyInfobox(infobox)) + after;
var formsConfig = formsGadget.formDict['config'];
api.post({
'action' : 'edit',
'title' : title,
'text' : modifiedSection,
'summary' : that.createEditSummary(title,'wax-ka-beddelidda cabbiraadaha sanduuqa macluumaadka'),
'section': 0,
'watchlist':'watch',
'token' : mw.user.tokens.get('csrfToken')
}).then(function(){
var newSections = '\n' + that.wikiSectionTree.sections;
api.post({
'action' : 'edit',
'title' : title,
'summary' : that.createEditSummary(title,'wax-ka-beddelidda qaybta'),
'appendtext':newSections,
'watchlist':'watch',
'token' : mw.user.tokens.get('csrfToken')
}).then(function(){
// Dib ugu hagidda bogga fikradda
//console.log('Successfully Added new sections & modified the infobox');
var postEditMessage = formsGadget.formDict['config']['post-edit'];
//Nadiifinta
formsGadget.dialog.dialog('close');
mw.cookie.set('formsGadgetNotify',postEditMessage);
window.location.href = location.origin + '/wiki/' + title;
});
});
});
},
'createWikiPage' : function(){
var that = this;
var infobox = '';
var page = '';
var api = new mw.Api();
var pageTitle = $('#formsDialogExpand [page-title]').val();
var roots = this.wikiSectionTree.roots;
for (elem in roots){
//console.log('---------');
this.wikiSectionTree.traverse([roots[elem]],1,function(id){
var elem = $('#formsDialogExpand #'+id);
value = elem.val() ? elem.val() : '';
var heading = elem.attr('data-add-to-attribute');
var comment = elem.attr('data-comment');
return { 'heading': heading, 'value': value, 'comment': comment };
});
}
$('#formsDialogExpand [data-add-to]').each(function(index,elem){
var elem = $(elem);
if(elem.attr('data-add-to') == 'section' ){
//var value = elem.val() ? elem.val() : '';
//var section = '==' + elem.attr('data-add-to-attribute') + '==' + '\n' + elem.val() + '\n';
//page = page + section;
}
else{
//Nadiifinta & Fududeynta
if (elem.attr('data-role')){
for (var i=0;i<elem.val(); i++){
infobox = infobox + '|'+ elem.attr('data-add-to-attribute') + (i+1) + '=\n';
}
}
else if(elem.attr('type') == 'checkbox'){
if (elem.is(':checked')){
infobox = infobox + '|'+ elem.attr('data-add-to-attribute') + '=' + elem.val() + '\n';
}
else{
infobox = infobox + '|'+ elem.attr('data-add-to-attribute') + '=\n';
}
}
//Si fiican ugu hagaaji qoraalkan adag (hardcoding)
else if(elem.attr('data-add-to-attribute') == 'image'){
var image = elem.val() ? elem.val() : elem.attr('placeholder');
infobox = infobox + '|'+ elem.attr('data-add-to-attribute') + '=' + image + '\n';
}
else{
infobox = infobox + '|'+ elem.attr('data-add-to-attribute') + '=' + elem.val() + '\n';
}
}
});
/*
* Gelitaanka sanduuqa macluumaadka (infobox entries)
*/
var hiddenFields = this.hiddenInfoboxFields;
for(entry in hiddenFields){
infobox = infobox + '|' + hiddenFields[entry]['key'] + '=' + hiddenFields[entry]['value'] + '\n';
}
//Qoraalka adag ee abuuraaha/waqtiga (creator/timestamp)
infobox = infobox + '|' + 'timestamp = ~~~~~' + '\n' ;
infobox = infobox + '|' + 'creator = ' + mw.user.getName() + '\n' ;
var probox = this.formDict.config['infobox'] ? this.formDict.config['infobox'] : 'Probox/Idealab';
infobox = '{{' + probox + '\n' + infobox + '}} \n';
page = infobox + this.wikiSectionTree.sections;
/*
* Abuurista bog cusub
*
*/
var title = formsGadget.formDict['config']['page-home'] + pageTitle;
//Naafeynta badhannada marka la dirayo codsiga AJAX
$('#formsDialogExpand [elemType="button"]').trigger('disableButtons');
api.post({
'action': 'edit',
//Nadiifinta
'title': title,
'summary': that.createEditSummary(title),
'text': page,
'watchlist':'watch',
token: mw.user.tokens.get('csrfToken')
}).then(function () {
//Abuurista Qalabka Fikradda (Idea Toolkit)
var formsConfig = formsGadget.formDict['config'];
var toolkit = formsConfig['toolkit-name'];
var toolkitContent = '{{' + formsConfig['toolkit-template'] + '}}';
var createToolkit = true;
if (toolkit && toolkitContent){
var toolkitTitle = title + '/' + toolkit;
var summary = 'Ku daridda qalabka (toolkit) ee ' + title;
createToolkit = api.post({
'action': 'edit',
//Nadiifinta
'title': toolkitTitle,
'summary': summary,
'text': toolkitContent,
'watchlist':'watch',
token: mw.user.tokens.get('csrfToken')
});
}
// Dib ugu hagidda bogga fikradda
//console.log('Successfully created new page');
$.when(createToolkit).then(function(){
formsGadget.dialog.dialog('close');
var postEditMessage = formsGadget.formDict['config']['post-edit'];
mw.cookie.set('formsGadgetNotify',postEditMessage);
window.location.href = location.origin + '/wiki/' + title;
},function(){
$('#formsDialogExpand [elemType="button"]').trigger('enableButtons');
});
},function(){
$('#formsDialogExpand [elemType="button"]').trigger('enableButtons');
});
//console.log(title,page);
}
},
'createForm' : function(formDict){
//Nadiifinta hagaajinta xarumaha dambe (fallbacks)
if( !formDict.config['page-home'].match(/\/$/) ){
formDict.config['page-home'] = formDict.config['page-home'] + '/';
}
this.formDict = formDict;
this.formElement.formDict = formDict;
this.formElement.wikiSectionTree = this.wikiSectionTree;
var dialogInternal = document.createElement('div');
//Isticmaalahu ma soo gelin (not logged in)
if (! mw.user.getName()){
var errorMessage = formDict['config']['error-not-logged-in'];
var errorDiv = document.createElement('div');
this.formElement.addText(errorDiv,errorMessage,'error');
dialogInternal.appendChild(errorDiv);
}
var counter = 0;
for (step in formDict){
if (step != 'config'){
counter++;
var stepDict = formDict[step];
var panel = document.createElement('div');
panel.id = step;
if(counter != 1){
panel.style['display'] = 'none';
}
panel.setAttribute('step',step);
for (elem in stepDict){
elemDict = stepDict[elem];
elemDict['elem'] = elem;
elemDict['step'] = step;
elemDict['id'] = elem;
panel.appendChild(this.formElement[elemDict.type](elemDict));
//Abuurista qaab-dhismeedka heerarka ee qaybaha iyo qaybaha hoose (hierarchical structure)
if (elemDict['add-to'] == 'section' ){
var parent = 'parent' in elemDict ? elemDict['parent'] : null;
var node = elem;
if(parent){
this.wikiSectionTree.addLink(parent,node);
}
else{
this.wikiSectionTree.addLink(node);
}
}
}
dialogInternal.appendChild(panel);
}
}
$('#formsDialogExpand').append(dialogInternal);
$('.formsGadget .dropdown').chosen({
disable_search: true,
width: '50%',
});
return true;
},
'Tree' : function(){
var rootList = {};
var nodeList = {};
this.sections = '';
this.roots = rootList;
var Node = function(parent,child,id){
this.parent = parent;
this.id = id;
this.child = child;
};
var getNode = function(id){
if (id in nodeList){
return nodeList[id];
}
else{
var node = new Node(null,null,id);
nodeList[id] = node;
rootList[id] = node;
return node;
}
};
this.addLink = function(startId,endId){
if (endId){
var startNode = getNode(startId);
var endNode = getNode(endId);
endNode.parent = startNode;
if (startNode.child){
startNode.child.push(endNode);
}
else{
startNode.child = [endNode];
}
delete rootList[endNode.id];
}
else{
getNode(startId);
}
};
var sectionLevel = function(indent){
var string = '';
for (var i=0;i<indent;i++){
string = string + '=';
}
return string;
};
this.traverse = function(rootList,level,callback){
if(!rootList){
return;
}
level++;
var wikiSectionHeaderMarkup = sectionLevel(level);
for (elem in rootList){
var root = rootList[elem];
var sectionValues = callback(root.id);
var section = wikiSectionHeaderMarkup + sectionValues['heading'] + wikiSectionHeaderMarkup + '\n' ;
var section = section + ( sectionValues['comment'] ? sectionValues['comment'] + '\n' : '' ) + sectionValues['value'] + '\n';
this.sections = this.sections + section;
root = root.child;
this.traverse(root,level,callback);
}
};
}
};
$(function() {
(function(){
var api = new mw.Api();
var utility = formsGadget.utilities;
//Soo celinta faallooyinka ka dambeeya wax-ka-beddelka haddii ay jiraan
var postEditMessage = mw.cookie.get('formsGadgetNotify');
if (postEditMessage){
//Nadiifinta buskudka (cookie)
mw.cookie.set('formsGadgetNotify', null);
//Muujinta fariinta ka dambeysa wax-ka-beddelka
mw.notify(postEditMessage,{autoHide:false});
}
$('.wp-formsGadget').click(function(e){
e.preventDefault();
formsGadgetNamespace = utility.gadgetNamespace();
formsGadgetType = $(this).attr('data-type') || 'Idea';
formsGadgetMode = $(this).attr('data-mode') || 'create';
formsGadget.cleanupDialog();
formsGadget.openDialog();
formsGadget.openPanel();
$('#formsDialogExpand .loading').show();
var configFullPath = utility.configPath+'/'+formsGadgetNamespace+'/'+formsGadgetType;
var configUrl = '//en.wikipedia.org/w/index.php?title='+encodeURIComponent(configFullPath)+'&action=raw&ctype=text/javascript';
var api = new mw.Api();
var promise = api.get({
'format':'json',
'formatversion': 2,
'action':'query',
'prop':'revisions',
'rvprop': 'contentmodel',
'rvsection':0,
'titles': configFullPath,
});
//Hel habaynta luqadda kore
$.when(jQuery.getScript(configUrl), promise).then(function(text, result){
if ( result[0].query.pages[0].revisions[0].contentmodel == 'javascript' ) {
var config = utility.stripWhiteSpace(formsGadgetConfig[formsGadgetMode]);
formsGadget['formDict'] = config;
//Nadiifinta
$('.formsGadget .ui-dialog-title').text(config.config['dialog-title']);
formsGadget['wikiSectionTree'] = new formsGadget.Tree();
formsGadget.openDialog();
formsGadget.createForm(config);
formsGadget.type = formsGadgetMode;
formsGadget.openDialog();
$('#formsDialogExpand .loading').hide();
}
});
});
})();
});
// </nowiki>
kspksipejgfojf2atml5jrz75jygdwc
MediaWiki:Gadget-formWizard.css
8
53958
311160
2026-10-25T17:42:07Z
Isma4l
41797
Abuuray
311160
css
text/css
/* _____________________________________________________________________________
* | |
* | === WARNING: GADGET FILE === |
* | Changes to this page affect many users. |
* | Please discuss changes on the talk page or on [[MediaWiki_talk:Gadgets-definition]] before editing. |
* |_____________________________________________________________________________|
*
* "Forms" feature, to be used by the Wikimedia Foundation's Grants Programme,
*/
/*
.formsGadget * {
box-sizing: border-box;
}
*/
.formsGadget .ui-state-hover{
background: transparent;
border-color: #a1a1a1;
}
.formsGadget.ui-dialog .ui-icon-closethick{
background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjQsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMTEuMzEzcHgiIGhlaWdodD0iMTEuMzEzcHgiIHZpZXdCb3g9IjAgMCAxMS4zMTMgMTEuMzEzIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMS4zMTMgMTEuMzEzIiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwb2x5Z29uIGZpbGw9IiNCMEIxQjEiIHBvaW50cz0iMTEuMzEzLDIuMTIxIDkuMTkyLDAgNS42NTcsMy41MzUgMi4xMjIsMCAwLDIuMTIxIDMuNTM2LDUuNjU2IDAuMDAxLDkuMTkxIDIuMTIyLDExLjMxMyANCgk1LjY1Nyw3Ljc3NyA5LjE5MiwxMS4zMTIgMTEuMzEzLDkuMTkxIDcuNzc4LDUuNjU2ICIvPg0KPC9zdmc+DQo=) no-repeat 50% 50% !important;
}
.formsGadget .ui-widget-content{
background: #EEE;
}
.formsGadget.ui-dialog .ui-widget-header{
border: none;
background: #EEE !important;
padding-left: 11px !important;
margin-top: 25px;
}
.formsGadget.ui-widget-content{
background: #EEE;
padding: 10px 18px;
color: #444;
border: 1px solid #ddd;
border-bottom: 3px solid #D0D0D0;
border-radius: 1px;
}
.formsGadget .gadgetControls{
text-align: right;
margin: 10px 0px;
}
/*Check*/
.formsGadget .messageDescription{
margin: 10px 0px;
}
.formsGadget textarea,
.formsGadget input[type=text],
.formsGadget input[type=number]{
outline: 0px;
padding: 14px 7px;
resize: none;
background-color: white;
border: 1px solid #DDD;
border-radius: 1px;
margin-bottom: 1em;
}
.formsGadget textarea:focus,
.formsGadget input[type=text]:focus{
box-shadow: inset .45em 0 0 #5088f7;
}
div.grantsHide{
display: none;
}
.formsGadget textarea::-webkit-input-placeholder,
.formsGadget textarea::-moz-placeholder, /* Firefox 19+ */
.formsGadget textarea:-ms-input-placeholder,
.formsGadget input::-webkit-input-placeholder,
.formsGadget input::-moz-placeholder, /* Firefox 19+ */
.formsGadget input:-ms-input-placeholder {
font-style: italic;
}
.formsGadget input.entryNotSatisfying:focus{
box-shadow: inset .45em 0 0 #D11D13;
}
.formsGadget input.entrySatisfying:focus{
box-shadow: inset .45em 0 0 #5088f7;
}
.formsGadget .title{
font-weight: bold;
}
.formsGadget .text{
line-height: 15px;
margin: 6px 0px;
}
.formsGadget .elementContainer{
padding: 7px 0px;
}
.formsGadget .inputListItem{
width: 50px;
margin-right: 30px;
}
.formsGadget input[type=text],
.formsGadget input[type=number]{
padding: 7px;
}
.formsGadget input[type=number]{
text-align: center;
}
.formsGadget .inputListItemDescription{
/* width: 120px; */
display: inline-block;
}
.formsGadget .ui-widget-content a{
color: #0b0080;
}
.formsGadget .ui-widget-content a span{
color: #444444;
}
.formsGadget .validationContainer.entrySatisfying:after{
content: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAICAYAAAAvOAWIAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAAd0SU1FB94HFgU5GtaftYcAAACqSURBVBjTfZA7SkMBFAXPi5UfcAHBwl6wt7HOfnQZgr0bSGdt6x7ERlDEyiIgCPLAM2NhIhE/U94Lc5k75A/UDMMQYDvJRZK3/Ie62XbeVuAm6q56BAT4srbdaXsFCNwC0wAPwKt6vGbcAuZ+8qQerBYny+ELMEsS4BJQfQb2V9eibgBnwLu6UK/b2vax7Z76PWQcxwlwvrQJ3KuHP4rXoibqKXAHTH/7zge2aLmJza+PXAAAAABJRU5ErkJggg==);
padding: 7px 8px 7px 8px;
background-color: #347BFF;
border: 1px solid #DDD;
border-width: 1px 1px 1px 0;
}
.formsGadget .validationContainer.entryNotSatisfying:after{
content: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAAd0SU1FB94HFgU0Ikszc1QAAADOSURBVBjTbZAhTkNBFEXvT7+gCRLDLkgTUtUF1NSxnErkl4gmX4DuQuoKC/iWYKqqyzmYGZgAN3kZc/LmnRv1BhjULdDnV4CV+qIuow6qgMAIXFVQ3QDvgOoUYFth9aLuysa1+mEJcIjaq2MBa/bqVBYIHNW7etdc3TU/tHlV7/OPzL6lgJO6+AOqa3VqwDpP6rwFN62MemrOuZSW+pm6SvKc5FZNkrckD13XfSZZJJmV9zql8JpjlSnSYyN9DrAEJuDwXc+PcK8OwBl4/AKbp0zxmA5MdAAAAABJRU5ErkJggg==);
padding: 7px 8px 7px 8px;
background-color: #D11D13;
border: 1px solid #DDD;
border-width: 1px 1px 1px 0;
}
.formsGadget .inputElementWrapper{
position: relative;
}
.formsGadget .mandatoryContainer:before{
position: absolute;
left: -6px;
content: "*";
color: #D11D13;
}
.formsGadget img{
height: 100px;
}
.formsGadget input[type=text]{
margin: 0 0 10px 0;
width: 90%;
}
.formsGadget input[type=submit]{
margin-right: .5em;
float: right;
}
/* Dropdown styling */
.formsGadget .chzn-container-single .chzn-single{
background-image: none;
border-radius: 1px;
box-shadow: none;
border: 1px solid #ddd;
padding: .25em;
padding-left: 14px;
}
.formsGadget .chzn-container .chzn-results li {
padding-left: 10px;
}
.formsGadget .chzn-container-active.chzn-with-drop .chzn-single{
/*Get a better color*/
background: #F6F3F3;
border: 1px solid #aaa;
padding: .25em;
padding-left: 14px;
}
.formsGadget .chzn-container .chzn-results .highlighted{
background-image: none;
background-color: #347bff;
}
.formsGadget .chzn-container-single .chzn-single div b{
background-position: 0px 5px;
}
.formsGadget .chzn-container-active.chzn-with-drop .chzn-single div b{
background-position: -18px 5px;
}
/* Dialog Loading*/
.formsGadget .loading{
background: url(data:image/gif;base64,R0lGODlhgAAPAPEAAP///6fX+eXy/KfX+SH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAgAAPAAACo5QvoIC33NKKUtF3Z8RbN/55CEiNonMaJGp1bfiaMQvBtXzTpZuradUDZmY+opA3DK6KwaQTCbU9pVHc1LrDUrfarq765Ya9u+VRzLyO12lwG10yy39zY11Jz9t/6jf5/HfXB8hGWKaHt6eYyDgo6BaH6CgJ+QhnmWWoiVnI6ddJmbkZGkgKujhplNpYafr5OooqGst66Uq7OpjbKmvbW/p7UAAAIfkECQoAAAAsAAAAAIAADwAAArCcP6Ag7bLYa3HSZSG2le/Zgd8TkqODHKWzXkrWaq83i7V5s6cr2f2TMsSGO9lPl+PBisSkcekMJphUZ/OopGGfWug2Jr16x92yj3w247bh6teNXseRbyvc0rbr6/x5Ng0op4YSJDb4JxhI58eliEiYYujYmFi5eEh5OZnXhylp+RiaKQpWeDf5qQk6yprawMno2nq6KlsaSauqS5rLu8cI69k7+ytcvGl6XDtsyzxcAAAh+QQJCgAAACwAAAAAgAAPAAACvpw/oIC3IKIUb8pq6cpacWyBk3htGRk1xqMmZviOcemdc4R2kF3DvfyTtFiqnPGm+yCPQdzy2RQMF9Moc+fDArU0rtMK9SYzVUYxrASrxdc0G00+K8ruOu+9tmf1W06ZfsfXJfiFZ0g4ZvEndxjouPfYFzk4mcIICJkpqUnJWYiYs9jQVpm4edqJ+lkqikDqaZoquwr7OtHqAFerqxpL2xt6yQjKO+t7bGuMu1L8a5zsHI2MtOySVwo9fb0bVQAAIfkECQoAAAAsAAAAAIAADwAAAsucP6CAt9zSErSKZyvOd/KdgZaoeaFpRZKiPi1aKlwnfzBF4jcNzDk/e7EiLuLuhzwqayfmaNnjCCGNYhXqw9qcsWjT++TqxIKp2UhOprXf7PoNrpyvQ3p8fAdu82o+O5w3h2A1+Nfl5geHuLgXhEZVWBeZSMnY1oh5qZnyKOhgiGcJKHqYOSrVmWpHGmpauvl6CkvhaUD4qejaOqvH2+doV7tSqdsrexybvMsZrDrJaqwcvSz9i9qM/Vxs7Qs6/S18a+vNjUx9/v1TAAAh+QQJCgAAACwAAAAAgAAPAAAC0Zw/oIC33NKKUomLxct4c718oPV5nJmhGPWwU9TCYTmfdXp3+aXy+wgQuRRDSCN2/PWAoqVTCSVxilQZ0RqkSXFbXdf3ZWqztnA1eUUbEc9wm8yFe+VguniKPbNf6mbU/ubn9ieUZ6hWJAhIOKbo2Pih58C3l1a5OJiJuflYZidpgHSZCOnZGXc6l3oBWrE2aQnLWYpKq2pbV4h4OIq1eldrigt8i7d73Ns3HLjMKGycHC1L+hxsXXydO9wqOu3brPnLXL3C640sK+6cTaxNflEAACH5BAkKAAAALAAAAACAAA8AAALVnD+ggLfc0opS0SeyFnjn7oGbqJHf4mXXFD2r1bKNyaEpjduhPvLaC5nJEK4YTKhI1ZI334m5g/akJacAiDUGiUOHNUd9ApTgcTN81WaRW++Riy6Tv/S4dQ1vG4ps4NwOaBYlOEVYhYbnplexyJf3ZygGOXkWuWSZuNel+aboV0k5GFo4+qN22of6CMoq2kr6apo6m5fJWCoZm+vKu2Hr6KmqiHtJLKebRhuszNlYZ3ncewh9J9z8u3mLHA0rvetrzYjd2Wz8bB6oNO5MLq6FTp2+bVUAACH5BAkKAAAALAAAAACAAA8AAALanD+ggLfc0opS0XeX2Fy8zn2gp40ieHaZFWHt9LKNO5eo3aUhvisj6RutIDUZgnaEFYnJ4M2Z4210UykQ8BtqY0yHstk1UK+/sdk63i7VYLYX2sOa0HR41S5wi7/vcMWP1FdWJ/dUGIWXxqX3xxi4l0g4GEl5yOHIBwmY2cg1aXkHSjZXmbV4uoba5kkqelbaapo6u0rbN/SZG7trKFv7e6savKTby4voaoVpNAysiXscV4w8fSn8fN1pq1kd2j1qDLK8yYy9/ff9mgwrnv2o7QwvGO1ND049UgAAIfkECQoAAAAsAAAAAIAADwAAAticP6CAt9zSilLRd2d8onvBfV0okp/pZdamNRi7ui3yyoo4Ljio42h+w6kgNiJt5kAaasdYE7D78YKlXpX6GWphxqTT210qK1Cf9XT2SKXbYvv5Bg+jaWD5ekdjU9y4+PsXRuZHRrdnZ5inVidAyCTXF+nGlVhpdjil2OE49hjICVh4qZlpibcDKug5KAlHOWqqR8rWCjl564oLFruIucaYGlz7+XoKe2wsIqxLzMxaxIuILIs6/JyLbZsdGF063Uu6vH2tXc79LZ1MLWS96t4JH/rryzhPWgAAIfkECQoAAAAsAAAAAIAADwAAAtWcP6CAt9zSilLRd2fEe4kPCk8IjqTonZnVsQ33arGLwLV8Kyeqnyb5C60gM2LO6MAlaUukwdbcBUspYFXYcla00KfSywRzv1vpldqzprHFoTv7bsOz5jUaUMer5vL+Mf7Hd5RH6HP2AdiUKLa41Tj1Acmjp0bJFuinKKiZyUhnaBd5OLnzSNbluOnZWQZqeVdIYhqWyop6ezoquTs6O0aLC5wrHErqGnvJibms3LzKLIYMe7xnO/yL7TskLVosqa1aCy3u3FrJbSwbHpy9fr1NfR4fUgAAIfkECQoAAAAsAAAAAIAADwAAAsqcP6CAt9zSilLRd2fEW7cnhKIAjmFpZla3fh7CuS38OrUR04p5Ljzp46kgMqLOaJslkbhbhfkc/lAjqmiIZUFzy2zRe5wGTdYQuKs9N5XrrZPbFu94ZYE6ms5/9cd7/T824vdGyIa3h9inJQfA+DNoCHeomIhWGUcXKFIH6RZZ6Bna6Zg5l8JnSamayto2WtoI+4jqSjvZelt7+URKpmlmKykM2vnqa1r1axdMzPz5LLooO326Owxd7Bzam4x8pZ1t3Szu3VMOdF4AACH5BAkKAAAALAAAAACAAA8AAAK/nD+ggLfc0opS0XdnxFs3/i3CSApPSWZWt4YtAsKe/DqzXRsxDqDj6VNBXENakSdMso66WzNX6fmAKCXRasQil9onM+oziYLc8tWcRW/PbGOYWupG5Tsv3TlXe9/jqj7ftpYWaPdXBzbVF2eId+jYCAn1KKlIApfCSKn5NckZ6bnJpxB2t1kKinoqJCrlRwg4GCs4W/jayUqamaqryruES2b72StsqgvsKlurDEvbvOx8mzgazNxJbD18PN1aUgAAIfkECQoAAAAsAAAAAIAADwAAArKcP6CAt9zSilLRd2fEWzf+ecgjlKaQWZ0asqPowAb4urE9yxXUAqeZ4tWEN2IOtwsqV8YkM/grLXvTYbV4PTZpWGYU9QxTxVZyd4wu975ZZ/qsjsPn2jYpatdx62b+2y8HWMTW5xZoSIcouKjYePeTh7TnqFcpabmFSfhHeemZ+RkJOrp5OHmKKapa+Hiyyokaypo6q1CaGDv6akoLu3DLmLuL28v7CdypW6vsK9vsE1UAACH5BAkKAAAALAAAAACAAA8AAAKjnD+ggLfc0opS0XdnxFs3/nkISI2icxokanVt+JoxC8G1fNOlm6tp1QNmZj6ikDcMrorBpBMJtT2lUdzUusNSt9qurvrlhr275VHMvI7XaXAbXTLLf3NjXUnP23/qN/n8d9cHyEZYpoe3p5jIOCjoFofoKAn5CGeZZaiJWcjp10mZuRkaSAq6OGmU2lhp+vk6iioay3rpSrs6mNsqa9tb+ntQAAA7AAAAAAAAAAAA);
width: 128px;
height: 15px;
margin: auto;
}
b6kf9r994eyhugef784hbbl1cp8a37p
MediaWiki:Gadget-formWizard-core
8
53959
311161
2026-10-25T17:43:04Z
Isma4l
41797
/* */
311161
wikitext
text/x-wiki
Qaybaha loogu talagalay [[:meta:Meta:FormWizard|FormWizard]]
jw7ijk8chculv899qqqx96goatjvdde
MediaWiki:Gadget-Prosesize.js
8
53960
311162
2026-10-25T17:44:03Z
Isma4l
41797
Abuuray
311162
javascript
text/javascript
/* _____________________________________________________________________________
* | |
* | === WARNING: GLOBAL GADGET FILE === |
* | Changes to this page affect many users. |
* | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. |
* |_____________________________________________________________________________|
*
*/
/**
* Prosesize
* Documentation at en.wikipedia.org/wiki/Wikipedia:Prosesize
* Rewrite of [[User:Dr_pda/prosesize.js]].
*/
'use strict';
( function () {
function sizeFormatter( size ) {
var nbsp = "\xA0"; // Equivalent to
if ( size > 10240 ) {
return ( Math.round( size / 1024 ) + nbsp + 'kB' );
} else {
return ( size + nbsp + 'B' );
}
}
function sizeElement( id, text, size, extraText ) {
return $( '<li>' )
.prop( 'id', id )
.append(
$( '<b>' ).text( text ),
document.createTextNode( ' ' + sizeFormatter( size ) + ( extraText || '' ) )
);
}
function getRevisionSize( proseValue ) {
var Api = new mw.Api();
function appendResult( size ) {
var wikiValue = sizeElement( 'wiki-size', 'Wiki text:', size );
proseValue.before( wikiValue );
}
if ( mw.config.get( 'wgAction' ) === 'submit' ) {
// Get size of text in edit box
// eslint-disable-next-line no-jquery/no-global-selector
appendResult( $( '#wpTextbox1' ).textSelection( 'getContents' ).length );
} else if ( mw.config.get( 'wgIsArticle' ) ) {
// Get revision size from API
Api.get( {
action: 'query',
prop: 'revisions',
rvprop: 'size',
revids: mw.config.get( 'wgRevisionId' ),
formatversion: 2
} ).then( function ( result ) {
appendResult( result.query.pages[ 0 ].revisions[ 0 ].size );
} );
}
}
function getFileSize( proseHtmlValue ) {
// HTML document size not well defined for preview mode or section edit
if ( mw.config.get( 'wgAction' ) !== 'submit' ) {
$.get( location ).then( function ( result ) {
var fsize = sizeElement( 'total-size', 'HTML document size:', result.length );
proseHtmlValue.before( fsize );
} );
}
}
function getLength( id ) {
var i;
var textLength = 0;
for ( i = 0; i < id.childNodes.length; i++ ) {
if ( id.childNodes[ i ].nodeType === Node.TEXT_NODE ) {
textLength += id.childNodes[ i ].nodeValue.length;
} else if ( [ 'STYLE', 'svg' ].includes( id.childNodes[ i ].tagName ) ) {
// Exclude style tags and charts (SVGs)
continue;
} else if (
id.childNodes[ i ].nodeType === Node.ELEMENT_NODE &&
( id.childNodes[ i ].id === 'coordinates' || id.childNodes[ i ].className.indexOf( 'emplate' ) !== -1 )
) {
// <nowiki> special case for {{coord}} and {{fact}}-like templates </nowiki>
// Exclude from length, and don't set background yellow
id.childNodes[ i ].className += ' prosesize-special-template';
} else {
textLength += getLength( id.childNodes[ i ] );
}
}
return textLength;
}
function getRefMarkLength( id, html ) {
var i;
var textLength = 0;
for ( i = 0; i < id.childNodes.length; i++ ) {
if (
id.childNodes[ i ].nodeType === Node.ELEMENT_NODE &&
id.childNodes[ i ].className === 'reference'
) {
textLength += ( html ) ?
id.childNodes[ i ].innerHTML.length :
getLength( id.childNodes[ i ] );
}
}
return textLength;
}
function main() {
var prosePromise, proseValue, refValue, refHtmlValue, proseHtmlValue;
// eslint-disable-next-line no-jquery/no-global-selector
var parserOutput = $( '#mw-content-text .mw-parser-output' );
// eslint-disable-next-line no-jquery/no-global-selector
var prevStats = $( '#document-size-stats' );
// eslint-disable-next-line no-jquery/no-global-selector
var prevHeader = $( '#document-size-header' );
var proseSize = 0;
var proseSizeHtml = 0;
var refmarksize = 0;
var refmarkSizeHtml = 0;
var wordCount = 0;
var refSize = 0;
var refSizeHtml = 0;
var header = $( '<span>' )
.prop( 'id', 'document-size-header' )
.html( 'Document statistics <small>(<a href="//en.wikipedia.org/wiki/Wikipedia:Prosesize">more information</a>)</small>:' );
var output = $( '<ul>' )
.prop( 'id', 'document-size-stats' );
var combined = $( '<div>' )
.prop( 'id', 'document-size' )
.append( header, output );
if ( parserOutput.length === 0 ) {
return;
}
if ( prevStats.length ) {
// If statistics already exist, turn them off and remove highlighting
prevStats.remove();
prevHeader.remove();
parserOutput.find( '> p, > section p' ).removeClass( 'prosesize-highlight' );
} else {
// Use prosesize API to get a more accurate prose size account
// The calculations below are left in for the highlighting
prosePromise = $.getJSON( 'https://prosesize.toolforge.org/api/' + mw.config.get( 'wgServerName' ) + '/'
+ encodeURIComponent( mw.config.get( 'wgPageName' ) ) + '?revision=' + mw.config.get( 'wgRevisionId' ) );
// Calculate prose size and size of reference markers ([1] etc)
// Prose in legacy parser: .mw-parser-output > p
// Prose in parsoid: .mw-parser-output > section p
parserOutput.find( '> p, > section p' ).each( function () {
$( this ).addClass( 'prosesize-highlight' );
proseSize += getLength( this );
proseSizeHtml += this.innerHTML.length;
refmarksize += getRefMarkLength( this, false );
refmarkSizeHtml += getRefMarkLength( this, true );
wordCount += this.innerHTML.replace( /(<([^>]+)>)/ig, '' ).split( /\s+/ ).length;
} );
// Calculate size of references (i.e. output of <references/>)
parserOutput.find( 'ol.references' ).each( function () {
refSize = getLength( this );
refSizeHtml = this.innerHTML.length;
} );
proseSize -= refmarksize;
function show_output() {
proseValue = sizeElement( 'prose-size', 'Prose size (text only):', proseSize, ' (' + wordCount + ' words) "readable prose size"' );
refValue = sizeElement( 'ref-size', 'References (text only):', refSize + refmarksize );
refHtmlValue = sizeElement( 'ref-size-html', 'References (including all HTML code):', refSizeHtml + refmarkSizeHtml );
proseHtmlValue = sizeElement( 'prose-size-html', 'Prose size (including all HTML code):', proseSizeHtml - refmarkSizeHtml );
output.append( proseHtmlValue, refHtmlValue, proseValue, refValue );
parserOutput.prepend( combined );
getFileSize( proseHtmlValue );
getRevisionSize( proseValue );
}
// Add the relevant outputs once we have fetched the prose size.
prosePromise.then(
function( data ) {
if ( mw.config.get( 'wgIsArticle' ) ) {
// Tool doesn't work on previews
proseSize = data.prose_size;
wordCount = data.word_count;
}
show_output();
},
// If tool is down fallback to our prose count
show_output
);
}
}
if (
!mw.config.get( 'wgCanonicalSpecialPageName' )
) {
$.ready.then( function () {
/**
* Depending on whether in edit mode or preview/view mode,
* show the approppiate response upon clicking the portlet link
*/
var func, $portlet, notEnabled = false;
if (
mw.config.get( 'wgAction' ) === 'edit' ||
( mw.config.get( 'wgAction' ) === 'submit' && document.getElementById( 'wikiDiff' ) )
) {
notEnabled = true;
func = function () {
mw.notify( 'You need to preview the text for the prose size script to work in edit mode.' );
};
} else if ( [ 'view', 'submit', 'historysubmit', 'purge' ].indexOf( mw.config.get( 'wgAction' ) ) !== -1 ) {
func = main;
}
if ( func ) {
$portlet = $( mw.util.addPortletLink( 'p-tb', '#', 'Page size', 't-page-size', 'Calculate page and prose size' ) );
if ( notEnabled ) {
$portlet.addClass( 'prosesize-portlet-link-edit-mode' );
}
$portlet.on( 'click', function ( e ) {
e.preventDefault();
if ( window.ve && ve.init && ve.init.target && ve.init.target.active ) {
mw.notify( 'Prosesize does not work with the Visual Editor.' );
} else {
func();
}
} );
}
} );
}
}() );
fs4053qkpwa1s79hcibt70n9a3q1b0t
311163
311162
2026-10-25T17:44:59Z
Isma4l
41797
311163
javascript
text/javascript
/* _____________________________________________________________________________
* | |
* | === DIGRIIN: FAYLKA GADGET-KA CAALAMIGA AH === |
* | Isbeddellada faylkan waxay saameeyaan isticmaaleyaal badan. |
* | Fadlan kala hadal isbeddellada bogga wadahadalka ama [[WT:Gadget]] ka hor inta aadan wax ka beddelin.|
* |_____________________________________________________________________________|
*
*/
/**
* Prosesize (Cabirka Qoraalka)
* Dukumentiyada ku yaal en.wikipedia.org/wiki/Wikipedia:Prosesize
* Dib-u-qoriddiisa [[User:Dr_pda/prosesize.js]].
*/
'use strict';
( function () {
function sizeFormatter( size ) {
var nbsp = "\xA0"; // U dhiganta
if ( size > 10240 ) {
return ( Math.round( size / 1024 ) + nbsp + 'kB' );
} else {
return ( size + nbsp + 'B' );
}
}
function sizeElement( id, text, size, extraText ) {
return $( '<li>' )
.prop( 'id', id )
.append(
$( '<b>' ).text( text ),
document.createTextNode( ' ' + sizeFormatter( size ) + ( extraText || '' ) )
);
}
function getRevisionSize( proseValue ) {
var Api = new mw.Api();
function appendResult( size ) {
var wikiValue = sizeElement( 'wiki-size', 'Qoraalka Wiki-ga:', size );
proseValue.before( wikiValue );
}
if ( mw.config.get( 'wgAction' ) === 'submit' ) {
// Hel cabirka qoraalka sanduuqa wax-ka-beddelka
// eslint-disable-next-line no-jquery/no-global-selector
appendResult( $( '#wpTextbox1' ).textSelection( 'getContents' ).length );
} else if ( mw.config.get( 'wgIsArticle' ) ) {
// Ka hel cabirka dib-u-eegista API-ga
Api.get( {
action: 'query',
prop: 'revisions',
rvprop: 'size',
revids: mw.config.get( 'wgRevisionId' ),
formatversion: 2
} ).then( function ( result ) {
appendResult( result.query.pages[ 0 ].revisions[ 0 ].size );
} );
}
}
function getFileSize( proseHtmlValue ) {
// Cabirka dukumentiga HTML si wanaagsan looma qeexin habka hor-u-eegiska ama wax-ka-beddelka qaybta
if ( mw.config.get( 'wgAction' ) !== 'submit' ) {
$.get( location ).then( function ( result ) {
var fsize = sizeElement( 'total-size', 'Cabirka dukumentiga HTML:', result.length );
proseHtmlValue.before( fsize );
} );
}
}
function getLength( id ) {
var i;
var textLength = 0;
for ( i = 0; i < id.childNodes.length; i++ ) {
if ( id.childNodes[ i ].nodeType === Node.TEXT_NODE ) {
textLength += id.childNodes[ i ].nodeValue.length;
} else if ( [ 'STYLE', 'svg' ].includes( id.childNodes[ i ].tagName ) ) {
// Ka reeb summadaha hab-dhismaha (style tags) iyo shaxda (SVGs)
continue;
} else if (
id.childNodes[ i ].nodeType === Node.ELEMENT_NODE &&
( id.childNodes[ i ].id === 'coordinates' || id.childNodes[ i ].className.indexOf( 'emplate' ) !== -1 )
) {
// <nowiki> kiis gaar ah oo loogu talagalay tampleeytyada {{coord}} iyo kuwa la midka ah {{fact}} </nowiki>
// Ka reeb dhererka, hana ka dhigin asalka huruud
id.childNodes[ i ].className += ' prosesize-special-template';
} else {
textLength += getLength( id.childNodes[ i ] );
}
}
return textLength;
}
function getRefMarkLength( id, html ) {
var i;
var textLength = 0;
for ( i = 0; i < id.childNodes.length; i++ ) {
if (
id.childNodes[ i ].nodeType === Node.ELEMENT_NODE &&
id.childNodes[ i ].className === 'reference'
) {
textLength += ( html ) ?
id.childNodes[ i ].innerHTML.length :
getLength( id.childNodes[ i ] );
}
}
return textLength;
}
function main() {
var prosePromise, proseValue, refValue, refHtmlValue, proseHtmlValue;
// eslint-disable-next-line no-jquery/no-global-selector
var parserOutput = $( '#mw-content-text .mw-parser-output' );
// eslint-disable-next-line no-jquery/no-global-selector
var prevStats = $( '#document-size-stats' );
// eslint-disable-next-line no-jquery/no-global-selector
var prevHeader = $( '#document-size-header' );
var proseSize = 0;
var proseSizeHtml = 0;
var refmarksize = 0;
var refmarkSizeHtml = 0;
var wordCount = 0;
var refSize = 0;
var refSizeHtml = 0;
var header = $( '<span>' )
.prop( 'id', 'document-size-header' )
.html( 'Tilmaamaha dukumentiga <small>(<a href="//en.wikipedia.org/wiki/Wikipedia:Prosesize">macluumaad dheeraad ah</a>)</small>:' );
var output = $( '<ul>' )
.prop( 'id', 'document-size-stats' );
var combined = $( '<div>' )
.prop( 'id', 'document-size' )
.append( header, output );
if ( parserOutput.length === 0 ) {
return;
}
if ( prevStats.length ) {
// Haddii tirakoobku horay u jiro, dami oo ka saar iftiiminta
prevStats.remove();
prevHeader.remove();
parserOutput.find( '> p, > section p' ).removeClass( 'prosesize-highlight' );
} else {
// Isticmaal API-ga prosesize si aad u hesho xisaab qoraal oo sax ah
// Xisaabaadka hoose waxaa looga tagay iftiiminta
prosePromise = $.getJSON( 'https://prosesize.toolforge.org/api/' + mw.config.get( 'wgServerName' ) + '/'
+ encodeURIComponent( mw.config.get( 'wgPageName' ) ) + '?revision=' + mw.config.get( 'wgRevisionId' ) );
// Xisaabi cabirka qoraalka iyo cabirka summadaha tixraaca ([1] iwm)
// Qoraalka ku jira falanqeeyaha hore: .mw-parser-output > p
// Qoraalka ku jira parsoid: .mw-parser-output > section p
parserOutput.find( '> p, > section p' ).each( function () {
$( this ).addClass( 'prosesize-highlight' );
proseSize += getLength( this );
proseSizeHtml += this.innerHTML.length;
refmarksize += getRefMarkLength( this, false );
refmarkSizeHtml += getRefMarkLength( this, true );
wordCount += this.innerHTML.replace( /(<([^>]+)>)/ig, '' ).split( /\s+/ ).length;
} );
// Xisaabi cabirka tixraacyada (t.a. wixii ka soo baxa <references/>)
parserOutput.find( 'ol.references' ).each( function () {
refSize = getLength( this );
refSizeHtml = this.innerHTML.length;
} );
proseSize -= refmarksize;
function show_output() {
proseValue = sizeElement( 'prose-size', 'Cabirka qoraalka (qoraal keliya):', proseSize, ' (' + wordCount + ' errayada) "cabirka qoraalka akhriska leh"' );
refValue = sizeElement( 'ref-size', 'Tixraacyada (qoraal keliya):', refSize + refmarksize );
refHtmlValue = sizeElement( 'ref-size-html', 'Tixraacyada (oo ay ku jiraan dhammaan koodhka HTML):', refSizeHtml + refmarkSizeHtml );
proseHtmlValue = sizeElement( 'prose-size-html', 'Cabirka qoraalka (oo ay ku jiraan dhammaan koodhka HTML):', proseSizeHtml - refmarkSizeHtml );
output.append( proseHtmlValue, refHtmlValue, proseValue, refValue );
parserOutput.prepend( combined );
getFileSize( proseHtmlValue );
getRevisionSize( proseValue );
}
// Ku dar natiijooyinka khuseeya marka aan soo ceshano cabirka qoraalka.
prosePromise.then(
function( data ) {
if ( mw.config.get( 'wgIsArticle' ) ) {
// Qalabku kama shaqeeyo hor-u-eegiska
proseSize = data.prose_size;
wordCount = data.word_count;
}
show_output();
},
// Haddii qalabku xumaado, ku noqo tirinta qoraalkeena
show_output
);
}
}
if (
!mw.config.get( 'wgCanonicalSpecialPageName' )
) {
$.ready.then( function () {
/**
* Iyadoo ku xiran inay ku jirto habka wax-ka-beddelka ama habka hor-u-eegiska/daawashada,
* muuji jawaabta saxda ah marka la gujiyo xiriiriyaha bar-tilmaameedka
*/
var func, $portlet, notEnabled = false;
if (
mw.config.get( 'wgAction' ) === 'edit' ||
( mw.config.get( 'wgAction' ) === 'submit' && document.getElementById( 'wikiDiff' ) )
) {
notEnabled = true;
func = function () {
mw.notify( 'Waxaad u baahan tahay inaad hor-u-eegiso qoraalka si uu qalabka cabirka qoraalku uga shaqeeyo habka wax-ka-beddelka.' );
};
} else if ( [ 'view', 'submit', 'historysubmit', 'purge' ].indexOf( mw.config.get( 'wgAction' ) ) !== -1 ) {
func = main;
}
if ( func ) {
$portlet = $( mw.util.addPortletLink( 'p-tb', '#', 'Cabirka bogga', 't-page-size', 'Xisaabi cabirka bogga iyo qoraalka' ) );
if ( notEnabled ) {
$portlet.addClass( 'prosesize-portlet-link-edit-mode' );
}
$portlet.on( 'click', function ( e ) {
e.preventDefault();
if ( window.ve && ve.init && ve.init.target && ve.init.target.active ) {
mw.notify( 'Prosesize lama shaqeeyo Tafatiraha Muuqaalka (Visual Editor).' );
} else {
func();
}
} );
}
} );
}
}() );
bca9tt0ou88shfgweq807l7kr2ee10f
MediaWiki:Gadget-Prosesize.css
8
53961
311164
2026-10-25T17:45:41Z
Isma4l
41797
Abuuray
311164
css
text/css
/* _____________________________________________________________________________
* | |
* | === WARNING: GLOBAL GADGET FILE === |
* | Changes to this page affect many users. |
* | Please discuss changes on the talk page or on [[WT:Gadget]] before editing. |
* |_____________________________________________________________________________|
*
*/
.prosesize-highlight {
background-color: yellow;
color:black;
}
.prosesize-portlet-link-edit-mode:first-child {
color:black;
}
.prosesize-special-template {
background-color: none;
}
#document-size {
margin-top: 0.5em;
}
47x54n4r9d228bkkwmkmjn0vu9g8cdb
MediaWiki:Gadget-Prosesize
8
53962
311165
2026-10-25T17:46:37Z
Isma4l
41797
/* */
311165
wikitext
text/x-wiki
[[:en:Wikipedia:Prosesize|Prosesize]]: ku dar xiriiriye qalabka si uu u muujiyo cabirka iyo tirada erayada ee bog ku jira
0wqmvcadgv0sjojg9ak8ux0t557lkes
MediaWiki:Gadget-refToolbar.js
8
53963
311166
2026-10-25T17:48:41Z
Isma4l
41797
Abuuray
311166
javascript
text/javascript
/**
* RefToolbar
*
* Adds tools for citing references to the edit toolbar.
* See [[Wikipedia:RefToolbar]] for further documentation. One of two
* possible versions will load (Reftoolbar 1.0 or Reftoolbar 2.0)
* depending on the user preferences (the usebetatoolbar preference).
*
* @see: [[Wikipedia:RefToolbar]]
* @see: [[MediaWiki:RefToolbar.js]]
* @see: [[MediaWiki:RefToolbarConfig.js]]
* @see: [[MediaWiki:RefToolbarLegacy.js]]
* @see: [[MediaWiki:RefToolbarMessages-en.js]]
* @see: [[MediaWiki:Gadget-refToolbarBase.js]]
* @author: [[User:Mr.Z-man]]
* @author: [[User:Kaldari]]
*/
/* jshint browser: true, camelcase: true, curly: true, eqeqeq: true */
/* global $, mw */
(function () {
'use strict';
function initializeRefTools() {
// 2010 wikitext editor
mw.hook('wikiEditor.toolbarReady').add(() => {
// TODO:
// * Explicitly declare global variables from [[MediaWiki:RefToolbar.js]] using window.*
// * Move [[MediaWiki:RefToolbar.js]] to [[MediaWiki:Gadget-refToolbarDialogs.js]]
// * Create the module 'ext.gadget.refToolbarDialogs' depending on 'ext.gadget.refToolbarBase'
// * Replace the code below by mw.loader.load( 'ext.gadget.refToolbarDialogs' );
mw.loader.using('ext.gadget.refToolbarBase', () => {
mw.loader.load('/w/index.php?title=MediaWiki:RefToolbar.js&action=raw&ctype=text/javascript');
});
window.refToolbarInstalled = true;
});
// 2006 legacy toolbar
mw.hook('mw.toolbar').add(() => {
mw.loader.load('/w/index.php?title=MediaWiki:RefToolbarLegacy.js&action=raw&ctype=text/javascript');
window.refToolbarInstalled = true;
});
}
if (/^(edit|submit)$/.test(mw.config.get('wgAction')) &&
mw.config.get('wgPageContentModel') === 'wikitext' &&
!$('#wpTextbox1[readonly]').length &&
!window.refToolbarInstalled
) {
$(initializeRefTools);
}
}());
sbkusj4ba3d63f6t2rkl2tmfiqijmhl
MediaWiki:Gadget-legacyToolbar
8
53964
311167
2026-10-25T17:50:25Z
Isma4l
41797
/* */
311167
wikitext
text/x-wiki
[[:en:Wikipedia:Legacy_toolbar|Daar qalabka wax ka beddelka ee duugga ah (2006)]]. Arrinkan waxaa ka adkaan doona ikhtiyaarka "Daar qalabka wax ka beddelka" ee ku jira tabka Wax ka beddelka.
jwn4dc16mep2p8pzdyr7pd4fi6q2gwx
MediaWiki:Minerva.css
8
53965
311170
2026-10-25T18:15:37Z
Isma4l
41797
Abuuray
311170
css
text/css
/* Prevent unnecessary margin at the bottom of centralnotices */
.cnotice {
margin-bottom: 0 !important;
}
/* MediaWiki:Minerva.css differs from MediaWiki:Common.css here. */
.mw-body-content sub,
.mw-body-content sup {
font-size: 0.75em;
}
/********* General fixes for night mode - please sync any changes here with [[MediaWiki:Vector.css]] *********/
@media screen {
html.skin-theme-clientpref-night .navbox a:not(.new):not(.mw-selflink):link,
html.skin-theme-clientpref-night .infobox a:not(.new):not(.mw-selflink):link {
color: var( --color-progressive ) !important;
}
/* [[phab:T370074]] */
html.skin-theme-clientpref-night .mw-parser-output section > figure img,
html.skin-theme-clientpref-night .mw-parser-output section > div > figure img,
html.skin-theme-clientpref-night .mw-parser-output > figure img {
background: var( --background-color-disabled-fixed, #C8CCD1 );
}
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .navbox a:not(.new):not(.mw-selflink):link,
html.skin-theme-clientpref-os .infobox a:not(.new):not(.mw-selflink):link {
color: var( --color-progressive ) !important;
}
/* T370074 */
html.skin-theme-clientpref-os .mw-parser-output section > figure img,
html.skin-theme-clientpref-os .mw-parser-output section > div > figure img,
html.skin-theme-clientpref-os .mw-parser-output > figure img {
background: var( --background-color-disabled-fixed, #C8CCD1 );
}
}
flckdyfnf7loh6v1dwbh3zbmz6zhr1i
Module:Ns has subpages
828
53966
311183
2026-10-26T10:21:43Z
Isma4l
41797
Abuuray
311183
Scribunto
text/plain
-- This module implements [[Template:Ns has subpages]].
-- While the template is fairly simple, this information is made available to
-- Lua directly, so using a module means that we don't have to update the
-- template as new namespaces are added.
local p = {}
function p._main(ns, frame)
-- Get the current namespace if we were not passed one.
if not ns then
ns = mw.title.getCurrentTitle().namespace
end
-- Look up the namespace table from mw.site.namespaces. This should work
-- for a majority of cases.
local nsTable = mw.site.namespaces[ns]
-- Try using string matching to get the namespace from page names.
-- Do a quick and dirty bad title check to try and make sure we do the same
-- thing as {{NAMESPACE}} in most cases.
if not nsTable and type(ns) == 'string' and not ns:find('[<>|%[%]{}]') then
local nsStripped = ns:gsub('^[_%s]*:', '')
nsStripped = nsStripped:gsub(':.*$', '')
nsTable = mw.site.namespaces[nsStripped]
end
-- If we still have no match then try the {{NAMESPACE}} parser function,
-- which should catch the remainder of cases. Don't use a mw.title object,
-- as this would increment the expensive function count for each new page
-- tested.
if not nsTable then
frame = frame or mw.getCurrentFrame()
local nsProcessed = frame:callParserFunction('NAMESPACE', ns)
nsTable = nsProcessed and mw.site.namespaces[nsProcessed]
end
return nsTable and nsTable.hasSubpages
end
function p.main(frame)
local ns = frame:getParent().args[1]
if ns then
ns = ns:match('^%s*(.-)%s*$') -- trim whitespace
ns = tonumber(ns) or ns
end
local hasSubpages = p._main(ns, frame)
return hasSubpages and 'yes' or ''
end
return p
qb0b1z2vff7kifnw21v205d791esbiz
311184
311183
2026-10-26T10:22:54Z
Isma4l
41797
311184
Scribunto
text/plain
-- This module implements [[Template:Ns has subpages]].
-- While the template is fairly simple, this information is made available to
-- Lua directly, so using a module means that we don't have to update the
-- template as new namespaces are added.
local p = {}
function p._main(ns, frame)
-- Get the current namespace if we were not passed one.
if not ns then
ns = mw.title.getCurrentTitle().namespace
end
-- Look up the namespace table from mw.site.namespaces. This should work
-- for a majority of cases.
local nsTable = mw.site.namespaces[ns]
-- Try using string matching to get the namespace from page names.
-- Do a quick and dirty bad title check to try and make sure we do the same
-- thing as {{NAMESPACE}} in most cases.
if not nsTable and type(ns) == 'string' and not ns:find('[<>|%[%]{}]') then
local nsStripped = ns:gsub('^[_%s]*:', '')
nsStripped = nsStripped:gsub(':.*$', '')
nsTable = mw.site.namespaces[nsStripped]
end
-- If we still have no match then try the {{NAMESPACE}} parser function,
-- which should catch the remainder of cases. Don't use a mw.title object,
-- as this would increment the expensive function count for each new page
-- tested.
if not nsTable then
frame = frame or mw.getCurrentFrame()
local nsProcessed = frame:callParserFunction('NAMESPACE', ns)
nsTable = nsProcessed and mw.site.namespaces[nsProcessed]
end
return nsTable and nsTable.hasSubpages
end
function p.main(frame)
local ns = frame:getParent().args[1]
if ns then
ns = ns:match('^%s*(.-)%s*$') -- trim whitespace
ns = tonumber(ns) or ns
end
local hasSubpages = p._main(ns, frame)
return hasSubpages and 'haa' or ''
end
return p
5v6h6aphcyq9wizkfnyo7xt8sq6pujy
Module:TemplateStyles
828
53967
311187
2026-10-26T10:28:19Z
Isma4l
41797
Abuuray
311187
Scribunto
text/plain
return function (CSS_page)
return mw.getCurrentFrame():extensionTag{
name = "templatestyles", args = { src = CSS_page }
}
end
oqqpj2a1rchbdjx745s6fbxdka74irm
Template:Dmbox/styles.css
10
53968
311188
2026-10-26T10:29:20Z
Isma4l
41797
Abuuray
311188
sanitized-css
text/css
/* {{pp-template}} */
.dmbox {
display: flex;
align-items: center;
clear: both;
margin: 0.9em 1em;
border-top: 1px solid var(--border-color-subtle, #c8ccd1);
border-bottom: 1px solid var(--border-color-subtle, #c8ccd1);
padding: 0.25em 0.35em;
font-style: italic;
}
.dmbox > * {
flex-shrink: 0;
margin: 0 0.25em;
}
.dmbox-body {
flex-grow: 1;
flex-shrink: 1;
padding: 0.1em 0;
}
.dmbox-invalid-type {
text-align: center;
}
qk1mjfiuvkk443pr4eyxaam542xctm0
Template:Longlink
10
53969
311195
2026-10-26T10:41:55Z
Isma4l
41797
Abuuray
311195
wikitext
text/x-wiki
<div style="display:inline-block; padding:0.2em 0.4em; line-height:1.2em; {{{style|}}}">{{{1}}}</div><noinclude>
{{documentation}}
</noinclude>
dvcheimp70gx2yvsike30has85loowp