Forums

Wiki File Viewer no function (with fix code)

This question has suggested answer(s)

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.

Code Highlight / Syntax Highlighter CSModule and More CS tools ,Visit Rurisoft Update Service

All Replies
  • Thanks for finding and reporting this bug.  I just filed it as a bug so that it will get fixed.

     

    Thanks,