Telerik Forums
UI for ASP.NET AJAX Forum
1 answer
81 views
I am changing the chart series programmatically and the data type is not numeric it is a datetime field. How do I change this value type? here is my code so far:

(it's a switch statement)

case "HOURS":
                                  sdsProjectVideos.SelectCommand = "asGetVideosByProjectIDSortHours";
                                  RadChart1.ChartTitle.TextBlock.Text = "HOURS WATCHED";
                                  sdsProjectChart.SelectCommand = "asGetVideosByProjectIDSortHoursChart";
                                  RadChart1.Series.Clear();
                                  ChartSeries chartSeries = new ChartSeries();
                                  chartSeries.Name = "Hours Watched";
                                  chartSeries.DataYColumn = "HoursWatched";
                                  RadChart1.Series.Add(chartSeries);
                                  lblHours.Font.Underline = true;
                                  break;
Ves
Telerik team
 answered on 15 Aug 2012
5 answers
182 views

I have telerik 2011.3.1305.35 -> Q3.
In a sharepoint 2010 visual webpart I have a RadTreeView control, when some particular menu options are selected I want to open radwindow(s) which has an asp:updatepanel and within which I have another radtree,radgrid,repeator, RadAynscUpload (not all in same window).
Folowing is the code I have for this requirement:
Issues I am facing currently:
1) Every time I click on any of these menu options the page is getting refreshed and then radwindow is getting opened, Can we avoid page refresh and just simple open radwindow?
2) One of these RadWindows has RadAsyncUpload (for multiple file uploads), when I select the files to be uploaded I am getting a javascript error saying 'Syntax error' but I can see the file uploaded to the control then when I click on the Upload button my code says the uploadedfiles count is zero. I know there are web.config changes to be done for radupload is that the same case for RadAsyncUpload, can you please specify those?
I have also tried asp:fileupload (even though its not multiple upload) it is uploading the documents correctly but it is closing the radwindow even though I specified trigger for the button.
Code:



protected
void rtvDocuments_ContextMenuItemClick(object sender, RadTreeViewContextMenuEventArgs e)
        {
  
            RadTreeNode clickedNode = e.Node;
  
            switch (e.MenuItem.Value)
            {
               case "AddDoc":
                    LoadAllGroups(rtvGroupstoAddDocs);
                    RegisterStartupScript(RadWndwUploadDocs.ClientID);
                    break;
                case "AddExistingGroup":
                    LoadAllGroups(rtvAllGroups); //loads all the groups
                    RegisterStartupScript(winGroupBrowse.ClientID);
                    break;
                case "AddExistingDoc":
                    LoadAllDocuments(); //loads all docs in grid
                    RegisterStartupScript(RadWndwAllDocs.ClientID);
                    break;
                //Other Cases here
             }
  
private void RegisterStartupScript(string RadControlId)
        {
            string script = string.Empty;
            script = "function f(){$find(\"" + RadControlId + "\").show(); Sys.Application.remove_load(f);}Sys.Application.add_load(f);";
            ScriptManager.RegisterStartupScript(Page, Page.GetType(), "key", script, true);
        }
  
//If files uploaded and on upload button click, submit the documents to repeator and then upload them to SP document library.
//I tried both the control, when debugging AsyncUpload count is zero and getting "syntax error" on the page
//FileUpload uploads succesfully but closes the radWindow, but I want the window to be showing up, If this is the only solution and if RadAsyncUpload is not helpful for me.
        protected void SubmitButton_Click(object sender, System.EventArgs e)
        {
//If RadAsyncUpload is used.. I want this to be working because of multi uploads requirement.
            if (RadAsyncUpload1.UploadedFiles.Count > 0)
            {
  
                labelNoResults.Visible = false;
                Repeater1.Visible = true;
                Repeater1.DataSource = RadAsyncUpload1.UploadedFiles;
                Repeater1.DataBind();
  
                List<string> lstFileNames = new List<string>();
                foreach (UploadedFile file in RadAsyncUpload1.UploadedFiles)
                {
                    lstFileNames.Add(file.FileName);
  
                }
                //AddedControl ISODocuments to SharePoint document library
                AddDoc(lstFileNames);
  
            }
            else
            {
                labelNoResults.Visible = true;
                Repeater1.Visible = false;
            }
  
//If file upload is used.
 if (FileUpload1.PostedFile != null)
            {
                string siteUrl = SPContext.Current.Site.Url;
                using (SPSite siteColl = new SPSite(siteUrl))
                {
                    //Get SPWeb object representing a particular website
                    using (SPWeb webSite = siteColl.OpenWeb())
                    {
                        try
                        {
                            webSite.AllowUnsafeUpdates = true;
                            webSite.Lists.IncludeRootFolder = true;
                            //Get the document library in which documents will be uploaded
                            SPList docLibrary = webSite.Lists["UpLoadedDocuments"];
                            // objFileUpload is asp.net FileUpload Object
                            Stream FStream; string fname;
                            FStream = FileUpload1.PostedFile.InputStream;
                            int basenamestart = FileUpload1.PostedFile.FileName.LastIndexOf(@"\");
                            fname = FileUpload1.PostedFile.FileName.Substring(basenamestart + 1);
                            //Upload files into SharePoint document library
                            SPFile file = docLibrary.RootFolder.Files.Add(fname, FStream, true);
  
                            file.Update();
                        }
                        catch
                        { }
                    }
                }
            }
  
  
        }
<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls"
    Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Register TagPrefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages"
    Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ABC.ascx.cs"
    Inherits="X.Y.Z" %>
<%@ Register Assembly="Telerik.Web.UI, Version=2011.3.1305.35, Culture=neutral, PublicKeyToken=121fae78165ba3d4"
    Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
  
     
   <telerik:RadScriptBlock runat="Server" ID="RadScriptBlock2">
        <script type="text/javascript">
    </script>
         <script type="text/javascript" src="/_layouts/js/MyCustom.js"></script>  
    </telerik:RadScriptBlock>
  
<telerik:RadTreeView ID="rtvDocuments" runat="server" EnableDragAndDrop="True" OnNodeDrop="rtvDocuments_HandleDrop"
        OnClientNodeDropping="onDropping" OnClientNodeDragging="onNodeDragging" MultipleSelect="true"
        EnableDragAndDropBetweenNodes="true" OnNodeExpand="rtvDocuments_NodeExpand" AllowNodeEditing="true"
        OnContextMenuItemClick="rtvDocuments_ContextMenuItemClick" OnNodeEdit="rtvDocuments_NodeEdit">
        <ContextMenus>
            <telerik:RadTreeViewContextMenu CssClass="ctxTreeMenu" ID="cMenuForGroups" runat="server">
                <Items>
                    <telerik:RadMenuItem Value="Rename" Text="Rename ..." Enabled="false" ImageUrl="/_layouts/Img/Outlook/rename.gif"
                        PostBack="false">
                    </telerik:RadMenuItem>
                    <telerik:RadMenuItem Value="NewFolder" Text="New Group"  ImageUrl="/_layouts/Img/Outlook/12.gif">
                    </telerik:RadMenuItem>
                    <telerik:RadMenuItem Value="AddDoc" Text="Add New Document" ImageUrl="/_layouts/Img/Outlook/journal.gif">
                    </telerik:RadMenuItem>
                    <telerik:RadMenuItem Value="Delete" Text="Delete Group" ImageUrl="/_layouts/Img/Outlook/7.gif">
                    </telerik:RadMenuItem>
                    <telerik:RadMenuItem IsSeparator="true">
                    </telerik:RadMenuItem>
                    <telerik:RadMenuItem Value="Copy" Text="Clone ..." ImageUrl="/_layouts/Img/Outlook/10.gif">
                    </telerik:RadMenuItem>
                    <telerik:RadMenuItem Value="AddExistingGroup" Text="Add Existing Group">
                    </telerik:RadMenuItem>
                    <telerik:RadMenuItem Value="AddExistingDoc" Text="Add Existing Document">
                    </telerik:RadMenuItem>
                    <telerik:RadMenuItem Value="ViewAll" Text="View all Instances of ..." ImageUrl="/_layouts/Img/Outlook/searchFolder.gif">
                    </telerik:RadMenuItem>
                </Items>
                <CollapseAnimation Type="OutBack" />
            </telerik:RadTreeViewContextMenu>
</ContextMenus>
    </telerik:RadTreeView>
  <telerik:RadWindow ID="winGroupBrowse" runat="server"  EnableViewState="false"  Modal="true" Overlay="true" Width="875px" Height="545px"
     EnableShadow="true" DestroyOnClose="true" ShowContentDuringLoad="false" ReloadOnShow="true">
    <ContentTemplate>
           <div id="globalTree" class="globalTreeCont">
                <asp:UpdatePanel ID="pnlTree" Visible="true" runat="server">
                <ContentTemplate>
                    <telerik:RadTreeView CssClass="globalTree" OnNodeExpand="rtvDocuments_NodeExpand"
                        ID="rtvAllGroups" runat="server">
                    </telerik:RadTreeView>
                    </ContentTemplate>
                </asp:UpdatePanel>
    </ContentTemplate>
</telerik:RadWindow>
  <telerik:RadWindow ID="RadWndwAllDocs" runat="server"  EnableViewState="false"  Modal="true" Overlay="true" Width="875px" Height="545px"
     EnableShadow="true" DestroyOnClose="true" ShowContentDuringLoad="false" ReloadOnShow="true">
    <ContentTemplate>
                <asp:UpdatePanel ID="pnlGrid" Visible="true" runat="server">
                  <ContentTemplate>
                    <telerik:RadGrid ID="rgrdAllDocs" runat="server" AutoGenerateColumns="false" AllowFilteringByColumn="true"
                        AllowPaging="true" PageSize="10" AllowSorting="true" Height="100%" Width="100%">
                        <PagerStyle Mode="NextPrevAndNumeric"  />
                        <MasterTableView Height="100%" Width="100%">
                            <Columns>
                                <telerik:GridBoundColumn HeaderText="ID" DataField="ID" />
                                <telerik:GridBoundColumn HeaderText="Title" DataField="Title" />
                                <telerik:GridBoundColumn HeaderText="Description" DataField="Description" />
                                <telerik:GridBoundColumn HeaderText="ISOGroups" DataField="ISOGroupText" />
                            </Columns>
                        </MasterTableView>
                    </telerik:RadGrid>
                      </ContentTemplate>
                </asp:UpdatePanel>
                    </ContentTemplate>
</telerik:RadWindow>
  <telerik:RadWindow ID="RadWndwUploadDocs" runat="server"  EnableViewState="false"  Modal="true" Overlay="true" Width="875px" Height="545px"
     EnableShadow="true" DestroyOnClose="true" ShowContentDuringLoad="false" ReloadOnShow="true">
    <ContentTemplate>
               <asp:UpdatePanel ID="pnlUpload" Visible="true" runat="server" UpdateMode="conditional">
                                           <%-- If file upload is used instead of radAsyncUpload UNCOMMENT the trigger
                                             <Triggers>
                                               <asp:PostBackTrigger ControlID="SubmitButton" />
                                              </Triggers> --%>
                   <ContentTemplate>
                    <div class="grid grid_18 wizardMargin">
                    <div id="uploadCont">
                            <div class="columns">
                                <div class="col1">
                                    <h4>
                                        Groups on Page</h4>
                                    <div class="treeCont">
                             <telerik:RadTreeView CssClass="globalTree" OnNodeExpand="rtvDocuments_NodeExpand"
                        ID="rtvGroupstoAddDocs" runat="server"></telerik:RadTreeView>
                                    </div>
                                </div>
                                <div class="col2">
                                    <h4>
                                        Uploaded Files</h4>
                                    <div class="fileTree">
                                        <asp:Label ID="labelNoResults" runat="server" Visible="True">No uploaded files</asp:Label>
                                        <asp:Repeater runat="server" ID="Repeater1">
                                            <ItemTemplate>
                                                <div class="fileListStyle">
                                                    <%# DataBinder.Eval(Container.DataItem, "FileName").ToString() %>  (<%# DataBinder.Eval(Container.DataItem, "ContentLength").ToString() %>bytes)<br />
                                                </div>
                                            </ItemTemplate>
                                        </asp:Repeater>
                                    </div>
                                </div>
                            </div>
                            <div class="uploadControls">
                                <h4>
                                    Select Files to Upload</h4>
                                <div class="FileDetails">
                                    <table class="uploadTable">
                                        <tbody>
                                            <tr>
                                                <td class="uploader">                                                
                                             <telerik:RadAsyncUpload runat="server" ID="AsyncUpload1" Skin="default">
                                                </telerik:RadAsyncUpload>
                                              
                                             //Tried asp fileupload, it is uploading files to document library and closing the radwindow.I donot want it to close it.
                                          //       <asp:FileUpload ID="FileUpload1" runat="server"  />
                                                    <asp:Button runat="server" ID="SubmitButton" Text="Upload files" OnClick="SubmitButton_Click" />  
                                           
                                                </td>
                                            </tr>
                                        </tbody>
                                    </table>
                                </div>
                            </div>
                        </div>
                         </div>
                   </ContentTemplate>
                </asp:UpdatePanel>
      </ContentTemplate>
   </telerik:RadWindow>

Any help is appreciated.

Plamen
Telerik team
 answered on 15 Aug 2012
1 answer
62 views
Hi,

I have an issue.
Can we hide the december month from thse.
see the attache image and code

here we setting the MultiViewRows based on  a calculation.

some times the fourth month data(available date) will be none and user cannot view the foirth month

is this possible..in schduler_PreRender event?

please reply me urg

 

 

protected void schduler_PreRender(object sender, EventArgs e)

 

{

 

RadCalendar popupCalendar = schduler.FindControl("SelectedDateCalendar") as RadCalendar;

 

popupCalendar.ShowOtherMonthsDays =

false;

 

popupCalendar.AutoPostBack =

true;

 

 

int count = GetMonthCount(lst.ToArray(), popupCalendar.SelectedDate).Count;

 

popupCalendar.MultiViewColumns = 2;

double _val = (double)count;

 

popupCalendar.MultiViewRows = (

int)Math.Round(_val/2);

 

 

 

 

 

popupCalendar.FocusedDate = lst[0];

popupCalendar.DayRender +=

new Telerik.Web.UI.Calendar.DayRenderEventHandler(popupCalendar_DayRender);

 

}

 

Maria Ilieva
Telerik team
 answered on 15 Aug 2012
11 answers
307 views
I did the same as on demo example. But I have no more place in header to display all filters. How I can put Date ranges one below the other?
berto
Top achievements
Rank 1
 answered on 15 Aug 2012
3 answers
169 views
Hello,

I am using "telerik reporting q1 2012". I am using Telerik.Reporting.Table and dynamically try to hide them. But it leave space when export to pdf. I have also try to put it in Panel. But the same issue. Please help me on this.

Regards,
Kunal
IvanY
Telerik team
 answered on 15 Aug 2012
1 answer
68 views
I have a RadDatePicker control on my page.

<telerik:RadDatePicker ID="rdDate" runat="server" ShowPopupOnFocus="true" ZIndex="30001"
            DateInput-DateFormat="MM/dd/yyyy" Width="100" TabIndex="1">
            <DateInput runat="server" ID="DateInput2" ClientEvents-OnBlur="CloseDatePopup">
            </DateInput>
            <DatePopupButton TabIndex="1" />
        </telerik:RadDatePicker>

In code behind, I am selecting the date like this
rdDate.SelectedDate = Convert.ToDateTime("08/08/2012");

I have screenshot of how it looks on page load and after I move my mouse over the RadDatePicker control.

Please suggest how I can fix this.

I am using
Telerik.Web.UI.dll (version 2012.1.215.35)
Telerik.Web.UI.Skins.dll (version 2012.1.215.35)
Milena
Telerik team
 answered on 15 Aug 2012
4 answers
213 views
Using a radgrid with AllowFilteringByColumn="true" I get this error:
“Invalid Column Name …”.

The SQL request used for data binding is :
SELECT myName AS [Another name] FROM TEST

So, I think the problem is the alias, but I don’t know how to solve it.

Could anyone help me, please?
Evelyne Schreiner
Top achievements
Rank 1
 answered on 15 Aug 2012
1 answer
166 views
Hi,

I have two raddatepicker columns as follows:
<telerik:GridTemplateColumn DataField="ItinDate" HeaderText="FromDate"  UniqueName="Date">
                                                <EditItemTemplate>
                                                    <telerik:RadDatePicker ID="ItinDateRadDatePicker" runat="server" Skin="Outlook"
                                                        DatePopupButton-TabIndex="-1" DbSelectedDate='<%# Bind("ItinDate") %>'  >
                                                     <ClientEvents OnDateSelected="CheckFromDate"  />
                                                    </telerik:RadDatePicker>
                                                   <asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ForeColor="Red"
                                                        ControlToValidate="ItinDateRadDatePicker" ErrorMessage="Invalid Date"
                                                        ValidationGroup="ItineraryGrid"></asp:RequiredFieldValidator>
                                                     
                                                </EditItemTemplate>
                                                
                                                <ItemTemplate>
                                                    <asp:Label ID="ItinDateLabel" runat="server"
                                                        Text='<%# Eval("ItinDate", "{0:MM/dd/yyyy}") %>'></asp:Label>
                                                    &nbsp;
                                                </ItemTemplate>
                                            </telerik:GridTemplateColumn>
                                             <telerik:GridTemplateColumn DataField="ItinToDate" HeaderText="ToDate"  UniqueName="ToDate">
                                                <EditItemTemplate>
                                                    <telerik:RadDatePicker ID="ItinToDateRadDatePicker" runat="server" Skin="Outlook"
                                                        DatePopupButton-TabIndex="-1" DbSelectedDate='<%# Bind("ItinToDate") %>' >
                                                         <ClientEvents OnDateSelected="CheckToDate"  />
                                                         
                                                    </telerik:RadDatePicker>
                                                   <asp:RequiredFieldValidator ID="RequiredFieldValidator40" runat="server" ForeColor="Red"
                                                        ControlToValidate="ItinToDateRadDatePicker" ErrorMessage="Invalid Date"
                                                        ValidationGroup="ItineraryGrid"></asp:RequiredFieldValidator>
                                                  
                                                </EditItemTemplate>
                                                <ItemTemplate>
                                                    <asp:Label ID="ItinDateToLabel" runat="server"
                                                        Text='<%# Eval("ItinToDate", "{0:MM/dd/yyyy}") %>'></asp:Label>
                                                    &nbsp;
                                                </ItemTemplate>
                                            </telerik:GridTemplateColumn>

I have CheckFromDate and CheckToDate javascript functions to validate these dates against the trip begin and end dates on my form.
My javascript code is as follows:

 function CheckFromDate(sender, args) {
        try {
            var itinStartDtInput = $("#ctl00_MainContent_ItineraryGrid_ctl00_ctl02_ctl03_ItinDateRadDatePicker_dateInput_text");
            var tripStartDt = $("#ctl00_MainContent_TripStartDate_dateInput_text").val();
            var parsedStartDate = Date.parse(tripStartDt);
            //StartDt = parsedStartDate.getMonth() + 1 + "/" + parsedStartDate.getDate() + "/" + parsedStartDate.getYear();
            //alert("Start Date " + StartDt);

            var tripEndDt = $("#ctl00_MainContent_TripEndDate_dateInput_text").val();
            var parsedEndDate = Date.parse(tripEndDt);

            var ItinFromDt = args.get_newValue();
            var parsedItinFromDate = Date.parse(ItinFromDt);
            // alert("ItinFromDate " + ItinFromDt);

            if (parsedItinFromDate < parsedStartDate || parsedItinFromDate > parsedEndDate) {
                alert("Itinerary from date has to be between trip begin and end dates");
                args.IsValid = false;
                //return false;
                //args.set_cancel(true);
                window.setTimeout(function () { itinStartDtInput.select(); }, 20);
 
            }
            
        }
        catch (ex) {
            alert(ex);

        }
       
    }

    //// Check for Itinerary to date to be between trip begin and end dates
    function CheckToDate(sender, args) {
        try {
            var itinEndDtInput = $("#ctl00_MainContent_ItineraryGrid_ctl00_ctl02_ctl03_ItinToDateRadDatePicker_dateInput_text");
            var tripStartDt = $("#ctl00_MainContent_TripStartDate_dateInput_text").val();
            var parsedStartDate = Date.parse(tripStartDt);
            //StartDt = parsedStartDate.getMonth() + 1 + "/" + parsedStartDate.getDate() + "/" + parsedStartDate.getYear();
            //alert("Start Date " + StartDt);

            var tripEndDt = $("#ctl00_MainContent_TripEndDate_dateInput_text").val();
            var parsedEndDate = Date.parse(tripEndDt);

            var ItinToDt = args.get_newValue();
            var parsedItinToDate = Date.parse(ItinToDt);
            // alert("ItinFromDate " + ItinFromDt);

            if (parsedItinToDate < parsedStartDate || parsedItinToDate > parsedEndDate) {
                alert("Itinerary to date has to be between trip begin and end dates");
                //args.IsValid = false;
                //return false;
                //args.set_cancel(true);
                window.setTimeout(function () { itinEndDtInput.select(); }, 20);
            }

        }
        catch (ex) {
            alert(ex);
        }
    }

My problem is when user input the ItinDate, it runs the CheckFromDate validation and then the hits ok on the popup alert message, and can tab through to the next field, even if the date entered is not between the trip begin and end dates. How do I ensure that the user enters a valid date (which is between the tripbegin and end dates) before they tab to the next field on the grid?

Thanks, Janaki
Galin
Telerik team
 answered on 15 Aug 2012
3 answers
160 views
I have a question. Is it possible to use JSON to query a web service and return a RadListViewItem (or preferably an array of them) to then append to the current listview on the page without a postback or lengthy ajax call? I have watched a few of the demos on how to use JSON and a web service but it didn't entirely help (new to JSON). Anyways, I am essentially making a commenting system and I want people to be able to load comments on demand and post new comments without experiencing a somewhat lengthy AJAX call using the panels or postingback completely. Right now when someone ads a new comment it actives the radajax components of the panel to make the call. It isn't terrible but I want something a little faster and seemless for the user. Let me know if something like this would work and if so, where I might start (specifically how to handle the return):

User wants to view more comments:

On page load (load top 30 results)
click "more" button and use JSON to get an array of RadListViewItems and append them to the current list view at the bottom (everything is ordered by date).

User wants to post:
Use JSON to write post to database (I can do this)
get the new record and return it as a RadListViewItem.

Thanks for all of your help guys.
Tsvetoslav
Telerik team
 answered on 15 Aug 2012
5 answers
447 views

 

hi
i have a standard grid with a series of columns in it i.e GridDropDownColumn, GridBoundColumn etc.
i want to know if there is a way of making the column a required field and validate it as such.
i know you can do it with a template column , but i dont want to have to create template columns for all the fields that require validation , there must be a simpler way to make a column a required field.
just to clarify this is for the insert/edit modes of the grid i need to validate the fields for.

thanks for your input on this.
Radoslav
Telerik team
 answered on 15 Aug 2012
Narrow your results
Selected tags
Tags
+? more
Top users last month
Will
Top achievements
Rank 2
Iron
Motti
Top achievements
Rank 1
Iron
Hester
Top achievements
Rank 1
Iron
Bob
Top achievements
Rank 3
Iron
Iron
Veteran
Thomas
Top achievements
Rank 2
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Will
Top achievements
Rank 2
Iron
Motti
Top achievements
Rank 1
Iron
Hester
Top achievements
Rank 1
Iron
Bob
Top achievements
Rank 3
Iron
Iron
Veteran
Thomas
Top achievements
Rank 2
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?