Telerik Forums
UI for ASP.NET AJAX Forum
1 answer
97 views
Hi all,

I've noticed that when moving the mouse over the radtree, there are repeated fetches of the node images. Since my node images are static once populated, is there some way to disable this behaviour and hence save on network traffic and round-trips ??

Cheers,
Daron
Atanas Korchev
Telerik team
 answered on 05 Feb 2008
4 answers
216 views
I'm trying to implement a "check all children" scenario in RadTreeView. Basically, when a user checks a parent node, all child nodes should be checked and disabled. When a parent node is unchecked, all child nodes should be unchecked and enabled.

When nodes are checked using client side code, everything seems to work fine. However, if a child node was checked when the page was loaded and only client-side code is used to uncheck it, the node is reported back to the server as being checked.

Is it possible that unchecking a node isn't successfully tracked by trackChanges() and commitChanges()?

Here's the client-side code I'm using:

function onUnitNodeChecked(sender, eventArgs){
    var node = eventArgs.get_node();
    var childNodes = node.get_nodes();
    if (childNodes.get_count() == 0) {return;}
    var tree= $find("<%= tvUnits.ClientID %>");
    tree.trackChanges();
    if (node.get_checked()){
        checkAllNodes(childNodes, true);
    } else {
        checkAllNodes(childNodes, false);
    }
    tree.commitChanges();
}

function checkAllNodes(nodes, check){
    for (var i=0; i<nodes.get_count(); i++){
        var node = nodes.getNode(i);
        if (check){
            node.set_checked(true);
            node.set_enabled(false);
        } else {
            node.set_enabled(true);
            node.set_checked(false);
        }
        checkAllNodes(node.get_nodes(), check);
    }
}

Simon
Telerik team
 answered on 05 Feb 2008
1 answer
124 views
At once point it was discussed that the RadEditor will get a client side function to help force absolute or relative links when they are inserted.  Is that still coming soon?  We need to force one or the other based on what the editor is doing.  Editing emails and blog posts require absolute links.
Thanks
Rumen
Telerik team
 answered on 05 Feb 2008
2 answers
98 views
Why the example Grid EditForm in RadWindow available in the RadControls by asp.net distribution apparently are not available in the Prometheus distribution? Is it still possible to achieve functionallity using Prometheus?

Thanks, regards

Alvaro
alvaro
Top achievements
Rank 1
 answered on 05 Feb 2008
3 answers
217 views
I am using a simple RadSplitter that shows a tree on the left, and a URL in the pane on the right. I just noticed that the page in the right pane is actually loaded twice (the Page_Load breakpoint is hit twice) every time the main page loads.

Why does the RadSplitter load panes using ContentUrl TWICE? And how do I make it load only once?

<telerik:RadSplitter id="RadSplitter1" runat="server">

<telerik:RadPane id="kv_left" runat="server" Width="200px" Height="400px">
<div>
This is a test<br />
This is a test<br />
</div>
</telerik:RadPane>

<telerik:RadSplitBar id="RadSplitbar1" runat="server" collapsemode="Forward"></telerik:RadSplitBar>

<telerik:RadPane ContentUrl="test.aspx" id="kv_right" runat="server"></telerik:RadPane>

</telerik:RadSplitter>

Svetlina Anati
Telerik team
 answered on 05 Feb 2008
1 answer
304 views
I have a web app in which a RadSchedule is used to organize events for multiple users. A user may create an event for himself (by default) and also include other users for which the event will show up. I have created a custom schedule provider that interfaces appointment and user data from my database services with the radSchedule. To allow multiple users to be selected, a user resource is added which allows multiple values in the provider.

When an appointment is inserted/edited a 'checkable' list of the available users shows up in the advanced edit form. Also, at this point debug shows that a resource has been loaded for the appointment.

However, when the user commits the change, and the provider attempts to persist the changes, the appointment object contains no resources.

Basically I just need a list of selected users (ID or names) from the advanced form to pass on to my service.

The provider:
    public class CalendarProvider : SchedulerProviderBase 
    { 
        private const string DateFormatString = "yyyy-MM-ddTHH:mmZ"; 
        private ICalendarService _calendarService; 
        private Guid _clientID; 
        private String _userName; 
        private SecurityToken _securityToken; 
 
        public CalendarProvider(Page page) 
        {           
            _calendarService = ServiceManager.Locate<ICalendarService>("calendar.service"); 
 
            _clientID = SecurityHelper.GetClientID(page); 
            _securityToken = SecurityHelper.GetUserToken(page); 
            _userName = SecurityHelper.GetUserName(page); 
        } 
 
        public override bool SupportsMultipleResourceValues 
        { 
            get 
            { 
                return true; 
            } 
        } 
 
        public override IEnumerable<Appointment> GetAppointments(RadScheduler owner) 
        { 
            List<Appointment> appointments = new List<Appointment>(); 
 
            IList<CalendarItem> items = _calendarService.FindCalendarItemsByClient(_clientID, _securityToken); 
 
            foreach (CalendarItem item in items) 
            { 
                Appointment apt = new Appointment(); 
                apt.Owner = owner; 
                apt.ID = item.CalendarItemID; 
                apt.Subject = item.Subject; 
                apt.Start = DateTime.SpecifyKind(item.StartDate, DateTimeKind.Utc); 
                apt.End = DateTime.SpecifyKind(item.EndDate, DateTimeKind.Utc); 
                apt.RecurrenceRule = item.RecurrenceRule; 
                apt.RecurrenceParentID = item.RecurrenceParentID; 
 
                if (apt.RecurrenceParentID != null) 
                { 
                    apt.RecurrenceState = RecurrenceState.Exception; 
                } 
                else if (apt.RecurrenceRule != string.Empty) 
                { 
                    apt.RecurrenceState = RecurrenceState.Master; 
                } 
 
                LoadUsers(apt); 
 
                apt.Attributes.Add("Location", item.Location); 
 
                appointments.Add(apt); 
            } 
 
            return appointments; 
        } 
 
        private void LoadUsers(Appointment apt) 
        { 
            IList<User> users = _calendarService.FindUsersByCalendarItem(new Guid(apt.ID.ToString()), _securityToken); 
 
            foreach (User u in users) 
            { 
                Resource student = apt.Owner.Resources.GetResource("User", u.UserID); 
                apt.Resources.Add(student); 
            } 
        } 
 
        public override IEnumerable<ResourceType> GetResourceTypes(RadScheduler owner) 
        { 
 
            ResourceType[] types = new ResourceType[1]; 
            types[0] = new ResourceType("User", true); 
 
            return types; 
        } 
 
        public override IEnumerable<Resource> GetResourcesByType(RadScheduler owner, string resourceType) 
        { 
            if (resourceType.Equals("User")) 
            { 
                IList<Resource> resources = new List<Resource>(); 
                IList<User> users = ServiceManager.Locate<IClientService>("client.service").FindUsersByClient(_clientID, null); 
 
                foreach (User u in users) 
                { 
                    Resource res = new Resource("User", u.UserID, u.UserName); 
 
                    resources.Add(res); 
                } 
 
                return resources; 
            } 
            else 
            { 
                throw new InvalidOperationException("Unknown resource type: " + resourceType); 
 
                return null; 
            } 
        } 
 
        public override void Insert(RadScheduler owner, Appointment aptInsert) 
        { 
            Guid? RecurrenceID = null; 
            if (aptInsert.RecurrenceParentID != null) 
            { 
                RecurrenceID = new Guid(aptInsert.RecurrenceParentID.ToString()); 
            } 
 
            Guid AptID; 
            if (aptInsert.ID != null) 
            { 
                AptID = new Guid(aptInsert.ID.ToString()); 
            } 
            else 
            { 
                AptID = Guid.NewGuid(); 
            } 
 
            string Recurrence = String.Empty; 
            if (aptInsert.RecurrenceRule != null) 
            { 
                Recurrence = aptInsert.RecurrenceRule; 
            } 
 
            try 
            { 
                CalendarItem item = new CalendarItem(AptID, RecurrenceID, aptInsert.Start, aptInsert.End,  
                                                        aptInsert.Subject, aptInsert.Attributes["Location"] , Recurrence); 
 
 
                //AT THIS POINT EVEN THOUGH USERS HAVE BEEN SELECTED, RESOURCES ARE EMPTY. 
                 
                foreach (Resource res in aptInsert.Resources.GetResourcesByType("User")) 
                { 
                    item.Resources.Add(new UserCalendarItem((Guid)res.Key, AptID)); 
                }             
 
                _calendarService.Create(item, _securityToken); 
            } 
            catch 
            { 
                //Show message: Unable to create Calendar Event. 
            } 
        } 
 
        public override void Update(RadScheduler owner, Appointment aptUpdate) 
        { 
            Guid? RecurrenceID = null; 
            if (aptUpdate.RecurrenceParentID != null) 
            { 
                RecurrenceID = new Guid(aptUpdate.RecurrenceParentID.ToString()); 
            } 
 
            Guid AptID; 
            if (aptUpdate.ID != null) 
            { 
                AptID = new Guid(aptUpdate.ID.ToString()); 
            } 
            else 
            { 
                AptID = Guid.NewGuid(); 
            } 
 
            string Recurrence = String.Empty; 
            if (aptUpdate.RecurrenceRule != null) 
            { 
                Recurrence = aptUpdate.RecurrenceRule; 
            } 
 
            try 
            { 
                CalendarItem item = new CalendarItem(AptID, RecurrenceID, aptUpdate.Start, aptUpdate.End, 
                                                        aptUpdate.Subject, aptUpdate.Attributes["Location"], Recurrence); 
 
                //AT THIS POINT EVEN THOUGH USERS HAVE BEEN SELECTED, RESOURCES ARE EMPTY. 
 
                foreach (Resource res in aptInsert.Resources.GetResourcesByType("User")) 
                { 
                    item.Resources.Add(new UserCalendarItem((Guid)res.Key, AptID)); 
                } 
                 
                _calendarService.Update(item, _securityToken); 
            } 
            catch 
            { 
                //Show message: Unable to create Calendar Event. 
            } 
        } 
 
        public override void Delete(RadScheduler owner, Appointment aptDelete) 
        { 
            _calendarService.Remove(new Guid(aptDelete.ID.ToString()), _securityToken); 
        } 
    } 


 The ASPX:
<rad3:RadScheduler runat="server" ID="RadScheduler1" Width="700px" Height="564px" 
    SelectedView="WeekView" TimeZoneOffset="03:00:00" SelectedDate="2008-02-01" DayStartTime="08:00:00" 
    DayEndTime="18:00:00" ReadOnly="false" RadControlsDir="~/App_Themes/RadControls/" 
    CustomAttributeNames="Location" EnableCustomAttributeEditing="true" StartEditingInAdvancedForm="true" 
    OnAppointmentCreated="RadScheduler_AppointmentCreated" OnAppointmentInsert="RadScheduler_AppointmentInserted" 
    Skin="Office2007" OnClientAppointmentContextMenu="appointmentContextMenu" OnClientTimeSlotContextMenu="timeSlotContextMenu"> 
    <AppointmentTemplate> 
        <asp:Label runat="server" ID="Subject" Font-Bold="true" /> 
        <br /> 
        <asp:Label runat="server" ID="Location" ForeColor="Gray" /> 
    </AppointmentTemplate> 
    <ResourceTypes> 
        <rad3:ResourceType Name="Users" AllowMultipleValues="true" /> 
    </ResourceTypes> 
</rad3:RadScheduler> 

 The code behind:
    protected void Page_Load(object sender, EventArgs e) 
    { 
        //Provide Client ID and user token 
        RadScheduler1.Provider = new CalendarProvider(this); 
 
        if (!IsPostBack) 
        { 
            RadScheduler1.SelectedView = SchedulerViewType.WeekView; 
 
            RadScheduler1.StartInFullTime = false; 
 
            RadScheduler1.TimeZoneOffset = new TimeSpan(3,0,0); 
             
            RadScheduler1.SelectedDate = System.DateTime.Now.Date; 
 
            RadCalendar1.SelectedDate = RadScheduler1.SelectedDate; 
            RadCalendar1.FocusedDate = RadScheduler1.SelectedDate; 
        } 
    } 
     
    protected override void OnPreRender(EventArgs e) 
    { 
        base.OnPreRender(e); 
 
        RadCalendar1.SelectedDate = RadScheduler1.SelectedDate; 
    } 
 
    protected void RadCalendar1_SelectionChanged(object sender, SelectedDatesEventArgs e) 
    { 
        if (RadCalendar1.SelectedDates.Count > 0) 
        { 
            RadScheduler1.SelectedDate = RadCalendar1.SelectedDate; 
        } 
    } 
 
    protected void RadScheduler_AppointmentInserted(object sender, SchedulerCancelEventArgs e) 
    { 
        //AT THIS POINT RESOURCES ARE ALSO EMPTY. 
    } 
 
    protected void OnCreateEvent(object sender, EventArgs e) 
    { 
        if (RadCalendar1.SelectedDates.Count > 0) 
        { 
            RadScheduler1.ShowAdvancedInsertForm(RadCalendar1.SelectedDates[0].Date); 
        } 
    } 
 
    protected void RadScheduler_AppointmentCreated(object sender, AppointmentCreatedEventArgs e) 
    { 
        String subject = e.Appointment.Subject; 
        if (subject != null) 
        { 
            Label label = (Label)e.Container.FindControl("Subject"); 
            label.Text = subject; 
        } 
 
        string location = e.Appointment.Attributes["Location"]; 
        if (location != null && location != string.Empty) 
        { 
            Label label = (Label)e.Container.FindControl("Location"); 
            label.Text = "Location: " + location; 
        } 
    }
T. Tsonev
Telerik team
 answered on 05 Feb 2008
1 answer
44 views
Hello,
I have added the RadEditor to a page layout for use on many of the pages for our internet site.  Will the content entered into the editor be searchable by the search in MOSS?  Thank you.
George
Telerik team
 answered on 05 Feb 2008
5 answers
190 views
Hi,

I fixe my window size into javascipt :
var oWnd=window.radopen(""EditWindowURL.aspx?1&Type=0,null);
oWnd.SetSize(200,200)
oWnd.Center()

And it's work well except if the URL we can see in status bar is longer than window width. In this case the window is resize with the "size" of URL.

thx
George
Telerik team
 answered on 05 Feb 2008
5 answers
321 views
I would like to be able to rebind a datagrid from client-side javascript using ajax technology. Can this be done? If so, do you have a sample I could follow?

Many thanks.
Steve
Telerik team
 answered on 05 Feb 2008
1 answer
430 views
I have been working on this problem all night. I can't seem to figure out what the problem is. I am trying to do a grid control just like the one you have an example for at:

http://www.telerik.com/DEMOS/ASPNET/Prometheus/Grid/Examples/Programming/WebGrid/DefaultCS.aspx

The only difference is that I am using a SqlDataSource instead of the sds:SessionDataSource that is used in the example. Also, my data is a bit different with 2 dates that need to be selected. This should not matter though. I can edit, add, and delete a single row at a time with the links on the right of the grid. If I try to edit or delete using the checkboxes and the links at the top of the control, it does not work. It just does a page refresh and its back to a cleared control.

Here is the code:



<asp:Content ID="Content1" ContentPlaceHolderID="_mainContent" Runat="Server"> 
<asp:ScriptManager ID="ScriptManager1" runat="server" /> 
        <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server"> 
            <AjaxSettings> 
                <telerik:AjaxSetting AjaxControlID="RadGrid1"> 
                    <UpdatedControls> 
                        <telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1"/> 
                    </UpdatedControls> 
                </telerik:AjaxSetting> 
            </AjaxSettings> 
        </telerik:RadAjaxManager> 
        
        <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" Height="75px" Width="75px" Transparency="50"> 
            <img alt="Loading..." src='<%= RadAjaxLoadingPanel.GetWebResourceUrl(Page, "Telerik.Web.UI.Skins.Default.Ajax.loading.gif") %>' style="border:0;" /> 
        </telerik:RadAjaxLoadingPanel> 
            
        <telerik:RadGrid ID="RadGrid1" AllowMultiRowSelection="true" AllowMultiRowEdit="true" AllowSorting="true" 
            Skin="WebBlue" runat="server" AllowAutomaticDeletes="True" AllowAutomaticInserts="True" 
            Width="97%" PageSize="14" AllowAutomaticUpdates="True" AllowPaging="True" AutoGenerateColumns="False" 
            DataSourceID="mySqlDataSourceGrid" ShowStatusBar="true" AutoGenerateEditColumn="true" AutoGenerateDeleteColumn="true"> 
            <PagerStyle Mode="Slider" /> 
            <ClientSettings> 
                <Selecting AllowRowSelect="true" /> 
            </ClientSettings> 
            <MasterTableView CommandItemDisplay="Top" DataKeyNames="eventid" DataSourceID="mySqlDataSourceGrid" 
                EditMode="EditForms" AutoGenerateColumns="False" Width="100%"> 
                <CommandItemTemplate> 
                    <div style="padding:10px 0px;">&nbsp;&nbsp; 
                    <asp:LinkButton Style="vertical-align: bottom" ID="btnEditSelected" runat="server" CommandName="EditSelected" CausesValidation="false" Visible='<%# RadGrid1.EditIndexes.Count == 0 %>'><img style="border:0px;vertical-align:middle;" alt="" src="images/Edit.gif" /> Edit Selected Events</asp:LinkButton> 
                    <asp:LinkButton ID="btnUpdateEdited" runat="server" CommandName="UpdateEdited" Visible='<%# RadGrid1.EditIndexes.Count > 0 %>'><img style="border:0px;vertical-align:middle;" alt="" src="images/Update.gif" /> Update Events</asp:LinkButton> 
                    &nbsp; 
                    <asp:LinkButton ID="btnCancel" runat="server" CommandName="CancelAll" CausesValidation="false" Visible='<%# RadGrid1.EditIndexes.Count > 0 || RadGrid1.MasterTableView.IsItemInserted %>'><img style="border:0px;vertical-align:middle;" alt="" src="images/Cancel.gif" /> Cancel editing</asp:LinkButton> 
                    &nbsp; 
                    <asp:LinkButton ID="LinkButton2" runat="server" CommandName="InitInsert" Visible='<%# !RadGrid1.MasterTableView.IsItemInserted %>'><img style="border:0px;vertical-align:middle;" alt="" src="images/AddRecord.gif" /> Add new Event</asp:LinkButton> 
                    <asp:LinkButton ID="LinkButton3" runat="server" CommandName="PerformInsert" Visible='<%# RadGrid1.MasterTableView.IsItemInserted %>'><img style="border:0px;vertical-align:middle;" alt="" src="images/Insert.gif" /> Add this Event</asp:LinkButton> 
                    &nbsp; 
<asp:LinkButton ID="LinkButton1" OnClientClick="javascript:return confirm('Delete all selected Events?')" 
runat="server" CommandName="DeleteSelected" CausesValidation="false"><img style="border:0px;vertical-align:middle;" alt="" src="images/Delete.gif" /> Delete Selected Events</asp:LinkButton> 
                    &nbsp;&nbsp;&nbsp; 
                    <asp:LinkButton ID="LinkButton4" runat="server" CommandName="RebindGrid"><img style="border:0px;vertical-align:middle;" alt="" src="images/Refresh.gif" /> Refresh Event list</asp:LinkButton> 
                    </div> 
                </CommandItemTemplate> 
                <Columns> 
                    <telerik:GridClientSelectColumn HeaderStyle-Width="40px" /> 
                    <telerik:GridBoundColumn DataField="eventid" HeaderText="ID" ReadOnly="True" SortExpression="EventID" 
                        UniqueName="EventID" Visible="false"> 
                        <HeaderStyle Width="20px" ForeColor="Silver" /> 
                        <ItemStyle ForeColor="Silver" /> 
                    </telerik:GridBoundColumn> 
                    <telerik:GridBoundColumn DataField="eventname" HeaderText="Event Name" SortExpression="eventname" 
                        UniqueName="eventname"> 
                    </telerik:GridBoundColumn> 
                    
                    <telerik:GridDateTimeColumn DataField="eventstart" HeaderText="Event Start Date" SortExpression="eventstart" UniqueName="eventstart" EditFormColumnIndex="1"> 
                    </telerik:GridDateTimeColumn> 
 
                    <telerik:GridDateTimeColumn DataField="eventend" HeaderText="Event End Date" SortExpression="eventend" UniqueName="eventend" EditFormColumnIndex="1"> 
                    </telerik:GridDateTimeColumn> 
                    
                    <telerik:GridBoundColumn DataField="eventlocation" HeaderText="Event Location" SortExpression="eventlocation" 
                        UniqueName="eventlocation"> 
                    </telerik:GridBoundColumn> 
                    
                    <telerik:GridBoundColumn DataField="eventurl" HeaderText="Event URL" SortExpression="eventurl" 
                        UniqueName="eventurl"> 
                    </telerik:GridBoundColumn> 
                </Columns> 
                
                <EditFormSettings ColumnNumber="2" CaptionDataField="EventName" CaptionFormatString="Edit properties of Event {0}"> 
                    <FormTableItemStyle Wrap="False"></FormTableItemStyle> 
                    <FormCaptionStyle CssClass="EditFormHeader"></FormCaptionStyle> 
                    <FormMainTableStyle GridLines="Horizontal" CellSpacing="0" CellPadding="3" BackColor="White" 
                        Width="100%" /> 
                    <FormTableStyle CellSpacing="0" CellPadding="2" CssClass="module" Height="110px" 
                        BackColor="White" /> 
                    <FormTableAlternatingItemStyle Wrap="False"></FormTableAlternatingItemStyle> 
                    <EditColumn ButtonType="ImageButton" 
                        UpdateImageUrl="images\Update.gif" EditImageUrl="images\Edit.gif" 
                        InsertImageUrl="images\Insert.gif" CancelImageUrl="images\Cancel.gif" 
                        InsertText="Insert Order" UpdateText="Update record" UniqueName="EditCommandColumn1" CancelText="Cancel edit"> 
                    </EditColumn> 
                    <FormTableButtonRowStyle HorizontalAlign="Right" CssClass="EditFormButtonRow"></FormTableButtonRowStyle> 
                </EditFormSettings> 
            </MasterTableView> 
        </telerik:RadGrid><br /> 
                
                <asp:SqlDataSource ID="mySqlDataSourceGrid" runat="server" 
                    datasourcemode="DataSet" 
                    ConnectionString="<%$ ConnectionStrings:xConnectionString %>" 
                    SelectCommand="SELECT * FROM [eventtb]" 
                    DeleteCommand="DELETE FROM [eventtb] WHERE [eventid] = @eventid" 
                    updatecommand="UPDATE [eventtb] SET [eventname] = @eventname, [eventstart] = @eventstart, [eventend] = @eventend, [eventlocation] = @eventlocation, [eventurl] = @eventurl WHERE eventid = @eventid" 
                    insertcommand="INSERT INTO [eventtb] (eventname, eventstart, eventend, eventlocation, eventurl) VALUES (@eventname, @eventstart, @eventend, @eventlocation, @eventurl)" 
                    FilterExpression="[eventid] = {0}"> 
                    <filterparameters> 
                        <asp:ControlParameter Name="eventid" ControlId="RadGrid1" PropertyName="SelectedValue" Type="String" /> 
                    </filterparameters> 
                    <DeleteParameters> 
                        <asp:Parameter Type="Int32" Name="eventid" /> 
                    </DeleteParameters> 
                    <UpdateParameters> 
                        <asp:Parameter Type="Int32" Name="eventid" /> 
                        <asp:Parameter Type="String" Name="eventname" /> 
                        <asp:Parameter Type="DateTime" Name="eventstart" /> 
                        <asp:Parameter Type="DateTime" Name="eventend" /> 
                        <asp:Parameter Type="String" Name="eventlocation" /> 
                        <asp:Parameter Type="String" Name="eventurl" /> 
                    </UpdateParameters> 
                    <InsertParameters> 
                        <asp:Parameter Type="Int32" Name="eventid" /> 
                        <asp:Parameter Type="String" Name="eventname" /> 
                        <asp:Parameter Type="DateTime" Name="eventstart" /> 
                        <asp:Parameter Type="DateTime" Name="eventend" /> 
                        <asp:Parameter Type="String" Name="eventlocation" /> 
                        <asp:Parameter Type="String" Name="eventurl" /> 
                    </InsertParameters> 
                </asp:SqlDataSource> 
 
 
</asp:Content> 



Any help with this would be great.

Thanks,
Patrick
Steve
Telerik team
 answered on 05 Feb 2008
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?