Telerik Forums
UI for ASP.NET AJAX Forum
1 answer
102 views
Hi:

We have a RadWindow in our application that does some very sophisticated logic in the code behind. Generally we need to use the RadWindow to obtain certain preliminary information before we can invoke this logic.

But now we've come up with a situation where we want to invoke the logic directly without actually showing the RadWindow. The logic will ultimately open yet another window (to display a Word document) and, in this situation, the 'Word Document' window is the only window that we want to see.

Is there a way to do this using the code in the Radwindow code-behind?

Thanks for your suggestions.  
Svetlina Anati
Telerik team
 answered on 17 Feb 2010
10 answers
352 views
Ok everyone, I am sort of at your mercy here... I have spent several hours debugging trying to figure out why the manager aren't working and it seems to all point to that the new dialogs are expecting return strings in different formats.  Here is the background on the application environment.

The admin application that contains the editor is in a different directory / application than the public website where the content is rendered. The images and flash folders are sub folders of the public site and there is a third securedocuments folder that sits outside of the publicwwwroot.  These files are streamed using a httphandler.

Directory Structure:
    - Drive:\SolutionFolder
                                        -\adminwwwroot
                                        -\publicwwwroot
                                        -\publicwwwroot\Images
                                        -\publicwwwroot\Flash
                                        -\publicwwwroot\Documents

                                                                -\publicwwwroot
                                        -\securedocuments

URL Structure:
    - http://www.publicdomain.com/
                                                    /Images
                                                    /Flash
                                                    /Documents
                                                    /SecureDocuments.ashx?path=file.ext
    - http://adminsubdomain.publicdomain.com/
                                                                         /RadEditor.aspx?updatepage=1

I have worked with the code and got the files to list and new directories to create and delete.  But upload / rename files are still not working... I haven't tried saving an image using the image editor yet.

I will provide you the customcontentprovider code and the filesystem code that supplies the directory and url structure as seen above.  Here are my exact issues and what solutions I would like to see:
    1.) Rename File - Call Stack Shows RenameFile function being called in the RadFileExplorer class in the Telerik.web.ui.dll
             What changed? Why? Fixes?
    2.) Upload File - This is the highest priority for me to get fixed.  The StoreFile function doesn't even fire anymore.  I can't get the break point to work anymore after the upgrade.....

With all of the bugs in this new RadFileExplorer I would prefer to use the old managers if possible... Not sure how to do that... any help would be appreciated.  Thanks in advance!

New FileHandler Code (Partially Working):
Public Class ContentEditorProvider 
            Inherits FileBrowserContentProvider 
            Private _LoadDirectory As String 
            Private _ImgDirectory As String 
            Private _DocumentsDirectory As String 
            Private _SecureDocumentsDirectory As String 
            Private _FullPermissions As PathPermissions = PathPermissions.Read Or PathPermissions.Delete Or PathPermissions.Upload 
            Public Sub New(ByVal context As HttpContext, ByVal searchPatterns As String(), ByVal viewPaths As String(), ByVal uploadPaths As String(), ByVal deletePaths As String(), ByVal selectedUrl As String, ByVal selectedItemTag As String) 
                MyBase.New(context, searchPatterns, viewPaths, uploadPaths, deletePaths, selectedUrl, selectedItemTag) 
            End Sub 
            Public Overloads Overrides ReadOnly Property CanCreateDirectory() As Boolean 
                Get 
                    Return True 
                End Get 
            End Property 
            Public Overrides Function CreateDirectory(ByVal path As String, ByVal name As String) As String 
                Dim RealPath As String = IO.FileSystem.ResolveDirectory(path) 
                Directory.CreateDirectory(RealPath & "\" & name) 
                Return path & name 
            End Function 
            Public Overrides Function DeleteDirectory(ByVal path As String) As String 
                DeleteDirectory = IO.FileSystem.ResolveDirectory(path) 
                If Directory.Exists(DeleteDirectory) Then Directory.Delete(DeleteDirectory, True) 
                DeleteDirectory = String.Empty 
                Return DeleteDirectory 
            End Function 
            Public Overrides Function DeleteFile(ByVal path As String) As String 
                DeleteFile = IO.FileSystem.ResolveDirectory(path) 
                If File.Exists(DeleteFile) Then File.Delete(DeleteFile) 
                DeleteFile = String.Empty 
                Return DeleteFile 
            End Function 
            Public Overrides Function GetFile(ByVal url As String) As System.IO.Stream 
                Dim RealPath As String = IO.FileSystem.ResolveURL(url) 
                If System.IO.File.Exists(RealPath) = True Then 
                    Dim File As Byte() = System.IO.File.ReadAllBytes(RealPath) 
                    GetFile = New MemoryStream(File) 
                Else 
                    GetFile = Nothing 
                End If 
                Return GetFile 
            End Function 
            Private Function GetName(ByVal path As String) As String 
                GetName = IIf(path = Nothing, String.Empty, path.Substring(path.LastIndexOf("\"c) + 1)) 
                Return GetName 
            End Function 
            Public Overrides Function GetFileName(ByVal url As String) As String 
                GetFileName = IIf(url = Nothing, String.Empty, url.Substring(url.LastIndexOf("/"c) + 1)) 
                Return GetFileName 
            End Function 
            Public Overrides Function GetPath(ByVal url As String) As String 
                GetPath = IO.FileSystem.ResolveURL(url) 
                Return GetPath 
            End Function 
            Public Function LoadFiles(ByVal Dir As System.IO.DirectoryInfo) As FileItem() 
                Dim xFiles As New List(Of FileItem) 
                For Each Fil As FileInfo In Dir.GetFiles() 
                    Dim RealPath As String = Fil.FullName 
                    Dim VirtualPath As String = IO.FileSystem.TranslateDirectory(RealPath) 
                    Dim VirtualURL As String = IO.FileSystem.TranslateURL(RealPath) 
                    xFiles.Add(New FileItem(Fil.Name, Fil.Extension, Fil.Length, VirtualPath, VirtualURL, VirtualPath, _FullPermissions)) 
                Next 
                Return xFiles.ToArray 
            End Function 
            Public Function LoadDirectories(ByVal Dir As System.IO.DirectoryInfo) As DirectoryItem() 
                Dim xDir As New List(Of DirectoryItem) 
                For Each SubDir As DirectoryInfo In Dir.GetDirectories() 
                    Dim RealPath As String = SubDir.FullName 
                    Dim VirtualPath As String = IO.FileSystem.TranslateDirectory(RealPath) 
                    xDir.Add(New DirectoryItem(SubDir.Name, VirtualPath, VirtualPath, VirtualPath, _FullPermissions, LoadFiles(SubDir), LoadDirectories(SubDir))) 
                Next 
                Return xDir.ToArray 
            End Function 
            Public Overrides Function ResolveDirectory(ByVal path As String) As Telerik.Web.UI.Widgets.DirectoryItem 
                Dim RealPath As String = IO.FileSystem.ResolveDirectory(path) 
                Dim VirtualPath As String = IO.FileSystem.TranslateDirectory(RealPath) 
                Dim DirInfo As New DirectoryInfo(RealPath) 
                ResolveDirectory = New DirectoryItem(DirInfo.Name, VirtualPath, VirtualPath, IO.FileSystem.TranslateURL(VirtualPath), _FullPermissions, LoadFiles(DirInfo), LoadDirectories(DirInfo)) 
                Return ResolveDirectory 
            End Function 
            Public Overrides Function ResolveRootDirectoryAsList(ByVal path As String) As Telerik.Web.UI.Widgets.DirectoryItem() 
                If path.StartsWith("/") = True Then path = IO.FileSystem.ResolveDirectory(path) 
                Dim RealPath As String = IO.FileSystem.ProcessDirectory(path) 
                Dim DirInfo As New DirectoryInfo(RealPath) 
                ResolveRootDirectoryAsList = LoadDirectories(DirInfo) 
                Return ResolveRootDirectoryAsList 
            End Function 
            Public Overrides Function ResolveRootDirectoryAsTree(ByVal path As String) As Telerik.Web.UI.Widgets.DirectoryItem 
                If path.StartsWith("/") = True Then path = IO.FileSystem.ResolveDirectory(path) 
                Dim RealPath As String = IO.FileSystem.ProcessDirectory(path) 
                Dim VirtualPath As String = IO.FileSystem.TranslateDirectory(RealPath) 
                Dim DirInfo As New DirectoryInfo(RealPath) 
                'HttpContext.Current.Response.Write(path & " - " & RealPath & " - " & VirtualPath) 
                'HttpContext.Current.Response.End() 
                ResolveRootDirectoryAsTree = New DirectoryItem(DirInfo.Name, VirtualPath, VirtualPath, VirtualPath, _FullPermissions, LoadFiles(DirInfo), LoadDirectories(DirInfo)) 
                Return ResolveRootDirectoryAsTree 
            End Function 
            Public Overrides Function StoreBitmap(ByVal bitmap As System.Drawing.Bitmap, ByVal url As String, ByVal format As System.Drawing.Imaging.ImageFormat) As String 
                Dim RealPath As String = IO.FileSystem.ResolveURL(url) 
                Dim newItemPath As String = IO.FileSystem.ResolveURL(url) 
                Dim name As String = GetName(newItemPath) 
                Dim _path As String = GetPath(newItemPath) 
                Dim tempFilePath As String = Path.GetTempFileName() 
                bitmap.Save(tempFilePath) 
                Dim content As Byte() 
                Using inputStream As FileStream = File.OpenRead(tempFilePath) 
                    Dim size As Long = inputStream.Length 
                    content = New Byte(size) {} 
                    inputStream.Read(content, 0, CType(size, Integer)) 
                End Using 
                If File.Exists(tempFilePath) Then 
                    File.Delete(tempFilePath) 
                End If 
                File.WriteAllBytes(RealPath, content) 
                Return url                 
            End Function 
            Public Overloads Overrides Function StoreFile(ByVal file As Telerik.Web.UI.UploadedFile, ByVal path As String, ByVal name As String, ByVal ParamArray arguments() As String) As String 
                Dim FullName As String = IO.FileSystem.ResolveDirectory(path) & "\" & name 
                file.SaveAs(FullName) 
                Return path & name 
            End Function 
        End Class 

Original FileHandlerCode (Only the changed functions) (Works with Q3 2008)

Public Overrides Function CreateDirectory(ByVal path As String, ByVal name As String) As String 
                Dim RealPath As String = IO.FileSystem.ResolveDirectory(path) 
                Directory.CreateDirectory(RealPath & "\" & name) 
                Return path & "/" & name 
            End Function 
Public Overrides Function ResolveRootDirectoryAsList(ByVal path As String) As Telerik.Web.UI.Widgets.DirectoryItem() 
                Dim RealPath As String = IO.FileSystem.ProcessDirectory(path) 
                Dim DirInfo As New DirectoryInfo(RealPath) 
                ResolveRootDirectoryAsList = LoadDirectories(DirInfo) 
                Return ResolveRootDirectoryAsList 
            End Function 
            Public Overrides Function ResolveRootDirectoryAsTree(ByVal path As String) As Telerik.Web.UI.Widgets.DirectoryItem 
                Dim RealPath As String = IO.FileSystem.ProcessDirectory(path) 
                Dim VirtualPath As String = IO.FileSystem.TranslateDirectory(RealPath) 
                Dim DirInfo As New DirectoryInfo(RealPath) 
                'HttpContext.Current.Response.Write(path & " - " & RealPath & " - " & VirtualPath) 
                'HttpContext.Current.Response.End() 
                ResolveRootDirectoryAsTree = New DirectoryItem(DirInfo.Name, VirtualPath, VirtualPath, VirtualPath, _FullPermissions, LoadFiles(DirInfo), LoadDirectories(DirInfo)) 
                Return ResolveRootDirectoryAsTree 
            End Function 

Here is the IO.FileSystem Class

Public Class FileSystem 
        Public Shared siteDomain As String = Configuration.Environment.SiteDomain 
        Public Shared siteRoot As String = Configuration.Environment.SiteRoot 
        Public Shared siteSecureDocuments As String = Configuration.Environment.SiteSecureDocuments 
        Public Shared dirRoot As String = Configuration.FileSystem.RootDirectory 
        Public Shared rgxDirRoot As String = Replace(dirRoot, "\", "\\") 
        Public Shared dirDomain As String = Configuration.FileSystem.PublicSiteDirectory 
        Public Shared rgxDirDomain As String = Replace(dirDomain, "\", "\\") 
        Public Shared dirSecureDocuments As String = Configuration.FileSystem.SecureDocumentsDirectory 
        Public Shared rgxDirSecureDocuments As String = Replace(dirSecureDocuments, "\", "\\") 
        Public Shared vfsSecureDocuments As String = Replace(siteSecureDocuments, "\", "/") 
        Public Shared Function QueryDirectory(ByVal path As String, Optional ByVal search As String = "*.*", Optional ByVal options As SearchOption = SearchOption.TopDirectoryOnly) As ListItemCollection 
            QueryDirectory = New ListItemCollection 
            Dim xDir As New DirectoryInfo(path) 
            path = Replace(path, "\", "\\") 
            For Each xFile As FileInfo In xDir.GetFiles(search, options) 
                QueryDirectory.Add(New ListItem(Replace(Regex.Replace(xFile.FullName, path, "", RegexOptions.IgnoreCase), "\", "/"))) 
            Next 
            Return QueryDirectory 
        End Function 
        Public Shared Function ProcessDirectory(ByVal path As String) As String 
            ProcessDirectory = path 
            Dim _TokenPattern As String = "\[\[(?<ConfigVar>(.)*?)\]\]" 
            Dim _RM As Match = Regex.Match(path, _TokenPattern) 
            Dim HasMatch As Boolean = False 
            HasMatch = _RM.Success 
            While HasMatch = True 
                Dim _Token As String = _RM.Groups("ConfigVar").Value 
                'System.Web.HttpContext.Current.Response.Write(_Token & "<br />") 
                _Token = Configuration.AppSettings.GetSetting(_Token) 
 
                'System.Web.HttpContext.Current.Response.Write(_Token) 
                'System.Web.HttpContext.Current.Response.End() 
                ProcessDirectory = Replace(ProcessDirectory, _RM.Value, _Token) 
                _RM = _RM.NextMatch() 
                HasMatch = _RM.Success 
            End While 
            ProcessDirectory = Replace(ProcessDirectory, "/", "\") 
            Return ProcessDirectory 
        End Function 
        Public Shared Function ResolveDirectory(ByVal path As String) As String 
            ResolveDirectory = path 
            If InStrRev(ResolveDirectory, ".") > InStrRev(ResolveDirectory, "/") Then 
                ResolveDirectory = Left(ResolveDirectory, InStrRev(ResolveDirectory, "/")) 
            End If 
            If ResolveDirectory.StartsWith(dirRoot) = False Then 
                If ResolveDirectory.StartsWith(vfsSecureDocuments) = True Then 
                    ResolveDirectory = Regex.Replace(ResolveDirectory, vfsSecureDocuments, dirRoot & dirSecureDocuments, RegexOptions.IgnoreCase) 
                    ResolveDirectory = Replace(ResolveDirectory, "/", "\") 
                Else 
                    ResolveDirectory = dirRoot & dirDomain & ResolveDirectory 
                    ResolveDirectory = Replace(ResolveDirectory, "/", "\") 
                End If 
            End If 
            Return ResolveDirectory 
        End Function 
        Public Shared Function ResolveURL(ByVal Url As String) As String 
            If siteRoot.Length > 0 Then siteRoot = Left(siteRoot, siteRoot.Length - 1) 
            ResolveURL = Url 
            ResolveURL = Regex.Replace(ResolveURL, siteDomain & siteRoot, String.Empty, RegexOptions.IgnoreCase) 
            ResolveURL = ResolveDirectory(ResolveURL) 
            Return ResolveURL 
        End Function 
        Public Shared Function TranslateURL(ByVal path As String) As String 
            Dim strSiteRoot As String = siteRoot 
            If strSiteRoot.Length > 0 Then siteRoot = Left(strSiteRoot, siteRoot.Length - 1) 
            path = Regex.Replace(path, rgxDirRoot, "", RegexOptions.IgnoreCase) 
            path = Regex.Replace(path, rgxDirSecureDocuments, siteDomain & siteSecureDocuments, RegexOptions.IgnoreCase) 
            path = Regex.Replace(path, rgxDirDomain, siteDomain & strSiteRoot, RegexOptions.IgnoreCase) 
            path = Replace(path, "\", "/") 
            TranslateURL = path 
            Return TranslateURL 
        End Function 
        Public Shared Function TranslateDirectory(ByVal path As String) As String 
            path = Regex.Replace(path, rgxDirRoot, "", RegexOptions.IgnoreCase) 
            path = Regex.Replace(path, rgxDirDomain, "", RegexOptions.IgnoreCase) 
            path = Regex.Replace(path, rgxDirSecureDocuments, vfsSecureDocuments, RegexOptions.IgnoreCase) 
            path = Replace(path, "\", "/") 
            TranslateDirectory = path 
            Return TranslateDirectory 
        End Function 
    End Class 




Fiko
Telerik team
 answered on 17 Feb 2010
0 answers
54 views
Hi,
 How can I show the Inline Insert Form of scheduler when I drop an Item from DataGrid to Scheduler?
Prajeesh Prabhakar
Top achievements
Rank 1
 asked on 17 Feb 2010
1 answer
58 views
Hello!
I have a problem.
In form telerik:RadGrid. And popupmenu is not displayed in FireFox browser. But in Internet Explorer popup menu is displayed!!!
Please help me!
Dimo
Telerik team
 answered on 17 Feb 2010
1 answer
326 views
I can't find any examples for this, we have Q3 2009 on our environment, I know you guys mentioned that this will be done in 'future' versions, does this version have this feature? I have 2 columns on my combobox using the headertemplate/itemtemplate. Is it possible to sort the items under each column by clicking on the header? Some code examples would be appreciated. Thanks.
Shinu
Top achievements
Rank 2
 answered on 17 Feb 2010
1 answer
97 views
Hope someone can help

I have a single RadDockZone with two RadDock's called Admin and Content.

On initial page load I dynamically load a user control into the Admin dock area and this control has a number of buttons on it labelled with various functions such as 'Categories', 'Companies' etc.

What I want to happen is if a button is pressed a user control that is related to that button is dynamically created and added to the controls collection of the content dock control. However, I would like it to do this without a full page postback.

Is this possible and if so can anyone tell me how to do it?

One other caveat is that the content user controls have there own RadAjaxPanels etc. on which may spoil things.

Thanks for any help.

Paul
Pero
Telerik team
 answered on 17 Feb 2010
1 answer
102 views
Hi, I am exporting a RadGrid to PDF. Everything works great.

I now want to add an href URL link into the PDF but outside of the grid. Is this possible?

My preference would be just below the Page Title.

Thanks,

Scott
Daniel
Telerik team
 answered on 17 Feb 2010
3 answers
277 views

Hi all

I have a problem with a paging RadListView with ToolTips on every Item, embedded in a UserControl.
On the first page, everything look well and works like expected (mouse over a thumbnail picture opens a tooltip with a bigger image).
On all other pages, the tooltip does not appear.
i compared the html source code of both pages and both pages are identical.

i tried to do it like in the online example: what's wrong?

<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server"> 
    <AjaxSettings> 
        <telerik:AjaxSetting AjaxControlID="RadListViewTissue"> 
            <UpdatedControls> 
                <telerik:AjaxUpdatedControl ControlID="RadListViewTissue" LoadingPanelID="RadAjaxLoadingPanel1" /> 
                <telerik:AjaxUpdatedControl ControlID="RadToolTipManager1" LoadingPanelID="RadAjaxLoadingPanel1" /> 
            </UpdatedControls> 
        </telerik:AjaxSetting> 
    </AjaxSettings> 
</telerik:RadAjaxManager> 
 
<telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" > 
</telerik:RadAjaxLoadingPanel> 
 
<telerik:RadToolTipManager ID="RadToolTipManager1" OffsetY="0" HideEvent="LeaveToolTip"  
    Width="400px" Height="170px" runat="server"  
    OnAjaxUpdate="OnAjaxUpdate" RelativeTo="Element"  ShowDelay="500"  
    Animation="Fade" Sticky="True"> 
</telerik:RadToolTipManager> 
 
<telerik:RadFormDecorator ID="RadFormDecorator1" Runat="server"  /> 
 
<telerik:RadListView ID="RadListViewTissue" runat="server"  
    onitemdatabound="RadListViewTissue_ItemDataBound" DataKeyNames="contentID"  
    ItemPlaceholderID="TissueItemContainer"  
    onselectedindexchanged="RadListViewTissue_SelectedIndexChanged" 
    AllowPaging="true" onneeddatasource="RadListViewTissue_NeedDataSource"  
    onpageindexchanged="RadListViewTissue_PageIndexChanged"  > 

        protected void Page_Load(object sender, EventArgs e) 
        { 
            if (!Page.IsPostBack) 
            { 
                RadListViewTissue.DataSource = getTissueList(); 
                RadListViewTissue.DataBind(); 
            } 
        } 
 
        protected DataTable getTissueList() 
        { 
// .. 
            DataTable dtTissue = (DataTable)Session[bufferedTissueList]; 
// .. 
            return dtTissue; 
        } 
 
        protected void RadListViewTissue_PageIndexChanged(object sender, RadListViewPageChangedEventArgs e) 
        { 
            if (e.CommandName == "Sort" || e.CommandName == "Page") 
            { 
                RadToolTipManager1.TargetControls.Clear(); 
            }  
            RadListViewTissue.CurrentPageIndex = e.NewPageIndex; 
            RadListViewTissue.DataSource = getTissueList(); 
            RadListViewTissue.DataBind(); 
 
        } 
 
        protected void RadListViewTissue_NeedDataSource(object sender, RadListViewNeedDataSourceEventArgs e) 
        { 
            RadListViewTissue.DataSource = getTissueList(); 
        } 
 
        protected void OnAjaxUpdate(object sender, ToolTipUpdateEventArgs args) 
        { 
            this.UpdateToolTip(args.Value, args.UpdatePanel); 
        } 
 
        private void UpdateToolTip(string elementID, UpdatePanel panel) 
        { 
            Control ctrl = Page.LoadControl("~/Modules/IWC_FabricDetail.ascx"); 
            panel.ContentTemplateContainer.Controls.Add(ctrl); 
            IWC_FabricDetail details = (IWC_FabricDetail)ctrl; 
            details.ContentID = elementID; 
        } 
 
        protected void RadListViewTissue_ItemDataBound(object sender, RadListViewItemEventArgs e) 
        { 
            if (e.Item.ItemType == RadListViewItemType.DataItem || e.Item.ItemType == RadListViewItemType.AlternatingItem) 
            { 
                Control target = e.Item.FindControl("thumbImage"); 
                if (!Object.Equals(target, null)) 
                { 
                    if (!Object.Equals(this.RadToolTipManager1, null)) 
                    { 
                        // add to tooltip manager 
                        string keyValue = (e.Item as RadListViewDataItem).GetDataKeyValue("contentID").ToString(); 
                        this.RadToolTipManager1.TargetControls.Add(target.ClientID, keyValue, true); 
                    } 
                } 
            } 
        } 
 
 

thanks a lot for help!

best regards
Simon
Svetlina Anati
Telerik team
 answered on 17 Feb 2010
4 answers
194 views
We have been using the RadEditor's diff engine for some time now to compare strings, and it has worked quite well for us. Recently, however, we have run into a problem where were are seeing the exception "system.outofmemoryexception was thrown" when comparing two long XML strings.

Here is how we use the diff engine:

Dim strValue1 As String  
Dim strValue2 As String  
Dim strResult As String  
Dim diff As New Diff.DiffEngine  
 
' ...code here assigns long XML strings to strvalue1 and strvalue2; srvalue1's length = 93145; strvalue2's length = 113236...  
 
strResult = diff.GetDiffs(strValue2, strValue1)  
 

Are there length limitations for the strings that can be passed to the diff engine?

Thanks,

Geoff LeBlond
Silverchair Science & Communications
Lini
Telerik team
 answered on 17 Feb 2010
3 answers
143 views
Hello,

I am testing the Full RadEditor for MOSS in list items, and it looks like it doesn't work in Internet Explorer 6 and 8 (I haven't tested with 7). More specifically the content of the RadEditor is never persisted.

However, it works fine with FireFox and Chrome.

Is anyone from Telerik aware of this issue?

Thanks in advance for your help,

Raphael.
Stanimir
Telerik team
 answered on 17 Feb 2010
Narrow your results
Selected tags
Tags
+? more
Top users last month
Jake
Top achievements
Rank 1
RBarnes
Top achievements
Rank 1
Iron
Iron
Rami
Top achievements
Rank 1
Iron
Veteran
Nathan
Top achievements
Rank 1
Kumeri
Top achievements
Rank 1
Iron
Veteran
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Jake
Top achievements
Rank 1
RBarnes
Top achievements
Rank 1
Iron
Iron
Rami
Top achievements
Rank 1
Iron
Veteran
Nathan
Top achievements
Rank 1
Kumeri
Top achievements
Rank 1
Iron
Veteran
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?