local
p
=
{}
local
getArgs
local
HtmlBuilder
=
require
(
'Модуль:HtmlBuilder'
)
local
function
trim
(
s
)
return
mw
.
ustring
.
match
(
s
,
"^%s*(.-)%s*$"
)
end
local
function
htmlError
(
s
)
local
span
=
HtmlBuilder
.
create
(
'span'
)
span
.
addClass
(
'error'
)
.
css
(
'float'
,
'left'
)
.
css
(
'white-space'
,
'nowrap'
)
.
wikitext
(
'Error: '
..
s
)
return
tostring
(
span
)
end
local
function
getTitle
(
pageName
)
pageName
=
trim
(
pageName
);
local
page_title
,
talk_page_title
;
if
mw
.
ustring
.
sub
(
pageName
,
1
,
1
)
==
':'
then
page_title
=
mw
.
title
.
new
(
mw
.
ustring
.
sub
(
pageName
,
2
));
else
page_title
=
mw
.
title
.
new
(
pageName
,
'Халыып'
);
end
if
page_title
then
talk_page_title
=
page_title
.
talkPageTitle
;
else
talk_page_title
=
nil
;
end
return
page_title
,
talk_page_title
;
end
function
p
.
_navbar
(
args
)
local
good
,
title
,
talk_title
;
local
titleArg
=
1
if
args
.
collapsible
then
titleArg
=
2
if
not
args
.
plain
then
args
.
mini
=
1
end
if
args
.
fontcolor
then
args
.
fontstyle
=
'color:'
..
args
.
fontcolor
..
';'
end
args
.
style
=
'float:left; text-align:left; width:6em;'
end
good
,
title
,
talk_title
=
pcall
(
getTitle
,
args
[
titleArg
]
or
(
':'
..
mw
.
getCurrentFrame
():
getParent
():
getTitle
()));
if
not
good
then
return
htmlError
(
title
);
end
if
not
title
then
return
htmlError
(
'Page does not exist'
)
end
local
mainpage
=
title
.
fullText
;
local
talkpage
=
talk_title
and
talk_title
.
fullText
or
''
local
editurl
=
title
:
fullUrl
(
'action=edit'
);
local
viewLink
,
talkLink
,
editLink
=
'view'
,
'talk'
,
'edit'
if
args
.
mini
then
viewLink
,
talkLink
,
editLink
=
'v'
,
't'
,
'e'
end
local
div
=
HtmlBuilder
.
create
().
tag
(
'div'
)
div
.
addClass
(
'plainlinks'
)
.
addClass
(
'hlist'
)
.
addClass
(
'navbar'
)
.
cssText
(
args
.
style
)
if
args
.
mini
then
div
.
addClass
(
'mini'
)
end
if
not
(
args
.
mini
or
args
.
plain
)
then
div
.
tag
(
'span'
)
.
css
(
'word-spacing'
,
0
)
.
cssText
(
args
.
fontstyle
)
.
wikitext
(
args
.
text
or
'This box:'
)
.
wikitext
(
' '
)
end
if
args
.
brackets
then
div
.
tag
(
'span'
)
.
css
(
'margin-right'
,
'-0.125em'
)
.
cssText
(
args
.
fontstyle
)
.
wikitext
(
'['
)
.
newline
();
end
local
ul
=
div
.
tag
(
'ul'
);
ul
.
tag
(
'li'
)
.
addClass
(
'nv-view'
)
.
wikitext
(
'[['
..
mainpage
..
'|'
)
.
tag
(
'span'
)
.
attr
(
'title'
,
'View this template'
)
.
cssText
(
args
.
fontstyle
or
''
)
.
wikitext
(
viewLink
)
.
done
()
.
wikitext
(
']]'
)
.
done
()
.
tag
(
'li'
)
.
addClass
(
'nv-talk'
)
.
wikitext
(
'[['
..
talkpage
..
'|'
)
.
tag
(
'span'
)
.
attr
(
'title'
,
'Discuss this template'
)
.
cssText
(
args
.
fontstyle
or
''
)
.
wikitext
(
talkLink
)
.
done
()
.
wikitext
(
']]'
);
if
not
args
.
noedit
then
ul
.
tag
(
'li'
)
.
addClass
(
'nv-edit'
)
.
wikitext
(
'['
..
editurl
..
' '
)
.
tag
(
'span'
)
.
attr
(
'title'
,
'Edit this template'
)
.
cssText
(
args
.
fontstyle
or
''
)
.
wikitext
(
editLink
)
.
done
()
.
wikitext
(
']'
);
end
if
args
.
brackets
then
div
.
tag
(
'span'
)
.
css
(
'margin-left'
,
'-0.125em'
)
.
cssText
(
args
.
fontstyle
or
''
)
.
wikitext
(
']'
)
.
newline
();
end
if
args
.
collapsible
then
div
.
done
()
.
tag
(
'span'
)
.
css
(
'font-size'
,
'110%'
)
.
cssText
(
args
.
fontstyle
or
''
)
.
wikitext
(
args
[
1
])
end
return
tostring
(
div
.
allDone
())
end
function
p
.
navbar
(
frame
)
if
not
getArgs
then
getArgs
=
require
(
'Модуль:Arguments'
).
getArgs
end
return
p
.
_navbar
(
getArgs
(
frame
))
end
return
p