+1-888-365-2779
Try Now
More in this section

Forums / Developing with Sitefinity / Document Download List + Thumbnails

Document Download List + Thumbnails

17 posts, 0 answered
  1. Wong
    Wong avatar
    8 posts
    Registered:
    24 Jun 2008
    25 Oct 2008
    Link to this post
    Hi, I'm on the latest version of Sitefinity. I want to know if there is any way to add a thumbnail to each items in the document libraies and display it in download list.

    Thanks
  2. Pepi
    Pepi avatar
    981 posts
    Registered:
    28 Oct 2016
    27 Oct 2008
    Link to this post
    Hello Wong,

    1. Add a field called Thumbnail to a document library and then edit ~/Sitefinity/Admin/ControlTemplates/Libraries/ControlPanelEdit.ascx file to display the meta field at the edit document screen. The steps how to achieve this are described in our User Manual > Working with Modules > Images & Documents > Customizing Images & Documents > Add custom meta fields.
    2. Create a copy of the corresponding public template (for example the template for the Table mode is ~/Sitefinity/ControlTemplates/Libraries/DownloadListTableModeTemplate.ascx) and its resource file (~/Sitefinity/ControlTemplates/Libraries/App_LocalResources/DownloadListTableModeTemplate.ascx.resx).
    3. Declare an Image control in the template copy to display the thumbnail:

    <asp:Repeater ID="repeater" runat="server"
        <HeaderTemplate> 
            <table class="sf_libraryGrid"
                <thead> 
                <tr> 
                    <th scope="col" id="TitleWrap" runat="server"><asp:Literal ID="Literal1" runat="server" Text="<%$Resources:Title %>"></asp:Literal></th
                    <th scope="col" id="ExtWrap" runat="server"><asp:Literal ID="Literal2" runat="server" Text="<%$Resources:Extension %>"></asp:Literal></th
                    <th scope="col" id="AuthorWrap" runat="server"><asp:Literal ID="Literal3" runat="server" Text="<%$Resources:Author %>"></asp:Literal></th
                    <th scope="col" id="UploadDateWrap" runat="server"><asp:Literal ID="Literal4" runat="server" Text="<%$Resources:UploadDate %>"></asp:Literal></th
                    <th scope="col" id="SizeWrap" runat="server"><asp:Literal ID="Literal5" runat="server" Text="<%$Resources:Size %>"></asp:Literal></th
                    <th scope="col" id="TagWrap" runat="server"><asp:Literal ID="Literal6" runat="server" Text="<%$Resources:Tags %>"></asp:Literal></th
                    <th scope="col" id="DownloadLinkWrap" runat="server"></th> 
                    <th scope="col"><asp:Literal ID="Literal7" runat="server" Text="Thumbnail"></asp:Literal></th
                </tr> 
                </thead> 
                <tbody> 
        </HeaderTemplate> 
        <ItemTemplate> 
                <tr> 
                    <th id="TitleWrap" runat="server" scope="row" class="sf_docTitle"
                        <asp:HyperLink ID="DownloadLink" runat="server"
                            <asp:Literal ID="Title" runat="server"></asp:Literal> 
                        </asp:HyperLink> 
                        <asp:Literal ID="Description" runat="server" /> 
                    </th> 
                    <td id="ExtWrap" runat="server"><asp:Literal id="Extension" runat="server"></asp:Literal></td
                    <td id="AuthorWrap" runat="server"><asp:Label id="Author" runat="server"></asp:Label></td
                    <td id="UploadDateWrap" runat="server" class="sf_date"
                        <sfWeb:DateTimeLiteral ID="UploadDate" runat="server" DateFormatString="<%$Resources:DateFormatString %>"></sfWeb:DateTimeLiteral> 
                    </td> 
                    <td id="SizeWrap" runat="server" class="sf_size"><asp:Literal id="Size" runat="server"></asp:Literal></td
                    <td id="TagWrap" runat="server"
                        <asp:Repeater id="Tags" runat="server"
                            <ItemTemplate> 
                                <asp:HyperLink ID="tagLink" runat="server"></asp:HyperLink> 
                            </ItemTemplate> 
                        </asp:Repeater> 
                    </td> 
                    <td id="DownloadLinkWrap" runat="server"><asp:HyperLink ID="FileDownloadLink" runat="server" Text="<%$Resources:Download %>" /></td
                    <td><asp:Image ID="Thumbnail" runat="server" /></td
                </tr> 
        </ItemTemplate> 
        <FooterTemplate> 
            </tbody> 
            </table> 
        </FooterTemplate> 
    </asp:Repeater> 

    4. Create a class that derives from the DownloadList base class:
    • Set TableModeTemplatePath property to point to the new template in the CreateChildControls method.
    • Override SetListMetadata method.
    using System; 
    using System.Data; 
    using System.Configuration; 
    using System.Web; 
    using System.Web.Security; 
    using System.Web.UI; 
    using System.Web.UI.HtmlControls; 
    using System.Web.UI.WebControls; 
    using System.Web.UI.WebControls.WebParts; 
    using Telerik.Cms.Engine; 
    using Telerik.Libraries; 
    using System.ComponentModel; 
    using Telerik.Web; 
     
    namespace MyLibrary 
        [ToolboxItem(typeof(DownloadListToolboxItem))] 
        public class CustomDownloadList : DownloadList 
        { 
            protected override void CreateChildControls() 
            { 
                base.TableModeTemplatePath = "~/Sitefinity/ControlTemplates/Libraries/CustomDownloadListTableModeTemplate.ascx"
                base.CreateChildControls(); 
            } 
     
            protected override void SetListMetadata(Control itemContainer, IContent contentItem) 
            { 
                base.SetListMetadata(itemContainer, contentItem); 
     
                Image thumbnail = itemContainer.FindControl("Thumbnail"as Image; 
                if (thumbnail != null
                    thumbnail.ImageUrl = contentItem.GetMetaData("Thumbnail"as string
            } 
        } 
     
        public class DownloadListToolboxItem : ToolboxItem 
        { 
            public DownloadListToolboxItem() 
                : base(typeof(CustomDownloadList)) 
            { 
                base.DisplayName = "Custom DownloadList"
                base.Description = "Displays a list of all files."
            } 
        } 
     

    5. Register the newly created control in <toolboxControls> section of the web.config to display it in Add Controls toolbox:

    <add name="Custom DownloadList" section="Images &amp; Documents" type="MyLibrary.CustomDownloadList, App_Code" /> 

    For details please refer to the following topic of the Developer Manual:
    Example: Extending Content View Control

    Do let us know if you need any further assistance.

    All the best,
    Pepi
    the Telerik team

    Check out Telerik Trainer, the state of the art learning tool for Telerik products.
  3. Wong
    Wong avatar
    8 posts
    Registered:
    24 Jun 2008
    29 Oct 2008
    Link to this post

    Thanks for your help. It runs successfully.

    However I want to have a file picker dialog to insert a file path of thumbnail into a textbox.
    I try to copy a few lines of code below from \News\ControlPanelEdit.ascx and paste it to \Libraries\ControlPanelEdit.ascx

    <li class="selector">
      <asp:Label ID="Label2" AssociatedControlID="Thumbnail" runat="server"><asp:Literal ID="Literal14" runat="server" Text="Thumbnail"></asp:Literal> <em id="ThumbnailLabel" runat="server"></em></asp:Label>
      <asp:TextBox ID="Thumbnail" Text="" runat="server" MaxLength="250"></asp:TextBox>
      <asp:LinkButton ID="picker" runat="server" OnClientClick="javascript:needToConfirm=false;callAjaxFunc=false;" Text="Select" CssClass="picker" CausesValidation="false" CommandName="Pick" CommandArgument="Thumbnail:Telerik.FileManager.UrlWebEditor, Telerik.FileManager"></asp:LinkButton><p class="example"><asp:Literal ID="Literal15" runat="server" Text="ThumbnailNote"></asp:Literal></p>
    </li>

    But it doesn' work. I' m getting an error "System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values. Parameter name: ItemHierarchicalIndex".

    Please tell me how can I solve this problem.

  4. Pepi
    Pepi avatar
    981 posts
    Registered:
    28 Oct 2016
    31 Oct 2008
    Link to this post
    Hello Wong,

    To achieve the required functionality you need to create your own control that implements ITextControl interface. Here is an example:

    using System; 
    using System.Data; 
    using System.Configuration; 
    using System.Web; 
    using System.Web.Security; 
    using System.Web.UI; 
    using System.Web.UI.WebControls; 
    using System.Web.UI.WebControls.WebParts; 
    using System.Web.UI.HtmlControls; 
    using Telerik.Cms.Web.UI; 
    using System.ComponentModel; 
     
    namespace MyLibrary 
        public class ThumbnailControl : CompositeControl, ITextControl 
        { 
            [Browsable(false)] 
            public ITextControl ThumbnailTextBox 
            { 
                get 
                { 
                    return this.FindControl("Thumbnail"as ITextControl; 
                } 
            } 
            
            protected override void CreateChildControls() 
            { 
                this.Controls.Clear(); 
     
                if (this.itemTemplate == null
                { 
                    this.itemTemplate = new DefaultItemTemplate(); 
                } 
                this.itemTemplate.InstantiateIn(this); 
     
                IButtonControl btn = this.FindControl("picker"as IButtonControl; 
                if (btn != null
                { 
                    this.properties = TypeDescriptor.GetProperties(this); 
     
                    this.editorDialog = new PropertyEditorDialog(); 
                    this.editorDialog.TypeContainer = this
                    this.editorDialog.PropertyChanged += new PropertyValueChangedEventHandler(editorDialog_PropertyChanged); 
                    this.Controls.Add(this.editorDialog); 
     
                    btn.CommandName = "Telerik.FileManager.UrlWebEditor, Telerik.FileManager"
                    btn.CommandArgument = "Text"
                    btn.Command += new CommandEventHandler(btn_Command); 
                } 
            } 
     
            void editorDialog_PropertyChanged(object source, PropertyValueChangedEventArgs e) 
            { 
                this.SetProperty(thisthis.properties, e.PropertyName, e.PropertyValue); 
            } 
     
            void btn_Command(object sender, CommandEventArgs e) 
            { 
                object data = null
                string name = (string)e.CommandArgument; 
                PropertyDescriptor desc = this.properties.Find(name, false); 
     
                data = desc.GetValue(this); 
     
                this.editorDialog.Show(name, e.CommandName, data, this); 
            } 
     
            private void SetProperty(object component, PropertyDescriptorCollection properties, string name, object value) 
            { 
                PropertyDescriptor desc = this.properties.Find(name, false); 
                desc.SetValue(this, value); 
            } 
     
            private PropertyEditorDialog editorDialog; 
            private PropertyDescriptorCollection properties; 
            private ITemplate itemTemplate; 
     
            private class DefaultItemTemplate : ITemplate 
            { 
                public void InstantiateIn(Control container) 
                { 
                    TextBox txt = new TextBox(); 
                    txt.ID = "Thumbnail"
                    container.Controls.Add(txt); 
     
                    LinkButton btn = new LinkButton(); 
                    btn.ID = "picker"
                    btn.Text = "Select"
                    container.Controls.Add(btn); 
                } 
            } 

            #region ITextControl Members 
     
            public string Text 
            { 
                get 
                { 
                    if (this.ThumbnailTextBox != null
                        return ThumbnailTextBox.Text; 
     
                    return string.Empty;  
                } 
                set 
                { 
                    this.ThumbnailTextBox.Text = value; 
                } 
            } 

            #endregion 
        } 
     

    Then, you should register ThumbnailControl control in ~/Sitefinity/Admin/ControlTemplates/Libraries/ControlPanelEdit.ascx template and declare it inside ContentMetaFields container like this:

    <%@ Register TagPrefix="cc" Namespace="MyLibrary" Assembly="App_Code" %> 
    ... 
    <sfGCn:ContentMetaFields ID="editMetaFields" runat="server"
                    <ItemTemplate> 
                        ... 
                        <li>  
                                        <asp:Label ID="lblThumbnail" runat="server" Text="Thumbnail" AssociatedControlID="Thumbnail" /> 
                                        <cc:ThumbnailControl ID="Thumbnail" runat="server" />  
                        </li> 
                        ... 
                    </ItemTemplate> 
    </sfGCn:ContentMetaFields> 

    Hope this helps.

    Kind regards,
    Pepi
    the Telerik team

    Check out Telerik Trainer, the state of the art learning tool for Telerik products.
  5. Wong
    Wong avatar
    8 posts
    Registered:
    24 Jun 2008
    31 Oct 2008
    Link to this post

    I still have an error:

     

    Server Error in '/' Application.

    Specified argument was out of the range of valid values.
    Parameter name: ItemHierarchicalIndex

    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
    Parameter name: ItemHierarchicalIndex

    Source Error:

    An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

    Stack Trace:

    [ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
    Parameter name: ItemHierarchicalIndex]
       Telerik.Web.UI.GridItemCollection.get_Item(String hierarchicalIndex) +58
       Telerik.Web.UI.GridDataItemCollection.get_Item(String hierarchicalIndex) +6
       Telerik.Web.UI.RadGrid.get_SelectedItems() +166
       Telerik.FileManager.ManageFiles.get_SelectedFiles() +110
       Telerik.FileManager.UrlWebEditor.get_Value() +249
       Telerik.Cms.Web.UI.WebUITypeEditor`1.Telerik.Cms.Web.UI.IWebUITypeEditor.get_Value() +7
       Telerik.Cms.Web.UI.PropertyEditorDialog.Button_Command(Object sender, CommandEventArgs e) +78
       System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +105
       System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +132
       System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +177
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1746
    


    Version Information: Microsoft .NET Framework Version:2.0.50727.1434; ASP.NET Version:2.0.50727.1434  

    Please tell me how to solve this problem.

    Thanks

    wong

  6. Pepi
    Pepi avatar
    981 posts
    Registered:
    28 Oct 2016
    31 Oct 2008
    Link to this post
    Hello Wong,

    Please make sure you have removed the code that you had copied from ~/Sitefinity/Admin/Controltemplates/News/ControlPanelEdit.ascx.

    Do let us know about the result.

    All the best,
    Pepi
    the Telerik team

    Check out Telerik Trainer, the state of the art learning tool for Telerik products.
  7. Wong
    Wong avatar
    8 posts
    Registered:
    24 Jun 2008
    01 Nov 2008
    Link to this post

    Hi, Pepi

    I' ve got the error after I replaced the code with your ThumbnailControl.

    I' ve followed your suggestions again in a new blank project, Sitefinity_3_5_1714_community_Blank.
    But It has the same error.

    Please tell me how to solve it.

    Thanks

    wong

  8. Pepi
    Pepi avatar
    981 posts
    Registered:
    28 Oct 2016
    04 Nov 2008
    Link to this post
    Hi Wong,

    It seems there is a problem with UrlWebEditor property editor. So I would recommend you use the following control that provides an opportunity to select images both from the file system and Images & Documents module:

    using System; 
    using System.ComponentModel; 
    using System.Web.UI; 
    using System.Web.UI.WebControls; 
    using Telerik.Web.UI; 
     
    namespace MyLibrary 
        public class ImageSelector : CompositeControl, ITextControl 
        { 
            [Browsable(false)] 
            public TextBox ThumbnailTextBox 
            { 
                get 
                { 
                    return this.FindControl("Thumbnail"as TextBox; 
                } 
            }  
     
            protected override void OnPreRender(EventArgs e) 
            { 
                base.OnPreRender(e); 
                if (Page != null
                { 
                    Page.ClientScript.RegisterClientScriptBlock(GetType(), "callback", GetScript(), true); 
                } 
            } 
     
            protected override void OnLoad(EventArgs e) 
            { 
                base.OnLoad(e); 
     
                RadWindow window = ((RadWindowManager)this.FindControl("RadWindowManager1")).Windows[0]; 
                LinkButton btn = this.FindControl("picker"as LinkButton; 
     
                if (window != null && btn != null
                    window.OpenerElementID = btn.ClientID; 
            } 
     
            protected override void CreateChildControls() 
            { 
                Controls.Clear(); 
     
                if (itemTemplate == null
                { 
                    itemTemplate = new DefaultItemTemplate(); 
                } 
                itemTemplate.InstantiateIn(this); 
            } 
     
     
            private string GetScript() 
            { 
                string result = "function CallBackFunction(radWindow, returnValue)" + 
                        "{" + 
                                "var oArea = document.getElementById('" + this.ThumbnailTextBox.ClientID + "');" + 
                                "if (returnValue) oArea.value = returnValue.src;" + 
                        "}"
     
                return result; 
            } 
     
            private ITemplate itemTemplate; 
     
            private class DefaultItemTemplate : ITemplate 
            { 
                public void InstantiateIn(Control container) 
                { 
                    TextBox txt = new TextBox(); 
                    txt.ID = "Thumbnail"
                    container.Controls.Add(txt); 
     
                    LinkButton btn = new LinkButton(); 
                    btn.ID = "picker"
                    btn.Text = "Select"
                    container.Controls.Add(btn); 
     
                    RadWindowManager manager = new RadWindowManager(); 
                    manager.ID = "RadWindowManager1"
                    manager.VisibleOnPageLoad = false
                    container.Controls.Add(manager); 
     
                    RadWindow window = new RadWindow(); 
                    window.ID = "RadWindow1"
                    window.NavigateUrl = "~/Sitefinity/UserControls/Dialogs/ImageDialog.aspx"
                    window.Width = Unit.Point(750); 
                    window.Height = Unit.Point(515); 
                    window.VisibleOnPageLoad = false
                    window.ClientCallBackFunction = "CallBackFunction"
                    manager.Windows.Add(window); 
                } 
            } 
            #region ITextControl Members 
     
            string ITextControl.Text 
            { 
                get 
                { 
                    if (this.ThumbnailTextBox != null
                        return ThumbnailTextBox.Text; 
     
                    return string.Empty; 
                } 
                set 
                { 
                    this.ThumbnailTextBox.Text = value; 
                } 
            } 
            #endregion 
        } 
     

    Please test the example above and do let us know if this helps.

    Best wishes,
    Pepi
    the Telerik team

    Check out Telerik Trainer, the state of the art learning tool for Telerik products.
  9. Wong
    Wong avatar
    8 posts
    Registered:
    24 Jun 2008
    05 Nov 2008
    Link to this post

    Hi Pepi,

    Thanks for your image selector control. It works well for selecting image from Images & Documents libraries.
    But when I selected an image from uploaded files and pressed "I'm done" button to finish it, the Thumbnail textbox showed the message "undefined".

    Please  tell me to solve the problem.

    Thanks

    wong

  10. Pepi
    Pepi avatar
    981 posts
    Registered:
    28 Oct 2016
    05 Nov 2008
    Link to this post
    Hi Wong,

    This issue is fixed in v3.5 SP1. So I would suggest you upgrade your project to the latest Sitefinity version. Please contact us if the problem still persists.

    Greetings,
    Pepi
    the Telerik team

    Check out Telerik Trainer, the state of the art learning tool for Telerik products.
  11. Eric
    Eric avatar
    23 posts
    Registered:
    01 Aug 2007
    15 Jul 2009
    Link to this post
    I am attempting to achieve the same thing but I am using <sfLib:ButtonSelector. Everything works fine until I select the file and click "I'm Done", which results in a javascript error:
    beforeInsertLink is not defined 
    SelectedItem("/Images/actualeventdemo.gif""""~/Images/actualeventdemo.gif", undefined, undefined, "~/Images/actualeventdemo.gif")Modules....b5ecff81b (line 329) 
    OnClientClose([RadWindow id=ctl00_ContentPlaceHolder1_contolPanel_ctl00_ctl00_editMetaFields_ctl00_picker_ctl00_ctl00_dialogWindow], Object)Modules....b5ecff81b (line 300) 
    (?)()([RadWindow id=ctl00_ContentPlaceHolder1_contolPanel_ctl00_ctl00_editMetaFields_ctl00_picker_ctl00_ctl00_dialogWindow], Object)ScriptRe...=288e02b4 (line 2399) 
    raiseEvent()("close", Object)ScriptRe...=68e0f440 (line 753) 
    close()(Object unresolved=~/Images/actualeventdemo.gif)ScriptRe...=68e0f440 (line 1271) 
    insertLink()ImageDialog.aspx (line 167) 
    onclick(click clientX=0, clientY=0) 

    I'm using 3.5 SP2.
  12. Georgi
    Georgi avatar
    3583 posts
    Registered:
    28 Oct 2016
    21 Jul 2009
    Link to this post
    Hi Eric,

    Could you please check if you have beforeInsertLink id defined in your template?
    I am not sure how and where you use it. You can also consider sending us the template, so we could take a look.

    All the best,
    Georgi
    the Telerik team

    Instantly find answers to your questions on the new Telerik Support Portal.
    Check out the tips for optimizing your support resource searches.
  13. Lee
    Lee avatar
    13 posts
    Registered:
    15 Aug 2008
    21 Sep 2010
    Link to this post
    Hi,

    we are running version 3.7.2022.220 and do not have these files in the places mentioned, i only have ItemView.ascx under Sitefinity->ControlTemplates->Libraries

    Any help would be appreciated

    Thanks

    Lee
  14. Radoslav Georgiev
    Radoslav Georgiev avatar
    3370 posts
    Registered:
    01 Feb 2016
    22 Sep 2010
    Link to this post
    Hello Lee,

    Since Sitefinity 3.6 we have made all control templates embedded. In case you need to customize them you need to download the external templates archive for your version of Sitefinity from your account and follow the steps from this KB article: How to map a view to an external template, in Sitefinity 3.6 or later?

    Sincerely yours,
    Radoslav Georgiev
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  15. Hydo L
    Hydo L avatar
    98 posts
    Registered:
    31 Mar 2010
    16 Feb 2011
    Link to this post
    Hi I am using sitefinity 3.7 SP3 and I tried to do the same as explained. I used "LibraryItemEdit" to add New custom field. and I Can upload thumbnails Now. But when I add my Download List user control to Page I am getting Following Error. Please Help me!

    Invalid resource name (Telerik.Libraries.Resources.ControlTemplates.Frontend.DownloadList.ascx) for assembly (App_Code.xowqzply, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null) or empty template.

    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.ArgumentException: Invalid resource name (Telerik.Libraries.Resources.ControlTemplates.Frontend.DownloadList.ascx) for assembly (App_Code.xowqzply, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null) or empty template.

    Source Error:

    Line 21:         {
    Line 22:             base.TableModeTemplatePath = "~/Sitefinity/ControlTemplates/Libraries/CustomDownloadList.ascx";
    Line 23:             base.CreateChildControls();
    Line 24:         }
    Line 25: 

    Source File: d:\Projects\QMA Site\Web Files\QMA\App_Code\CustomDownloadList.cs    Line: 23


    Thanks,
    Hydo
  16. Ivan Dimitrov
    Ivan Dimitrov avatar
    16072 posts
    Registered:
    25 Nov 2016
    16 Feb 2011
    Link to this post
    Hello,

    If you inherit from DownloadList override ItemListTemplatePath and set the template there.

    Best wishes,
    Ivan Dimitrov
    the Telerik team
  17. Hydo L
    Hydo L avatar
    98 posts
    Registered:
    31 Mar 2010
    16 Feb 2011
    Link to this post
    I did this. I can access the value for my thumbnail in labels and literals. if I use <asp:Image tag it brings nothing. Can you please advice.

    Thanks,
    Hydo
Register for webinar
17 posts, 0 answered