Telerik Forums
UI for ASP.NET AJAX Forum
3 answers
177 views
When I delete a node using the context menu the node doesn't disappear after I rebuild the list of nodes that should be displayed.

In my RadTree I have reports on the 3rd level.  I have a context menu that allows me to delete the report at that node.   The context menu handler displays a prompt (using RadConfirm).   When OK is selected from the prompt, I execute __doPostBack on an asp button.  The handler for that button is where the deletion of the report happens (and it does delete it from the database just fine) and then it calls the subroutine that rebuilds the list of reports at that level and then tries to redisplay that on the tree.  However the node with the deleted report continues to be displayed.

And in my RadAjaxManager I think I have everything covered: the tree will update the tree and the button updaqtes the tree too.

Any help on this is greatly appreciated.  Here are the relevant pieces of code:

Here is the relevant part of the context menu handler:

 

Protected Sub rtvReports_ContextMenuItemClick(ByVal sender As Object, ByVal e As Telerik.Web.UI.RadTreeViewContextMenuEventArgs)
 
    Select Case e.Node.Level
        Case 1
             'Not important to example
        Case 2
             
            Dim ReportType As String = e.Node.ParentNode.Text
            Dim ReportName As String = e.Node.Text
            Dim Logid As String = e.Node.Value
            Dim ClientID As String = Session("ClientID")
            Select Case e.MenuItem.Value
                 Case "Delete"
                    Session("CurrentReportTreeNode") = e.Node.ParentNode
                    lbDeleteReportType.Text = e.Node.ParentNode.Text
                    lbDeleteReportName.Text = e.Node.Text
                    lbDeleteLogID.Text = e.Node.Value
                     
                    RadWindowManager1.RadConfirm("Delete Report: " & lbDeleteReportName.Text, "DeleteReportcallback", 300, 100, Nothing, "Delete Report Confirmation")
 
                    Exit Select
 
            End Select
    End Select
 
End Sub

Here is the client side function DeleteReportCallBack which seems to work fine:

function DeleteReportcallback(arg) {
    if (arg == true) {
        __doPostBack("ctl00$ContentPlaceHolder1$btnDelete", "");
    }
}

Here is the asp button:

<asp:button id="btnDelete" runat="server" Text="" height=0 width="0" style="background-color:white; border-color:White; border-width:0" OnCLick="btnDelete_Click" />

Here is the button handler and the subroutine that rebuilds the nodes at that level:

Protected Sub btnDelete_Click()
    Dim ReportType As String = lbDeleteReportType.Text       
    Dim ReportName As String = lbDeleteReportName.Text
    Dim LogID As String = lbDeleteLogID.Text
    DeleteReport(LogID, ReportName, ReportType)
     
    Dim CurrentNode As RadTreeNode = Session("CurrentReportTreeNode")
    LoadReports(CurrentNode)
 
End Sub
 
 
Sub LoadReports(curnode As RadTreeNode)
    Dim ReportType As String = curnode.Text
    Dim ReportTypeParent As String = curnode.ParentNode.Text
    Dim CLientID As String = Session("ClientID")
    Dim dt As New DataTable
     
    If curnode.Nodes.Count > 0 Then
        For I As Integer = curnode.Nodes.Count - 1 To 0 Step -1
            curnode.Nodes(I).Remove()
        Next
    End If
 
    dt = BindChartNames(ReportType, CLientID) 'Gets the relevant reports from the database
     
    If dt IsNot Nothing And dt.Rows.Count > 0 Then
        dt.DefaultView.Sort = "ReportName ASC"
        For Each row As DataRow In dt.Rows
            Dim node As New RadTreeNode()
            node.Text = row("ReportName").ToString()
            node.Value = row("LogID").ToString()
            node.ContextMenuID = "ReportMenu"
 
            node.HoveredCssClass = "TreeHover"
            curnode.Nodes.Add(node)
        Next
        curnode.Expanded = True
        curnode.ExpandMode = TreeNodeExpandMode.ClientSide
    End If
End Sub

And here is the ajax manager and the tree definition (minus some context menus not pertinent to my question):

<telerik:RadAjaxManager runat="server" ID="RadAjaxManager1" >
    <AjaxSettings>
        <telerik:AjaxSetting AjaxControlID="rtvReports">
            <UpdatedControls>
                <telerik:AjaxUpdatedControl ControlID="rtvReports" LoadingPanelID="RadAjaxLoadingPanel1" />
                <telerik:AjaxUpdatedControl ControlID="pnlDetails"  />
                <telerik:AjaxUpdatedControl ControlID="RadMultiPage1" />
                <telerik:AjaxUpdatedControl ControlID="RadTabStrip1" />
                <telerik:AjaxUpdatedControl ControlID="pnlReportType" />
            </UpdatedControls>
        </telerik:AjaxSetting>
        <telerik:AjaxSetting AjaxControlID="btnOverwrite" >
            <UpdatedControls>
                <telerik:AjaxUpdatedControl ControlID="rtvReports" LoadingPanelID="RadAjaxLoadingPanel1" />
            </UpdatedControls>
        </telerik:AjaxSetting>
 
    </AjaxSettings>
</telerik:RadAjaxManager>
<telerik:RadAjaxLoadingPanel runat="server" ID="RadAjaxLoadingPanel1" Skin="Office2010Black" InitialDelayTime="400" />
 
            <telerik:RadTreeView ID="rtvReports" runat="server" OnNodeExpand="rtvReports_NodeExpand"
                OnContextMenuItemClick="rtvReports_ContextMenuItemClick" 
                Skin="Office2010Silver" OnNodeClick="rtvReports_NodeClick"
                OnPreRender="rtvReports_PreRender">
                 
                <ContextMenus>
                    <telerik:RadTreeViewContextMenu runat="server" ID="ReportMenu" ClickToOpen="True">
                        <Items>
                            <telerik:RadMenuItem Text="Edit" Value="Edit">
                            </telerik:RadMenuItem>
                            <telerik:RadMenuItem Text="Run" Value="Run">
                            </telerik:RadMenuItem>
                            <telerik:RadMenuItem Text="Schedule" Value="Schedule">
                            </telerik:RadMenuItem>
                            <telerik:RadMenuItem Text="Delete" Value="Delete">
                            </telerik:RadMenuItem>
                        </Items>
                    </telerik:RadTreeViewContextMenu>
 
 
 
                </ContextMenus>
            </telerik:RadTreeView>

One further note on this issue:  I have a Refresh function on the parent node to the reports in the context menu.  And after I delete a report node and the node is still there, I run the refresh command from the parent node and it calls the same LoadReports subroutine and it works fine.

Thanks for any help on this.

LoadReports

Hristo Valyavicharski
Telerik team
 answered on 26 Aug 2013
36 answers
320 views
Hi,

Sorry for the contentious sounding title but is this control in fact a beta?  The reason I ask is that it seems as though a lot of critical functionality is missing from it.  Such as the ability to easily setup and access the selected values.

I'd like to drop on a form and know that I can bind to a database field that contains a comma delimited list of values that should be checked.  Nope, can't do that.  I don't want to have to have an army of supplementary routines that support something that should have been included in a control.

Please advise on a time frame for this basic functionality being added.

Apologies if this is easy and can already be done but from what I see it can't be yet for a form control the easy allocation of values to and from a control should surely be the #1 priority?

Regards

Jon
Peter Filipov
Telerik team
 answered on 26 Aug 2013
3 answers
125 views
How to get file url from ImageManager, FlashManager,DocumentManager,MediaManager?

I use "OnClientCommandExecuting" event to get file url when click Insert.
Imgscript += "<script type=\"text/javascript\">";
                Imgscript += "function changeImageManager(editor, args) {";
                Imgscript += "if (args.get_commandName() == \"ImageManager\" || args.get_commandName() == \"InsertImage\"  ) {";
                Imgscript += "var callbackFunction = function (sender, args) {";
                Imgscript += "var result = args.get_value();";
                Imgscript += "$('#" + owtxt.ClientID + "').val(result.src);";
                Imgscript += "result = Telerik.Web.UI.Editor.Utils.getOuterHtml(result);";
                Imgscript += "editor.pasteHtml(result, \"ImageManager\");";
                Imgscript += "};";
                Imgscript += "args.set_callbackFunction(callbackFunction);";
                Imgscript += "}";
 So:
use: "result.src" to get Image Url. from imageManager/insertImage
What about FlashManager,DocumentManager,MediaManager?
Please tell me how to get file url?
result.movie or result.src or result.embed or another?
----
Thanks and Best regards.
Ianko
Telerik team
 answered on 26 Aug 2013
1 answer
200 views
Hi,
In Asp.net Is there any way to display Rad pie Chart look like 3D, like as in attachment.
Peshito
Telerik team
 answered on 26 Aug 2013
5 answers
98 views
Hello,
I'm trying to make a Chart change its displayed info according to what data is displayed in a RadGrid after a filter is used. Allowing for a user to view the data in 2 forms.

Example:  When first loading the page the grid contains 96 results and the chart displays the data accordingly with a total of 96 as well.  However, once a user were to use a filter (such as only wanting to see usernames that contain the letter 'z') and hits enter the grid changes to only display 3 results but the chart still displays 96 from its original view.

What is the correct way of accomplishing this task?  I've attempted several events from the grid:
- OnItemCommand()
- OnItemDataBound()

As well as Chart methods like PreRender()

I've been able to hold the required data the Chart should display in a list but it just won't refresh like the Grid does when a filter is used.
Any ideas?
Barbaros Saglamtimur
Top achievements
Rank 1
 answered on 26 Aug 2013
2 answers
133 views
I am using the predefined dialogs (radalert, radconfirm and radprompt) from the server methods RadAlert, RadConfirm and RadPrompt of the RadWindowManager.It is possible for the user to move the dialog. Is there any way to prevent the Draggable/Moving option for the server methods RadAlert, RadConfirm and RadPrompt of the RadWindowManager.
Siva
Top achievements
Rank 1
 answered on 26 Aug 2013
0 answers
88 views
Hi, I'm trying to pass a radTreeView as a parameter in an asmx web service. The web service is in another project. When I try to put the parameter into the function signature it, the web service it builds correctly but is not longer able to add or update to my main web app project. I was wondering if there was a certain way I needed to pass the object (like serializing) or a reference I'm missing? Both my project have the telerik.web.UI and skins dll. A tutorial or sample project would be great also.

Here's a simple version of a web service class I'm testing with:
namespace MCMwebservice
{` 
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
 
 
 [ScriptService]
public class Service1 : System.Web.Services.WebService
{
  [WebMethod]
    public bool getBool(RadTreeView TreeSites, string Demogs) {  //dummy method for now
        return true;
    }
   }
}

And this is the error I get, when trying to add or update the web service in my main project:

Metadata contains a reference that cannot be resolved: 'http://localhost:49304/Service1.asmx'. 
There was an error downloading 'http://localhost:49304/Service1.asmx/_vti_bin/ListData.svc/$metadata'.

The request failed with the error message:

Request format is unrecognized for URL unexpectedly ending in '/_vti_bin/ListData.svc/$metadata'.

Will
Top achievements
Rank 1
 asked on 26 Aug 2013
2 answers
161 views
Hi,

I'm learning how to update a shopping cart by clicking a button on RadGrid control.

I have a RadMenu on a Master page. One of the menu items contain the cart which I simplify to a single RadButton.
I also have RadAjaxMenager on the Master Page.

RadGrid with the button to update the cart is built dynamically on "Inventory" page linked to my Master page.

For experimenting purposes I would like to increase the number on the button placed in the cart. When I click the button on grid the button on grid should be updated but is not.

Whole concept is taken from your example:
http://demos.telerik.com/aspnet-ajax/ajax/examples/manager/partialajaxification/defaultcs.aspx

The only difference is that I'm building my grid dynamically and I think this is the cause of the problem. I have tried to implement the example using markup and it was fine...

Here is my code for the master Page

<%@ Master Language="VB" CodeFile="MasterPage.master.vb" Inherits="MasterPage" %>
 
<!DOCTYPE html>
 
<head runat="server">
    <title></title>
    <link type="text/css" href="siteStyle.css" rel="stylesheet" />
    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
</head>
<body>
    <form id="form1" runat="server">
        <telerik:RadScriptManager ID="RadScriptManager1" runat="server">
            <Scripts>
                <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.Core.js" />
                <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQuery.js" />
                <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQueryInclude.js" />
            </Scripts>
        </telerik:RadScriptManager>
        <script type="text/javascript">
            //Put your JavaScript code here.
        </script>
        <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
            <AjaxSettings>
                <telerik:AjaxSetting AjaxControlID="RadGrid1">
                    <UpdatedControls>
                        <telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1"></telerik:AjaxUpdatedControl>
                    </UpdatedControls>
                </telerik:AjaxSetting>
            </AjaxSettings>
        </telerik:RadAjaxManager>
 
        <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server">
        </telerik:RadAjaxLoadingPanel>
 
        <div id="wraper">
            <div id="header">
                <telerik:RadSkinManager ID="RadSkinManager1" runat="server" ShowChooser="True"></telerik:RadSkinManager>
            </div>
            <telerik:RadMenu ID="menu" runat="server" Width="100%" ClientIDMode="Static">
                <Items>
                    <telerik:RadMenuItem runat="server" Text="Home" NavigateUrl="~/Home.aspx">
                    </telerik:RadMenuItem>
                    <telerik:RadMenuItem runat="server" Text="Inventory" NavigateUrl="~/Inventory.aspx">
                    </telerik:RadMenuItem>
                    <telerik:RadMenuItem runat="server" Text="My Account">
                    </telerik:RadMenuItem>
                    <telerik:RadMenuItem runat="server" Text="Support" NavigateUrl="~/Support.aspx">
                        <Items>
                            <telerik:RadMenuItem runat="server" Text="FAQ">
                            </telerik:RadMenuItem>
                            <telerik:RadMenuItem runat="server" Text="Shipping">
                            </telerik:RadMenuItem>
                            <telerik:RadMenuItem runat="server" Text="Payments">
                            </telerik:RadMenuItem>
                        </Items>
                        <GroupSettings Flow="Horizontal" />
                    </telerik:RadMenuItem>
                    <telerik:RadMenuItem runat="server" Text="Cart">
                        <Items>
                            <telerik:RadMenuItem runat="server" Text="SubCart">
                                <ItemTemplate>
                                    <telerik:RadButton ID="RadButton1" runat="server" Text="1"></telerik:RadButton>
                                    <telerik:RadGrid ID="grdCartItems" runat="server"></telerik:RadGrid>
 
                                </ItemTemplate>
                            </telerik:RadMenuItem>
                        </Items>
 
                    </telerik:RadMenuItem>
                </Items>
            </telerik:RadMenu>
 
            <div style="clear: both"></div>
 
            <div id="masterContainer">
                <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
                </asp:ContentPlaceHolder>
            </div>
 
            <div id="footer"></div>
 
        </div>
    </form>
</body>
</html>

Code of the "Inventory" page linked to a master

Imports Telerik.Web.UI
Imports System.Data
 
Partial Class Inventory
    Inherits System.Web.UI.Page
    Dim grid As New RadGrid
 
 
 
    Protected Sub Page_Init(sender As Object, e As EventArgs) Handles Me.Init
        CreateGrid()
    End Sub
    Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
        If IsPostBack Then Exit Sub
        Dim grid1 As RadGrid = CType(PlaceHolder1.FindControl("RadGrid1"), RadGrid)
        Dim ajaxMenager As RadAjaxManager = Master.FindControl("RadAjaxManager1")
 
        ajaxMenager.AjaxSettings.AddAjaxSetting(grid1, grid1)
 
    End Sub
 
    Public Sub CreateGrid()
        grid = New RadGrid
 
        grid.ID = "RadGrid1"
 
        grid.Width = Unit.Percentage(100)
        grid.PageSize = 15
        grid.AllowPaging = True
        grid.PagerStyle.Mode = GridPagerMode.NextPrevAndNumeric
        grid.AutoGenerateColumns = False
        grid.ClientIDMode = UI.ClientIDMode.Static
 
        grid.MasterTableView.Width = Unit.Percentage(100)
        grid.MasterTableView.DataKeyNames = New String() {"ID"}
 
        Dim boundColumn As New GridBoundColumn()
 
        boundColumn = New GridBoundColumn()
        boundColumn.DataField = "Code"
        boundColumn.HeaderText = "Code"
        grid.MasterTableView.Columns.Add(boundColumn)
 
        Dim tableViewOrders As GridTableView
        tableViewOrders = New GridTableView(grid)
 
        tableViewOrders.Width = Unit.Percentage(100)
        boundColumn = New GridBoundColumn()
        boundColumn.DataField = "Code"
        boundColumn.HeaderText = "Code"
        tableViewOrders.Columns.Add(boundColumn)
 
        Dim toCartCollumn As New GridTemplateColumn
        toCartCollumn = New GridTemplateColumn
 
        toCartCollumn.ItemTemplate = New MyTemplate()
        toCartCollumn.UniqueName = "TemplateColumn1"
        toCartCollumn.DataField = "Code11"
        tableViewOrders.Columns.Add(toCartCollumn)
 
        grid.MasterTableView.DetailTables.Add(tableViewOrders)
 
        AddHandler grid.NeedDataSource, AddressOf RadGrid1_NeedDataSource
        AddHandler grid.DetailTableDataBind, AddressOf RadGrid1_DetailTableDataBind
        AddHandler grid.ItemCommand, AddressOf RadGrid1_ItemCommand
        AddHandler grid.ItemCreated, AddressOf RadGrid1_ItemCreated
        PlaceHolder1.Controls.Add(grid)
    End Sub
 
    Private Sub RadGrid1_DetailTableDataBind(ByVal source As Object, ByVal e As GridDetailTableDataBindEventArgs)
        Dim list As List(Of Listing) = grid.DataSource
        Dim dataItem As GridDataItem = CType(e.DetailTableView.ParentItem, GridDataItem)
        Dim id As Integer = dataItem.GetDataKeyValue("ID")
        Dim detailList = (From l In list Where l.ID = id Select l.Items).First.ToList
        e.DetailTableView.DataSource = detailList
    End Sub
 
    Public Function CreateListings(itemsCount As Integer) As List(Of Listing)
        Dim list As New List(Of Listing)
        For i = 0 To itemsCount
            list.Add(New Listing(i))
        Next
        Return list
    End Function
 
    Protected Sub RadGrid1_ItemCommand(sender As Object, e As GridCommandEventArgs)
        If e.CommandName = "AddToCart" Then
            Dim menu As RadMenu = Master.FindControl("menu")
            Dim buttonToUpdate As RadButton = menu.FindItemByText("SubCart").FindControl("RadButton1")
            buttonToUpdate.Text = CInt(buttonToUpdate.Text) + 1
        End If
    End Sub
 
    Protected Sub RadGrid1_ItemCreated(sender As Object, e As GridItemEventArgs)
        If TypeOf e.Item Is GridDataItem Then
            If e.Item.DataItem Is Nothing Then Exit Sub
            If e.Item.DataItem.GetType.Name = "ListingItem" Then
                Dim dataItem As GridDataItem = TryCast(e.Item, GridDataItem)
                Dim tc As TableCell = dataItem("TemplateColumn1")
                Dim button As Button = tc.FindControl("ibtnAddToCart")
                Dim ajaxMenager As RadAjaxManager = Master.FindControl("RadAjaxManager1")
                Dim menu As RadMenu = Master.FindControl("menu")
                Dim buttonToUpdate = menu.FindItemByText("SubCart").FindControl("RadButton1")
                ajaxMenager.AjaxSettings.AddAjaxSetting(button, buttonToUpdate)
            End If
        End If
    End Sub
 
    Protected Sub RadGrid1_NeedDataSource(sender As Object, e As GridNeedDataSourceEventArgs)
        grid.DataSource = CreateListings(15)
    End Sub
 
    Private Class MyTemplate
        Implements ITemplate
        Protected ibtnAddToCart As Button
 
        Public Sub InstantiateIn(ByVal container As System.Web.UI.Control) Implements ITemplate.InstantiateIn
            ibtnAddToCart = New Button()
            ibtnAddToCart.ID = "ibtnAddToCart"
            AddHandler ibtnAddToCart.DataBinding, AddressOf boolValue_DataBinding
            ibtnAddToCart.CommandName = "AddToCart"
            container.Controls.Add(ibtnAddToCart)
        End Sub
        Sub boolValue_DataBinding(ByVal sender As Object, ByVal e As EventArgs)
            Dim cBox As Button = DirectCast(sender, Button)
            Dim container As GridDataItem = DirectCast(cBox.NamingContainer, GridDataItem)
            Dim listingitem = DirectCast(container.DataItem, ListingItem)
            cBox.Text = listingitem.Code
        End Sub
    End Class
End Class

I also attach a screen of the sample app
jacob
Jakub
Top achievements
Rank 1
 answered on 24 Aug 2013
0 answers
168 views
I have a web service project that is referenced by another project. In the web service I have a function that I want to use to populate a telerik radTreeView. The webService builds successfully but if I try to update/add the web service to my main project I get this error:
 
Metadata contains a reference that cannot be resolved: 'http://localhost:49304/Service1.asmx'. 
There was an error downloading 'http://localhost:49304/Service1.asmx/_vti_bin/ListData.svc/$metadata'.

The request failed with the error message:

Request format is unrecognized for URL unexpectedly ending in '/_vti_bin/ListData.svc/$metadata'.

This is a simplified version of the web service class I'm writing:


namespace MCMwebservice
{` 
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
 
 
 [ScriptService]
public class Service1 : System.Web.Services.WebService
{
  [WebMethod]
    public bool getBool(RadTreeView TreeSites, string Demogs) {  //dummy method for now
        return true;
    }
}

If I remove the telerik radtreeview parameter then it will update, so I know that's the issue. The both projects have the telerik.web.ui and skins dll. Is there a certain reference or tag I need to add to my main project or in my web.config? Please Help!

thanks

Will

Will
Top achievements
Rank 1
 asked on 24 Aug 2013
15 answers
387 views
Hello,

I recently did a .Net Framework update on our production server and I'm now having problems with all controls that are doing AJAX requests. The new ASP.Net version is 4.0.30319.0.

On my computer I'm having .Net 4.0, but a lower version, and everything works fine.

Also I'm now getting some errors like this on our server : The HTTP verb POST used to access path ... is not allowed.

Here's a part of the code I'm using that fails :

<telerik:RadAjaxLoadingPanel ID="ajaxPanel" runat="server" />
<telerik:RadAjaxManager runat="server" DefaultLoadingPanelID="ajaxPanel">
    <AjaxSettings>
        <telerik:AjaxSetting AjaxControlID="gridEntreprises">
        </telerik:AjaxSetting>
        <telerik:AjaxSetting AjaxControlID="chkActifUniquement">
            <UpdatedControls>
                <telerik:AjaxUpdatedControl ControlID="gridEntreprises" LoadingPanelID="ajaxPanel" />
            </UpdatedControls>
        </telerik:AjaxSetting>
    </AjaxSettings>
</telerik:RadAjaxManager>

The server event attached to "chkActifUniquement" doesn't have any effect on the specified control (using new .Net version).
Bruce Haan
Top achievements
Rank 1
 answered on 23 Aug 2013
Narrow your results
Selected tags
Tags
+? more
Top users last month
Chester
Top achievements
Rank 1
Iron
Simon
Top achievements
Rank 1
Iron
Douglas
Top achievements
Rank 2
Iron
Iron
SUNIL
Top achievements
Rank 3
Iron
Iron
Iron
Marco
Top achievements
Rank 3
Iron
Iron
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Chester
Top achievements
Rank 1
Iron
Simon
Top achievements
Rank 1
Iron
Douglas
Top achievements
Rank 2
Iron
Iron
SUNIL
Top achievements
Rank 3
Iron
Iron
Iron
Marco
Top achievements
Rank 3
Iron
Iron
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?