Telerik Forums
UI for ASP.NET AJAX Forum
3 answers
182 views
Hi all.  I've been looking through the Dynamic Docks example and was wondering whether there were a way to add docks and zones exclusively through client-side script?

What I'm ultimately trying to do (and trying to decide if we can leverage the RadDock and zone controls for this) is to have a series of docks on the screen in a single zone, with each dock acting as a container for a zone and other docks... in this case, the container docks are Categories and the child docks are Items within those categories.  The items should be sortable within a category, and draggable to other categories.  The categories themselves should be sortable as well.

I have a simple example with some pre-defined category and item docks working as a proof-of-concept to show that we could have nested docks this way.  But I would then need to allow a user the ability client-side to create new categories and items as well.  Can we mimic a $create(Telerik.Web.UI.RadDoc...) call within a client button's onclick event or otherwise create the new docks/zones from javascript?
Stephen Austin
Top achievements
Rank 1
 answered on 11 Sep 2009
3 answers
225 views
I have a large website I support that is using the RadGrid's filtering functionality. Everything works perfectly minus one issue - I have a skin file defined on the site that applies a default style to all buttons. It appears the RadGrid filtering options menu (where you can select Contains, Does Not Contain, etc) is using standard buttons, but unfortunately the style I have is overriding the image icon that is normally there so I just get a blank button. Changing the button style from the skin to manual CSS classes on every page would be a huge undertaking. Is there any way I can access this button and give it a specific skin so it will ignore the CSS class being used everywhere else?

Side question: it looks like the filtering options (Contains, etc) are Enum's but their default ToString() names are utilized so options are like DoesNotContain and such. Why wouldn't these be formatted to have spaces in them (i.e. "Does Not Contain")?
digitall
Top achievements
Rank 1
 answered on 11 Sep 2009
1 answer
99 views
Hi,

Day, week, month and timeline are all fine views.

But if users just want a list of actually appointments, and not all those "empty days" - what view should he use?

I suggest an "Appointment view" where the scheduler transform into a Grid like construction with paging, filter and view appointment functionality.

Then it would be easy and fast to find those appointments you know are there.

Another nice "add-on" would be to highlight those days containing appointments(inside the drop down calendar).

Maybe the functionality are already there, I just haven't found it.

It's a beautiful component and fast when using doubleclick - but "a bit" slow when pressing "More" for that modal window. At first I was not sure if I clicked "More" - now I learned to just wait for a good thing :-)

Regards,
Hessner
Peter
Telerik team
 answered on 11 Sep 2009
5 answers
424 views
Hi, Its my first time to use radscheduler so I've been checking out sample but seems like I cant find any that uses sql database as its datasource. I already have a schedule creator using other pages, this is like subject or course scheduling. Data is already existing on the database which has data range, time range, subject, teacher, # of students, etc. . What I wanted is to make radscheduler as view only. but if you click on a schedule it will popup the details. Also I want to disable/hide the delete when you rollover the schedule.

If there are samples or documentation that would help start up my project it would be highly appreciated.

Im using ASP.NET AJAX Q1 2009

Thanks in advance,

Rj
RJ
Top achievements
Rank 1
 answered on 11 Sep 2009
4 answers
220 views
When disabling embedded scripts for the telerik controls and including the script reference paths manually, javascript errors occur and sometimes controls are got getting rendered correctly.

We are adding following javascripts manually in the same sequence:

~/scripts/Common/Core.js
~/scripts/Common/Animation/AnimationScripts.js
~/scripts/Common/Navigation/NavigationScripts.js
~/scripts/Common/Scrolling/ScrollingScripts.js
~/scripts/Common/PopUp/PopUpScripts.js
~/scripts/ComboBox/RadComboBoxScripts.js
~/scripts/Grid/RadGridScripts.js
~/scripts/Menu/RadMenuScripts.js
~/scripts/Editor/RadEditor.js
~/scripts/Dialogs/DialogOpener.js
~/scripts/Editor/Modules.js
~/scripts/Spell/SpellCheckService.js
~/scripts/Editor/AjaxSpellCheck.js
~/scripts/Window/RadWindow.js
~/scripts/ToolBar/RadToolBarScripts.js
~/scripts/Splitter/RadSplitter.js
~/scripts/Splitter/SplitterItem.js
~/scripts/Splitter/SplitterPaneBase.js
~/scripts/Splitter/RadPane.js
~/scripts/Splitter/RadSlidingPane.js
~/scripts/Splitter/RadSlidingZone.js
~/scripts/Splitter/RadSplitBar.js
~/scripts/TreeView/RadTreeViewScripts.js

On a particular page, we are using RadMenu, RadToolbar, RadSplitter, RadGrid, RadEditor and RadComboBox controls. While loading a page, we get javascript error - "Sys.ArgumentException:  does not derive from Sys.Component. Parameter name: type". Also, RadSplitter is not getting rendered on the page. However, RadMenu and RadToolbar are getting rendered correctly.

Other pages, where we are using RadEditor and/or RadComboBox, there is no error. Everything works fine.

We suspect some javascript files are missing for splitter or sequence is not correct. Please suggest.

Note that we are using RadControls for ASPNET AJAX Q2 2008.

Thanks,
Bhavin

Bhavin
Top achievements
Rank 1
 answered on 11 Sep 2009
16 answers
255 views
I've just installed the VSE with no apparent problems.

I then upgraded my machine to install SP2 of the AJAX controls.

Firing up my project and running Telerik|Install Wizard reported, correctly, that the solution was currently usinging an old version (SP1, to be precise) and I opted to upgrade.

The machine clicked and wrrred a bit and I got an error about a file no being accessible. I believe the file was "en-US.tdf" but I may be misremembering. I clicked OK, the only option, and was returned to my project.

Checking the "bin" directory it appears that the correct DLL is in place so I compiled the thing and tried to run it. I got an error saying that it couldn't load the Telerik.Web.UI.DLL, but it was looking for the previously installed version. A quick edit of the web.config file fixed that problem.

So, 2 questions:
  1. Should I worry about the inaccessible file?
  2. Why doesn't the upgrade wizard upgrade the entry in web.config.

Enquiring minds need to know...

--
Stuart
Andrey
Telerik team
 answered on 11 Sep 2009
2 answers
99 views
Hello,

How could I populate a custom attributes from a List(of Object)? Let's say that I have an class rComboItem with 3 public properties: Name, Key & Type. After populating a List(of rComboItem), I want to set the Name to the DataTextField property, Key to DataValueField, and Type to Attributes("Type"). Is it possible? Thanks in advance.

Tri
Tri Nguyen
Top achievements
Rank 1
 answered on 11 Sep 2009
5 answers
194 views
I have a RadGrid that is on a .ascx webUserControl. In that radgrid I have defined another webusercontrol that I want to use as the editor form the when the user clicks "edit" on a row in the grid.

Because I want to display validator messages on the popup form, I coded the onclick events for the insert and update buttons as such:

         <asp:Button ID="btnUpdate" Text="Update" runat="server" CommandName="Update"
            Visible='<%# !(DataItem is Telerik.Web.UI.GridInsertionObject) %>' 
            OnClick="btnUpdate_Click" TabIndex="6" ></asp:Button> 
         <asp:Button ID="btnInsert" Text="Insert" runat="server" CommandName="PerformInsert" 
            Visible='<%# DataItem is Telerik.Web.UI.GridInsertionObject %>' OnClick="btnInsert_Click" 
            TabIndex="7"></asp:Button> 
         &nbsp; 
         <asp:Button ID="btnCancel" Text="Cancel" runat="server" CausesValidation="False" 
            CommandName="Cancel" TabIndex="8"></asp:Button> 
 

I have several issues related to this for processing when the user clicks insert or update:

1. messages caught on the server side are not displaying on the popup form. (e.g. foreigh key violations, etc)
2. i cannot figure out how to exit the form if the user successfully enters the data.

Here is the full ascx for this control...

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ProposalPartDetails.ascx.cs" 
   Inherits="UserControls_ProposalPartDetails" %> 
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %> 
<table id="Table1" cellspacing="1" cellpadding="1" border="0" width="600px"> 
   <tr> 
      <td colspan="2" align="center"> 
         <asp:ValidationSummary ID="ValidationSummary" runat="server" Font-Bold="true" DisplayMode="BulletList" /> 
         <asp:Label ID="Message" runat="server"></asp:Label> 
         <asp:CustomValidator ID="GeneralValidator" runat="server" Display="Dynamic" /> 
      </td> 
   </tr> 
   <tr> 
      <td> 
         Part Number: 
      </td> 
      <td class="style1"> 
         <telerik:RadTextBox ID="PartNumber" Text='<%# Bind("PartNumber") %>' runat="server" 
            EmptyMessage="Enter a Part Number" TabIndex="1" MaxLength="21" Width="222px" SelectionOnFocus="SelectAll"> 
         </telerik:RadTextBox> 
         <asp:RequiredFieldValidator ID="PartNumberValidator" runat="server" ControlToValidate="PartNumber" 
            Display="Dynamic" Text="Please enter a part number" /> 
      </td> 
   </tr> 
   <tr> 
      <td> 
         Part Description: 
      </td> 
      <td class="style1"> 
         <telerik:RadTextBox ID="Description" Text='<%# Bind("Description") %>' runat="server" Width="222px" EmptyMessage="Enter a Part Description" 
            TabIndex="2" MaxLength="35" SelectionOnFocus="SelectAll"> 
         </telerik:RadTextBox> 
         <asp:RequiredFieldValidator ID="DescriptionValidator" runat="server" ControlToValidate="Description" 
            Display="Dynamic" Text="please enter a description" /> 
      </td> 
   </tr> 
   <tr> 
      <td> 
         Part Type 
      </td> 
      <td class="style1"> 
         <telerik:RadComboBox ID="PartType" runat="server" SelectedValue='<%# Bind("PartType") %>' 
            EmptyMessage="Select a Part Type" Height="200px" Width="300px" TabIndex="3" AllowCustomText="true" 
            MarkFirstMatch="true"> 
         </telerik:RadComboBox> 
         <asp:RequiredFieldValidator ID="PartTypeValidator" Text="please select a part type" 
            runat="server" ControlToValidate="PartType" /> 
      </td> 
   </tr> 
   <tr> 
      <td> 
         UOM 
      </td> 
      <td class="style1"> 
         <telerik:RadComboBox ID="UnitOfMeasure" runat="server" SelectedValue='<%# Bind("UnitOfMeasure") %>' 
            EmptyMessage="Select a Unit of Measure" Height="200px" Width="400px" TabIndex="4" 
            AllowCustomText="true" MarkFirstMatch="true"> 
         </telerik:RadComboBox> 
         <asp:RequiredFieldValidator ID="UnitOfMeasureValidator" Text="please select a unit of measure" 
            runat="server" ControlToValidate="UnitOfMeasure" /> 
      </td> 
   </tr> 
   <tr> 
      <td> 
         Comm Code 
      </td> 
      <td class="style1"> 
         <telerik:RadComboBox ID="CommodityCode" runat="server" SelectedValue='<%# Bind("CommodityCode") %>' 
            EmptyMessage="Select a Commodity Code" Height="200px" Width="400px" TabIndex="5" 
            AllowCustomText="true" MarkFirstMatch="true"> 
         </telerik:RadComboBox> 
         <asp:CustomValidator ID="CommodityCodeValidator" runat="server" /> 
      </td> 
   </tr> 
   <tr> 
      <td align="right" colspan="2"> 
         <asp:Button ID="btnUpdate" Text="Update" runat="server" CommandName="Update" Visible='<%# !(DataItem is Telerik.Web.UI.GridInsertionObject) %>' 
            OnClick="btnUpdate_Click" TabIndex="6" ></asp:Button> 
         <asp:Button ID="btnInsert" Text="Insert" runat="server" CommandName="PerformInsert" 
            Visible='<%# DataItem is Telerik.Web.UI.GridInsertionObject %>' OnClick="btnInsert_Click" 
            TabIndex="7"></asp:Button> 
         &nbsp; 
         <asp:Button ID="btnCancel" Text="Cancel" runat="server" CausesValidation="False" 
            CommandName="Cancel" TabIndex="8"></asp:Button> 
      </td> 
   </tr> 
   <tr> 
      <td colspan="2"> 
         <asp:TextBox ID="ProposalPartId" Text='<%# Bind("Id") %>' runat="server" Visible="false" 
            TabIndex="8" /> 
      </td> 
   </tr> 
</table> 
 

Here is the full code-behind for the popup control

using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Web.UI; 
using Harris.Common.ModelStateWrapper_ASPNET; 
using Harris.Project.Mammoth.Domain; 
using Harris.Project.Mammoth.ServiceManager; 
using Telerik.Web.UI; 
 
public partial class UserControls_ProposalPartDetails : UserControl 
{ 
    private object _dataItem; 
 
    protected void Page_Load(object sender, EventArgs e) 
    { 
        PartNumber.Focus(); 
 
        //if (!Page.IsPostBack) 
        //{ 
        //    LoadListBoxes(); 
        //} 
    } 
    #region Web Form Designer generated code 
    override protected void OnInit(EventArgs e) 
    { 
        // 
        // CODEGEN: This call is required by the ASP.NET Web Form Designer. 
        // 
        InitializeComponent(); 
        base.OnInit(e); 
    } 
 
    /// <summary> 
    ///        Required method for Designer support - do not modify 
    ///        the contents of this method with the code editor. 
    /// </summary> 
    private void InitializeComponent() 
    { 
 
        this.DataBinding += new System.EventHandler(this.ProposalPartDetails_DataBinding); 
 
    } 
    #endregion 
 
    public object DataItem 
    { 
        get 
        { 
            return _dataItem; 
        } 
        set 
        { 
            _dataItem = value; 
        } 
    } 
 
    protected void ProposalPartDetails_DataBinding(object sender, EventArgs e) 
    { 
        LoadListBoxes(); 
    } 
 
    private void LoadListBoxes() 
    { 
        Common.SessionWrapper sessionStateWrapper = new Common.SessionWrapper(); 
 
        // populate the part type list 
        var pts = sessionStateWrapper.GetPartTypeListBoxEntries(); 
        PartType.DataSource = pts; 
        PartType.DataTextField = PartTypeConstants.DescriptionFieldname; 
        PartType.DataValueField = PartTypeConstants.CodeFieldname; 
        //PartType pt = (PartType)DataItem; 
        //string originalPartType = (string.IsNullOrEmpty(Session["originalPartType"].ToString())) ? string.Empty : Session["originalPartType"].ToString(); 
        //PartType.SelectedValue = IsPartTypeInList(pt.Code, pts) ? pt.Code : originalPartType; 
        PartType.DataBind(); 
 
        // populate the uom list 
        var uoms = sessionStateWrapper.GetUnitOfMeasureListBoxEntries(); 
        UnitOfMeasure.DataSource = uoms; 
        UnitOfMeasure.DataTextField = UnitOfMeasureConstants.DescriptionFieldname; 
        UnitOfMeasure.DataValueField = UnitOfMeasureConstants.CodeFieldname; 
        UnitOfMeasure.DataBind(); 
        object value = DataBinder.Eval(DataItem, ProposalPartConstants.UnitOfMeasureFieldname); 
        if (value == DBNull.Value) 
        { 
            UnitOfMeasure.SelectedValue = "EA"; 
        } 
 
        // populate the commodity code list 
        var commCodes = sessionStateWrapper.GetCommodityCodeListBoxEntries(); 
        CommodityCode.DataSource = commCodes; 
        CommodityCode.DataTextField = CommodityCodeConstants.DescriptionFieldname; 
        CommodityCode.DataValueField = CommodityCodeConstants.CodeFieldname; 
        CommodityCode.DataBind(); 
    } 
 
    private bool IsPartTypeInList(string code, IList<PartType> partTypes) 
    { 
        code = code.Trim().ToUpper(); 
 
        foreach (var partType in partTypes) 
        { 
            if (code == partType.Code) 
            { 
                return true; 
            } 
        } 
 
        return false; 
    } 
 
    protected void btnUpdate_Click(object sender, EventArgs e) 
    { 
        Message.Text = string.Empty; 
 
        string unitOfMeasure = UnitOfMeasure.SelectedValue; 
        string partType = PartType.SelectedValue; 
 
        // this section handles when the user enters a value not in the list (client side validator does not kick in) 
        Common propCode = new Common(Session, Request); 
        var modelStateWrapper = new ModelStateWrapper(propCode.GetDictionary()); 
        if (string.IsNullOrEmpty(partType)) 
        { 
            modelStateWrapper.AddError(ProposalPartConstants.PartTypeFieldname, "Please select a part type from the list."); 
        } 
 
        if (string.IsNullOrEmpty(unitOfMeasure)) 
        { 
            modelStateWrapper.AddError(ProposalPartConstants.UnitOfMeasureFieldname, "Please select a unit of measure from the list."); 
        } 
 
        if (modelStateWrapper.GetErrors().Count > 0) 
        { 
            AddErrorsToForm(modelStateWrapper); 
            return; 
        } 
 
        string partNumber = PartNumber.Text.Trim().ToUpper(); 
        string description = Description.Text.Trim().ToUpper(); 
        string commCode = CommodityCode.SelectedValue; 
 
        const char delim = '-'; 
        string sDelim = delim.ToString(); 
        if (unitOfMeasure.Contains(sDelim)) unitOfMeasure = unitOfMeasure.Split(delim)[0].Trim(); 
        if (partType.Contains(sDelim)) partType = partType.Split(delim)[0].Trim(); 
        if (commCode.Contains(sDelim)) commCode = commCode.Split(delim)[0].Trim(); 
 
        // get part from db 
        string sPartId = ProposalPartId.Text.Trim().ToUpper(); 
        long partId = Convert.ToInt64(sPartId); 
        var proposalPartService = new ProposalPartService(modelStateWrapper); 
        var myPart = proposalPartService.GetProposalPart(partId); 
 
        // save part to db 
        myPart.PartNumber = partNumber; 
        myPart.Description = description; 
        myPart.PartType = partType; 
        myPart.UnitOfMeasure = unitOfMeasure; 
        myPart.CommodityCode = commCode; 
        bool result = proposalPartService.EditProposalPart(myPart); 
 
        // add error messages to the form 
        if (result == false) 
        { 
            modelStateWrapper = (ModelStateWrapper)proposalPartService.GetModelStateWrapper(); 
            AddErrorsToForm(modelStateWrapper); 
        } 
    } 
 
    protected void btnInsert_Click(object sender, EventArgs e) 
    { 
        Message.Text = string.Empty; 
 
        string partNumber = PartNumber.Text; 
        string description = Description.Text; 
        string unitOfMeasure = UnitOfMeasure.Text; 
        string partType = PartType.SelectedValue; 
        string commCode = CommodityCode.Text; 
 
        const char delim = '-'; 
        string sDelim = delim.ToString(); 
        if (unitOfMeasure.Contains(sDelim)) unitOfMeasure = unitOfMeasure.Split(delim)[0].Trim(); 
        if (partType.Contains(sDelim)) partType = partType.Split(delim)[0].Trim(); 
        if (commCode.Contains(sDelim)) commCode = commCode.Split(delim)[0].Trim(); 
 
        // get proposal service object 
        Common propCode = new Common(Session, Request); 
        var _modelStateWrapper = new ModelStateWrapper(propCode.GetDictionary()); 
        var _proposalPartService = new ProposalPartService(_modelStateWrapper); 
 
        // save it now 
        var partId = propCode.GetCurrentProposalId(); 
        var proposalPart = new ProposalPart(partId, partNumber, description, unitOfMeasure, partType, commCode); 
        bool result = _proposalPartService.CreateProposalPart(proposalPart); 
 
        // add messages to the form 
        if (result == false) 
        { 
            var msw = _proposalPartService.GetModelStateWrapper(); 
            AddErrorsToForm(msw); 
        } 
        else 
        { 
            Message.Text = "Part " + partNumber + " saved.<br />You may continue adding parts.<br />Click Cancel to exit the form."; 
        } 
    } 
 
    private void AddErrorsToForm(IModelStateWrapper msw) 
    { 
        foreach (var error in msw.GetErrors()) 
        { 
            switch (error.Key) 
            { 
                case ProposalPartConstants.PartNumberFieldname: 
                    PartNumberValidator.ErrorMessage = error.Value; 
                    break; 
                case ProposalPartConstants.DescriptionFieldname: 
                    DescriptionValidator.ErrorMessage = error.Value; 
                    break; 
                case ProposalPartConstants.PartTypeFieldname: 
                    PartTypeValidator.ErrorMessage = error.Value; 
                    break; 
                case ProposalPartConstants.UnitOfMeasureFieldname: 
                    UnitOfMeasureValidator.ErrorMessage = error.Value; 
                    break; 
                case ProposalPartConstants.CommodityCodeFieldname: 
                    CommodityCodeValidator.ErrorMessage = error.Value; 
                    break; 
                default: 
                    GeneralValidator.ErrorMessage = error.Value; 
                    break; 
            } 
        } 
    } 
} 
 

Can you help me figure out how to get these two items to behave the way I want to to?

thanks,

- John
Pavlina
Telerik team
 answered on 11 Sep 2009
1 answer
72 views
I have strange error,
Sometimes,  my tabstrip doesn't appears and instead, I see something like this : "ls" and small cubes.
Do you have an ideé ? After, I update the page, it works very well.
Do you have an idea ?

Thank you in advance,



  
Paul
Telerik team
 answered on 11 Sep 2009
1 answer
144 views
Hi,

I have a strange situation where working splines or lines in RadChart gives me the following error on Mono:
(It works fine on IIS7)

Invalid parameter passed. Number of points and types must be same.

Description: HTTP 500. Error processing request.

Stack Trace:

System.ArgumentException: Invalid parameter passed. Number of points and types must be same.  at System.Drawing.Drawing2D.GraphicsPath..ctor (System.Drawing.PointF[] pts, System.Byte[] types, FillMode fillMode) [0x00000]   at System.Drawing.Drawing2D.GraphicsPath..ctor (System.Drawing.PointF[] pts, System.Byte[] types) [0x00000]   at (wrapper remoting-invoke-with-check) System.Drawing.Drawing2D.GraphicsPath:.ctor (System.Drawing.PointF[],byte[])  at Telerik.Charting.RenderEngine.DrawLines (Telerik.Charting.ChartSeries series, Int32 index, System.Drawing.PointF[] points) [0x00000]   at Telerik.Charting.RenderEngine.RenderLineSeries (Telerik.Charting.ChartSeries series, Int32 index) [0x00000]   at Telerik.Charting.RenderEngine.Render (Telerik.Charting.ChartSeries series, Int32 index) [0x00000]   at Telerik.Charting.RenderEngine.RenderPlotAreaElements (Boolean withGrid, Boolean withTicks) [0x00000]   at Telerik.Charting.RenderEngine.Render (IContainer element) [0x00000]   at Telerik.Charting.RenderEngine.Render (Boolean shouldClone) [0x00000]   at Telerik.Charting.Chart.GetImage (Int32 width, Int32 height) [0x00000] 

Version information: Mono Version: 2.0.50727.1433; ASP.NET Version: 2.0.50727.1433


My code is as follows:

ChartSeries chartSeries; 
radChart.Series.Clear(); 
 
radChart.PlotArea.XAxis.Clear(); 
radChart.PlotArea.XAxis.AutoScale = false; 
radChart.PlotArea.XAxis.LayoutMode = ChartAxisLayoutMode.Between; 
radChart.PlotArea.XAxis.Appearance.LabelAppearance.RotationAngle = 270; 
radChart.PlotArea.Appearance.Dimensions.Margins.Bottom = Telerik.Charting.Styles.Unit.Percentage(20); 
radChart.PlotArea.XAxis.Appearance.LabelAppearance.Position.AlignedPosition = Telerik.Charting.Styles.AlignedPositions.Top; 
 
radChart.PlotArea.YAxis.IsLogarithmic = true; 
 
 
chartSeries = new ChartSeries("test", ChartSeriesType.Spline); 
radChart.Series.Add(chartSeries); 
 
ChartSeriesItem chartSeriesItem = new ChartSeriesItem(12); 
chartSeries.Items.Add(chartSeriesItem); 
 
chartSeriesItem = new ChartSeriesItem(43); 
chartSeries.Items.Add(chartSeriesItem); 
 
chartSeriesItem = new ChartSeriesItem(65); 
chartSeries.Items.Add(chartSeriesItem); 


Anyone have any ideas?

Thanks,
Konrad
Giuseppe
Telerik team
 answered on 11 Sep 2009
Narrow your results
Selected tags
Tags
+? more
Top users last month
Tien
Top achievements
Rank 1
Iron
Krasimir
Top achievements
Rank 3
Bronze
Iron
Iron
Cedar
Top achievements
Rank 1
Iron
Emil
Top achievements
Rank 1
Iron
Kyle Watson
Top achievements
Rank 1
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Tien
Top achievements
Rank 1
Iron
Krasimir
Top achievements
Rank 3
Bronze
Iron
Iron
Cedar
Top achievements
Rank 1
Iron
Emil
Top achievements
Rank 1
Iron
Kyle Watson
Top achievements
Rank 1
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?