Модуль : Navbar

Бикипиэдьийэ диэн сиртэн ылыллыбыт

Для документации этого модуля может быть создана страница Модуль:Navbar/doc

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