Telerik Forums
UI for ASP.NET AJAX Forum
1 answer
59 views
hi
i have a button with some event in a radtooltip
how can i have tooltip still open after event >> for show some resault in it ?
here by clicking tooltip has closed
Svetlina Anati
Telerik team
 answered on 27 May 2009
4 answers
152 views
Hello,
I have the following problem - I have a dock zone with docks that have to be dragged to another zone, but they cannot be dragged back on the first zone. I use the ForbiddenZones property of the docks. After beginning dragging the dock the place holder for dropping the dock appears. The problem is that after I drop the dock on the first zone the place holder does not hide.
Here is the code of the markup:

<telerik:RadDockZone ID="RadDockZone1" runat="server" UniqueName="RadDockZone1"
    <telerik:RadDock ID="RadDock1" runat="server" Text="RadDock1" ForbiddenZones="RadDockZone1" DockMode="Docked"
    </telerik:RadDock> 
    <telerik:RadDock ID="RadDock2" runat="server" Text="RadDock2" ForbiddenZones="RadDockZone1" DockMode="Docked"
    </telerik:RadDock> 
    <telerik:RadDock ID="RadDock3" runat="server" Text="RadDock3" ForbiddenZones="RadDockZone1" DockMode="Docked"
    </telerik:RadDock> 
</telerik:RadDockZone> 
<telerik:RadDockZone ID="RadDockZone2" runat="server" UniqueName="RadDockZone2"
</telerik:RadDockZone> 

I'm not sure if I'm clear enough with my description :) Thanks in advance.
Best regards,
Ivan Pelovski
Ivan
Top achievements
Rank 1
 answered on 27 May 2009
1 answer
101 views

Dear sir,


I am creating fully customizes Dashboard.

I am creating a RadDockZones dynamically successfuly.and I want to add zones on user demand.
if user enter 1 row with 2 zones then it created 2 zones in a row if user enter 1 row with 1 zone then only single zone is added on a row.

added 2 zoned in a row and give both zone names in dropdownlist, according to selected index change user add dock ( which zone name is seleted from DDL).
I am trying but not getting i thnk missing something, will you please send me code ( but plz its fully dunamic)

accoring to my code it created 2 zones parall but dock not added parall...plz check my code and loading panel also  not working. (I am remove all ajaxing all working on buttons click)

sir plz answeing me ASAP our deadline is very very close.

our code as follows..
aspx..
<table width="100%" border="1" cellpadding="1" cellspacing="0" class="aspxMainTable">
        <tr>
            <th class="tdMainHeader1">
                <img alt="Customer" src="Images/dashboard.gif" />
                Dashboard &nbsp;&nbsp;&nbsp;
                <%--Zone Width :--%><telerik:RadTextBox ID="txtZoneWidth" runat="server" Width="150px"
                    Visible="false">
                </telerik:RadTextBox>
                &nbsp; Zone Layout
                <telerik:RadComboBox ID="cmbZoneLayout" runat="server">
                    <Items>
                        <telerik:RadComboBoxItem Text="Select" Value="" Selected="true" />
                        <telerik:RadComboBoxItem Text="1 Row 1 column" Value="1,1" />
                        <telerik:RadComboBoxItem Text="1 Row 2 Column" Value="1,2" />
                    </Items>
                </telerik:RadComboBox>
                <asp:Button ID="btnAddZone" runat="server" Text="Add Zone" OnClick="btnAddZone_Click"
                    Width="100px" />
                <%--OnClientClick="return ZoneWidthValidation();"--%>
                Objects &nbsp;
                <telerik:RadComboBox ID="cmbSelectDock" runat="server" Skin="Office2007">
                    <Items>
                        <telerik:RadComboBoxItem Text="Case Summary" Value="CaseSummary" />
                        <telerik:RadComboBoxItem Text="Task Summary" Value="TaskSummary" />
                        <telerik:RadComboBoxItem Text="Pending Tasks" Value="MyTask" />
                        <telerik:RadComboBoxItem Text="Pending Cases" Value="MyCase" />
                        <telerik:RadComboBoxItem Text="Overdue Cases" Value="OverdueCases" />
                    </Items>
                </telerik:RadComboBox>
                &nbsp;
                <telerik:RadComboBox ID="cmbZone" runat="server" Skin="Office2007">
                </telerik:RadComboBox>
                &nbsp;
                <asp:Button ID="btnAddDock" runat="server" Text="Add Dock" Width="100px" OnClick="btnAddDock_Click" /><%-- OnClientClick="return ValidateSave();"--%>
                &nbsp;
                <asp:Button ID="btnSaveDock" runat="server" Text="Save State" Width="100px" OnClick="btnSaveDock_Click" />
            </th>
        </tr>
        <tr>
            <td>
                <telerik:RadDockLayout runat="server" ID="rdDockLayout" OnSaveDockLayout="rdDockLayout_SaveDockLayout"
                    Skin="Office2007" OnLoadDockLayout="rdDockLayout_LoadDockLayout">
                </telerik:RadDockLayout>
            </td>
        </tr>
        <tr>
            <td>
                <asp:Label ID="lblMessage" runat="server"></asp:Label>
            </td>
        </tr>
    </table>

aspx.cs......
int i = 0;
    int tempID;

    string dockState = "";
    string strDockTag = string.Empty;
    string strZone = string.Empty;
    string strZoneName = string.Empty;
    string strDockTagName = string.Empty;
    string strResult = string.Empty;

    DockStateWS objDockStateWS;
    DataSet dsDataSet;
    List<DockState> stateList;
    List<string> zoneList;
    StringBuilder serializedList = new StringBuilder();
    ArrayList zones = new ArrayList();

    private List<DockState> CurrentDockStates
    {
        get
        {
            List<DockState> _currentDockStates = (List<DockState>)Session["CurrentDockStatesMyPortal"];
            if (Object.Equals(_currentDockStates, null))
            {
                _currentDockStates = new List<DockState>();
                Session["CurrentDockStatesMyPortal"] = _currentDockStates;
            }
            return _currentDockStates;
        }
        set
        {
            Session["CurrentDockStatesMyPortal"] = value;
        }
    }

    private List<string> CurrentDockZoneIds
    {
        get
        {
            List<string> _currentDockZoneIds = (List<string>)Session["CurrentDockZoneIds"];
            if (Object.Equals(_currentDockZoneIds, null))
            {
                _currentDockZoneIds = new List<string>();
                Session["CurrentDockZoneIds"] = _currentDockZoneIds;
            }
            return _currentDockZoneIds;
        }
        set
        {
            Session["CurrentDockZoneIds"] = value;
        }
    }

    protected void Page_InIt(object sender, EventArgs e)
    {
        try
        {
            objDockStateWS = new DockStateWS();
            dsDataSet = new DataSet();

            dsDataSet = objDockStateWS.Fetch_Zones(0, 2,"1");

            if (dsDataSet.Tables["DockZones"].Rows.Count > 0)
            {
                for (int i = 0; i < dsDataSet.Tables["DockZones"].Rows.Count; i++)
                {
                    strZone = Convert.ToString(dsDataSet.Tables["DockZones"].Rows[i]["zone_control_id"]);
                    strZoneName = Convert.ToString(dsDataSet.Tables["DockZones"].Rows[i]["zone_control_name"]);                  
                    CreateRadDockZone(strZone,strZoneName);
                }
            }

            for (int i = 0; i < CurrentDockStates.Count; i++)
            {
                if (CurrentDockStates[i].Closed == false)
                {
                    RadDock dock = CreateRadDockFromState(CurrentDockStates[i]);
                    rdDockLayout.Controls.Add(dock);
                    LoadWidget(dock);
                }
            }
        }
        catch (Exception ex)
        {
            LogMessage(ex, 1, "Page_InIt");
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        //--counter for RadDockZone Name
        if (Convert.ToString(ViewState["Counter"]) == "")
        {
            tempID = 0;
        }
        else
        {
            tempID++;
        }

        if (!Page.IsPostBack)
        { 
            //-- from database
            try
            {
                GetZones();
            }
            catch (Exception ex)
            {
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "errMsg", "javascript:alert(\"Error:-Method -> 'Page_Init' \\n Description:- \\n" + ex.Message + "\");", true);
                return;
            }
        }
    }

    protected void rdDockLayout_LoadDockLayout(object sender, DockLayoutEventArgs e)
    {
        bool bDocStateCreate = false;
       
        //--from database
        DataTable dt = new DataTable();       

        try
        {
            System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
            //--use session
            foreach (DockState state in CurrentDockStates)
            {
                bDocStateCreate = true;
                e.Positions[state.UniqueName] = state.DockZoneID;
                e.Indices[state.UniqueName] = state.Index;
            }

            if (bDocStateCreate == false)
            {
                objDockStateWS = new DockStateWS();
                dsDataSet = new DataSet();
                dsDataSet = objDockStateWS.Fetch_Dock_State(0, 2);

                if (dsDataSet.Tables["DockState"].Rows.Count > 0)
                {
                    dockState = Convert.ToString(dsDataSet.Tables["DockState"].Rows[0]["dock_state"]);
                    string[] currentDockStates = dockState.Split('|');
                    foreach (string stringState in currentDockStates)
                    {
                        if (stringState.Trim() != string.Empty)
                        {
                            serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
                            DockState state = serializer.Deserialize<DockState>(stringState);
                            RadDock dock = CreateRadDockFromState(state);
                            rdDockLayout.Controls.Add(dock);
                            LoadWidget(dock);
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            LogMessage(ex, 1, "rdDockLayout_LoadDockLayout");
        }
    }

    protected void rdDockLayout_SaveDockLayout(object sender, DockLayoutEventArgs e)
    {
        CurrentDockStates = rdDockLayout.GetRegisteredDocksState();
    }

    private RadDock CreateRadDockFromState(DockState state)
    {
        RadDock dock = new RadDock();
        dock.ID = string.Format("RadDock{0}", state.UniqueName);
        dock.ApplyState(state);
        dock.Command += new DockCommandEventHandler(dock_Command);
        dock.Commands.Add(new DockCloseCommand());
        dock.CommandsAutoPostBack = true;

        return dock;
    }

    void dock_Command(object sender, DockCommandEventArgs e)
    {
        if (e.Command.Name == "Close")
        {
////            ScriptManager.RegisterStartupScript
////            (
////                UpdatePanel1, this.GetType(), "RemoveDock",
////                string.Format(@"function _removeDock() {{
////                Sys.Application.remove_load(_removeDock);
////                $find('{0}').undock();
////                $get('{1}').appendChild($get('{0}'));
////                $find('{0}').doPostBack('DockPositionChanged');
////                }};
////                Sys.Application.add_load(_removeDock);", ((RadDock)sender).ClientID, UpdatePanel1.ClientID),
////                true
////             );
            ScriptManager.RegisterStartupScript
           (
               Page, this.GetType(), "RemoveDock",
               string.Format(@"function _removeDock() {{
                Sys.Application.remove_load(_removeDock);
                $find('{0}').undock();
                $get('{1}').appendChild($get('{0}'));
                $find('{0}').doPostBack('DockPositionChanged');
                }};
                Sys.Application.add_load(_removeDock);", ((RadDock)sender).ClientID, Page.ClientID),
               true
            );

        }
    }

    private RadDock CreateRadDock()
    {
        RadDock dock = new RadDock();
        dock.UniqueName = Guid.NewGuid().ToString();
        dock.ID = string.Format("RadDock{0}", dock.UniqueName);
        dock.Title = cmbSelectDock.SelectedItem.Text;
        dock.Text = string.Format("Added at {0}", DateTime.Now);
        dock.CommandsAutoPostBack = true;

        return dock;
    }

    private void CreateRadDockZone(string id, string name)
    {
        try
        {
            #region test code
            ///dynamica table           
            //if (cmbZoneLayout.SelectedValue == "1,2")
            //{             
                    RadDockZone zone1 = new RadDockZone();
                    RadDockZone zone2 = new RadDockZone();
                    if (id != null )
                    {
                        if (name == "RadDockZone0")
                            zone1.ID = id;
                        else if (name == "RadDockZone1")
                             zone2.ID = id;
                    }                   
                    else
                    {
                        zone1.UniqueName = "RadDockZone0";
                        zone1.ID = "RadDockZone0";
                        zone1.Width = Unit.Pixel(200);
                        zone1.FitDocks = true;
                        zone1.Orientation = Orientation.Horizontal;
                        zone1.Skin = "Office2007";
                        zone1.Style.Add("float", "left");
                        zone1.Style.Add("margin-right", "20px");

                        zone2.UniqueName = "RadDockZone1";
                        zone2.ID = "RadDockZone1";
                        zone2.Width = Unit.Pixel(200);
                        zone2.FitDocks = true;
                        zone2.Orientation = Orientation.Horizontal;
                        zone2.Skin = "Office2007";
                        zone2.Style.Add("float", "left");

                       
                        objDockStateWS = new DockStateWS();
                        dsDataSet = new DataSet();
                        if (zone1.ID != null)
                        {
                            dsDataSet = objDockStateWS.Save_Zone(0, 2, Convert.ToString(zone1.ID), "1", Convert.ToString(zone1.UniqueName));
                        }
                        if (zone2.ID != null)
                        {
                            dsDataSet = objDockStateWS.Save_Zone(0, 2, Convert.ToString(zone2.ID), "1", Convert.ToString(zone2.UniqueName));
                        }

                        //--if success          
                        if (dsDataSet.Tables["Response"].Rows[0]["ResultCode"].ToString() != "0")
                        {
                            strResult = dsDataSet.Tables["Response"].Rows[0]["ResultString"].ToString();
                            LogMessage(new Exception(strResult), 1, "CreateRadDockZone");
                            return;
                        }
                        else
                        {
                            RadComboBoxItem rdbItem = new RadComboBoxItem(zone1.UniqueName, zone1.ID);
                            cmbZone.Items.Insert(cmbZone.Items.Count, rdbItem);

                            RadComboBoxItem rdbItem2 = new RadComboBoxItem(zone2.UniqueName, zone2.ID);
                            cmbZone.Items.Insert(cmbZone.Items.Count, rdbItem2);
                        }
                    }
                    if (id != null)
                    {
                        if (name == "RadDockZone0")
                            rdDockLayout.Controls.Add(zone1);
                        else if (name == "RadDockZone1")
                            rdDockLayout.Controls.Add(zone2);
                    }
                    else
                    {
                        rdDockLayout.Controls.Add(zone1);
                        rdDockLayout.Controls.Add(zone2);
                    }
                   
            //}
        }
            #endregion

            #region original code
        //    RadDockZone zone1 = new RadDockZone();
        //    if (id != null)
        //    {
        //        zone1.ID = id;
        //    }
        //    else
        //    {
        //        zone1.UniqueName = "RadDockZone" + tempID;
        //        zone1.ID = "RadDockZone" + Guid.NewGuid();
        //        zone1.Width = Unit.Pixel(200);
        //        zone1.FitDocks = true;
        //        zone1.Orientation = Orientation.Horizontal;
        //        zone1.Skin = "Office2007";
        //        zone1.Style.Add("float", "left");
        //        zone1.Style.Add("margin-right", "20px");

        //        objDockStateWS = new DockStateWS();
        //        dsDataSet = new DataSet();

        //        dsDataSet = objDockStateWS.Save_Zone(0, 2, Convert.ToString(zone1.ID), "1", Convert.ToString(zone1.UniqueName));
        //        ViewState["Counter"] = tempID;

        //        //--if success          
        //        if (dsDataSet.Tables["Response"].Rows[0]["ResultCode"].ToString() != "0")
        //        {
        //            strResult = dsDataSet.Tables["Response"].Rows[0]["ResultString"].ToString();
        //            LogMessage(new Exception(strResult), 1, "CreateRadDockZone");
        //            return;
        //        }
        //        else
        //        {
        //            RadComboBoxItem rdbItem = new RadComboBoxItem(zone1.UniqueName, zone1.ID);
        //            cmbZone.Items.Insert(cmbZone.Items.Count, rdbItem);
        //        }
        //    }
        //    rdDockLayout.Controls.Add(zone1);
        //}
#endregion
        catch (Exception ex)
        {
            LogMessage(ex, 1, "CreateRadDockZone");
        }
    }

    private void LoadWidget(RadDock dock)
    {
        if (string.IsNullOrEmpty(dock.Tag))
        {
            return;
        }
        Control widget = LoadControl(dock.Tag);
        dock.ContentContainer.Controls.Add(widget);
    }

    protected void btnAddDock_Click(object sender, EventArgs e)
    {
        try
        {
            LoadUserControlsDynamically();
            RadDock dock = CreateRadDock();
            RadDockZone dz = (RadDockZone)rdDockLayout.FindControl(Convert.ToString(cmbZone.SelectedValue));
           
            dz.Controls.Add(dock);
            dock.Tag = strDockTag;
            LoadWidget(dock);
        }
        catch (Exception ex)
        {
            LogMessage(ex, 1, "btnAddDock_Click");
        }
    }

    void LogMessage(Exception e, Int32 param, string strMethodName)
    {
        if (param == 1)
        {
            lblMessage.Text = e.Message + "  Method:- " + strMethodName;
            lblMessage.CssClass = "error";
        }
        else
        {
            lblMessage.Text = e.Message;
            lblMessage.CssClass = "success";
        }
    }

    private void LoadUserControlsDynamically()
    {
        string strControlID = string.Empty;

        if (cmbSelectDock.SelectedValue == "CaseSummary")
        {
            UserControls_Case_Summary_CustCateg_Chart uclCaseSummary_Chart = (UserControls_Case_Summary_CustCateg_Chart)Page.LoadControl("~/UserControls/Case_Summary_CustCateg_Chart.ascx");
            strControlID = "uclCaseSummary_Chart" + TB_nUserID;
            uclCaseSummary_Chart.GetCaseSummary();
            strDockTag = "UserControls/Case_Summary_CustCateg_Chart.ascx";
        }
        else if (cmbSelectDock.SelectedValue == "TaskSummary")
        {
            UserControls_Task_Summary_Chart uclTaskSummary_Chart = (UserControls_Task_Summary_Chart)Page.LoadControl("~/UserControls/Task_Summary_Chart.ascx");
            strControlID = "uclTaskSummary_Chart" + TB_nUserID;
            uclTaskSummary_Chart.GetTaskSummary();
            strDockTag = "~/UserControls/Task_Summary_Chart.ascx";
        }
        else if (cmbSelectDock.SelectedValue == "MyTask")
        {
            UserControls_MyTask uclMyTask = (UserControls_MyTask)Page.LoadControl("~/UserControls/MyTask.ascx");
            strControlID = "uclTask" + TB_nUserID;
            uclMyTask.GetTasks();
            strDockTag = "~/UserControls/MyTask.ascx";
        }
        else if (cmbSelectDock.SelectedValue == "MyCase")
        {
            UserControls_MyCase uclMyCase = (UserControls_MyCase)Page.LoadControl("~/UserControls/MyCase.ascx");
            strControlID = "uclCase" + TB_nUserID;
            uclMyCase.GetCases();
            strDockTag = "~/UserControls/MyCase.ascx";
        }
        else if (cmbSelectDock.SelectedValue == "OverdueCases")
        {
            UserControls_OverdueCases uclOverdueCases = (UserControls_OverdueCases)Page.LoadControl("~/UserControls/OverdueCases.ascx");
            strControlID = "uclOverdueCase" + TB_nUserID;
            uclOverdueCases.GetOverDueCases();
            strDockTag = "~/UserControls/OverdueCases.ascx";
        }
    }

    protected void btnSaveDock_Click(object sender, EventArgs e)
    {
        try
        {
            //--Save Dock states in Database
            System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
            stateList = rdDockLayout.GetRegisteredDocksState();

            while (i < stateList.Count)
            {
                serializedList.Append(serializer.Serialize(stateList[i]));
                serializedList.Append("|");
                i++;
            }

            dockState = serializedList.ToString();
            if (dockState.Trim() != String.Empty)
            {
                objDockStateWS = new DockStateWS();
                dsDataSet = new DataSet();
                dsDataSet = objDockStateWS.Save_Dock_State(0, 2, dockState);
            }
        }
        catch (Exception ex)
        {
            LogMessage(ex, 1, "btnSaveDock_Click");
        }
    }

    protected void btnAddZone_Click(object sender, EventArgs e)
    {
        CreateRadDockZone(null,null);
        zoneList = CurrentDockZoneIds;
    }

    private void GetZones()
    {
        objDockStateWS = new DockStateWS();
        dsDataSet = new DataSet();

        dsDataSet = objDockStateWS.Fetch_Zones(0, 2,"1");

        if (dsDataSet.Tables["DockZones"].Rows.Count > 0)
        {
            cmbZone.DataSource = dsDataSet;
            cmbZone.DataTextField = "zone_control_name";
            cmbZone.DataValueField = "zone_control_id";
            cmbZone.DataBind();
        }
    }

thanks with regards
 

Petio Petkov
Telerik team
 answered on 27 May 2009
1 answer
119 views
I am using the following script to try to access the nodes attributes but I get an error get_attributes is not a function. When I check the node in fire bug the is defiantly no get attributes function where am I going wrong?
function onNodeClicked(sender, args)   
 {   
   var node = args.get_node();   
   alert(node.get_attributes().getAttribute("CategoryOf"));   
   //you can also set attributes, like:   
   //node.get_attributes().setAttribute("CategoryOf");   
 }   
Veselin Vasilev
Telerik team
 answered on 27 May 2009
5 answers
191 views
Hi,

i have a little question.  I creating RadDockZones dynamically in my code and put them in a RadDockLayout control. Now i want to achieve that the RadDockZones are parellel and not one below the other as the RadDockLayout automatically does. I have tried to set the width of the RadDockZones but without the expected result...

Thanks for your help out there
Maik
Petio Petkov
Telerik team
 answered on 27 May 2009
14 answers
346 views
Is there documentation anywhere for implementing Recurrence when using a Custom Advanced Edit window. I've got an implementation that's about identical to the Live Demo example that uses a RadDock control to implement a custom edit window, but that example doesn't show anything about implementing recurrence in the edit window. Is there an example for this somewhere?
Peter
Telerik team
 answered on 27 May 2009
3 answers
129 views
Hi,

I have a slight problem with RAdGrid behaviour. I am using Q1 2009 Ajax Controls and LINQ against SQL server.

I have set up a simple grid for editing the rows in a table, using automatic insert/edit/delete and with paging turned on (using the advanced pager settings).

I note that if the data fits onto exactly 2 pages (i.e. my page size is 20 and I have 21 rows), and I delete the last row on the second page, I am left with an empty gird (No records to display), and no Pager either, so I can't get back to page 1 (except by re-displaying it all).

This is pretty minor - the likelihood of it occuring is small - but it is annoying.

Iana Tsolova
Telerik team
 answered on 27 May 2009
1 answer
77 views
In the Office 2007 skin I created a CSSClass to display a submenu indicator,

.SubMenu
{
    background-position: 100% -216px !important;
}

The right arrow shows up to indicate a submenu but when I hover the left side is cuttoff like its not rendering,

.RadMenu_Office2007 .rmExpanded,
.RadMenu_Office2007 .rmExpanded:hover
{
 color: #000;
 background-position: 0 -120px;
}

Any ideas on how to fix it?

Thanks,
Rich

 

Yana
Telerik team
 answered on 27 May 2009
2 answers
212 views
Hi!

Is it possible to make the radgrid perform automatic filtering after the user has typed 3 (or more) characters in the filer box?

If so, whats the best approach?
Is there a example ot this somewhere that I have missed :) ?

Regards
Per Bornsjö
Princy
Top achievements
Rank 2
 answered on 27 May 2009
7 answers
346 views
Hi,
  I am using a RadWindow as a popup as mentioned in the article below.

http://www.telerik.com/help/aspnet-ajax/window_programmingusingradwindowasadialog.html

In this, I wanted to use a RadEditor object on the dialog page.

The onload attribute of the <body> tag reads the argument and uses it to initialize the dialog.
[Javascript] Initializing the dialog
<body onload = "var currentWindow = GetRadWindow();
var Input = document.getElementById('rdUserInput');
Input.value
= currentWindow.argument;">

The rdUserInput is a RadEditor control. So, when the popup is loaded, I do not see the value displayed in the control. However, if i do an alert of Input.Value, I see the value but it is not displayed inside the control. Why is this so? Can you guide on how to get this working?

Thank you.
Shinu
Top achievements
Rank 2
 answered on 27 May 2009
Narrow your results
Selected tags
Tags
+? more
Top users last month
Simon
Top achievements
Rank 2
Iron
Iron
Iron
Bob
Top achievements
Rank 3
Iron
Iron
Veteran
Marco
Top achievements
Rank 4
Iron
Iron
Iron
Grant
Top achievements
Rank 3
Iron
Iron
Iron
Kao Hung
Top achievements
Rank 1
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Simon
Top achievements
Rank 2
Iron
Iron
Iron
Bob
Top achievements
Rank 3
Iron
Iron
Veteran
Marco
Top achievements
Rank 4
Iron
Iron
Iron
Grant
Top achievements
Rank 3
Iron
Iron
Iron
Kao Hung
Top achievements
Rank 1
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?