If you try add a youtube video ( or any file viewer support media ) , you will find wiki not support file viewer. Because wiki file viewer have bug.
In WikiFileViewerModule.cs file , The original code :
#region Events
void WikiEvents_RenderPage(Page page, RenderEventArgs e)
{
TransformTextParts(e.RenderedContent, e.Target, e.TextParts);
}
void WikiEvents_RenderPageRevision(PageRevision revision, RenderEventArgs e)
{
TransformTextParts(e.RenderedContent, e.Target, e.TextParts);
}
#endregion
#region Private Methods
private void TransformTextParts(string renderedContent, PostTarget target, TextPartSet textParts)
{
...
}
TransformTextParts(e.RenderedContent, e.Target, e.TextParts); have bug , e.RenderedContent is never update.
fix bug code:
#region Events
void WikiEvents_RenderPage
(Page page, RenderEventArgs e
)
{
e.
RenderedContent = TransformTextParts
(e.
RenderedContent, e.
Target, e.
TextParts);
}
void WikiEvents_RenderPageRevision
(PageRevision revision, RenderEventArgs e
)
{
e.
RenderedContent = TransformTextParts
(e.
RenderedContent, e.
Target, e.
TextParts);
}
#endregion
#region Private Methods
private string TransformTextParts
(string renderedContent, PostTarget target, TextPartSet textParts
)
{
CSContext csContext
= CSContext.
Current;
foreach (TextPart textPart
in textParts
)
{
if (string.
Compare(textPart.
Name,
"View",
true) == 0
)
{
int offset
= 0;
Uri url
= null;
int width
= 0;
int height
= 0;
if (textPart.
Count >= 2)
{
// a URL does exist on the text part, parse it
if (textPart
[1].
EndsWith("tp") && textPart
[1].
Length <= 5 && textPart.
Count >= 3)
{
offset
= 1;
url
= new Uri
(textPart
[1] + ":" + textPart
[2], UriKind.
RelativeOrAbsolute);
}
else
url
= new Uri
(textPart
[1], UriKind.
RelativeOrAbsolute);
}
if (url
== null)
{
// no URL, clear the text part
renderedContent
= textPart.
Replace(renderedContent,
"");
}
else if (target
!= PostTarget.
Web && FileViewers.
GetMediaType(url, FileViewType.
View) != PostMediaType.
Image)
{
// don't render rich media to email, syndication, nntp, etc
renderedContent
= textPart.
Replace(renderedContent, ResourceManager.
GetString("FileViewerModule_NonWebRender"));
}
else
{
// we have a URL, parse width and render the viewer
if (textPart.
Count >= 3 + offset
)
int.
TryParse(textPart
[2 + offset
],
out width
);
if (textPart.
Count >= 4 + offset
)
int.
TryParse(textPart
[3 + offset
],
out height
);
renderedContent
= textPart.
Replace(renderedContent, GetRenderedViewer
(url, FileViewType.
View, width, height
));
}
}
}
return renderedContent;
}
ok , wiki file viewer will work.