Telerik Forums
UI for ASP.NET AJAX Forum
1 answer
136 views
I have a RadUpload control with a ProgressArea, when uploading in IE6 or IE7 the progress area's progress bar works fine however under firefox the progress Area shows and you can see the percentages and the byte/sec values change, however the progress bar does not show....this also happens in google Chrome.  We are using Firefox 3.0.14, the server is running IIS7.  I've used some of the suggestion including using 2009 Q2 build 826 and still no progress bar under Firefox.  I've included the web config.

Thanks

<?

 

xml version="1.0"?>

 

<

 

configuration>

 

<

 

configSections>

 

<

 

sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">

 

<

 

section name="WorklistHandler.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

 

<

 

section name="GPI.WorkflowService.Interface.InternalWF.WSComms.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

 

</

 

sectionGroup>

 

<

 

sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">

 

<

 

sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">

 

<

 

section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />

 

<

 

sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">

 

<

 

section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" />

 

<

 

section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />

 

<

 

section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />

 

<

 

section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />

 

</

 

sectionGroup>

 

</

 

sectionGroup>

 

</

 

sectionGroup>

 

</

 

configSections>

 

<

 

appSettings>

 

<

 

add key="PageSize" value="-1" />

 

<

 

add key="CommSrvClientID" value="2000" />

 

<

 

add key="NoteSensitivity" value="Normal" />

 

<

 

add key="NoteCategory" value="2000" />

 

<

 

add key="NotificationSalesRecipPrefix" value="recip://Sales/" />

 

<

 

add key="NotificationSalesGrp" value="group://Services/Workflow" />

 

<

 

add key="XSLTLocation" value="D:\GPI\MOSS_M2\WorkflowSystem\WorklistHandler\XML\XSLT\" />

 

<

 

add key="DMSSystemID" value="2" />

 

<

 

add key="RiskCalcURL" value="http://dev-tosweb001/RiskCalculator/RiskCalculator.aspx" />

 

<

 

add key="DMSURL" value="ListDocuments.aspx" />

 

<

 

add key="DMSViewerURL" value="BrowserView.aspx?ViewType=D&amp;SystemID=2" />

 

</

 

appSettings>

 

<

 

connectionStrings />

 

<

 

system.web>

 

<!--

 

 

Set compilation debug="true" to insert debugging

symbols into the compiled page. Because this

affects performance, set this value to true only

during development.

 

 

-->

 

<

 

compilation debug="true">

 

<

 

assemblies>

 

<

 

add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />

 

<

 

add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

 

<

 

add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />

 

<

 

add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />

 

<

 

add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />

 

<

 

add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />

 

<

 

add assembly="System.Drawing.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />

 

</

 

assemblies>

 

</

 

compilation>

 

<!--

The <authentication> section enables configuration

of the security authentication mod e used by

ASP.NET to identify an incoming user.

 

 

-->

 

<

 

authentication mode="Windows" />

 

<!--

The <customErrors> section enables configuration

of what to do if/when an unhandled error occurs

during the execution of a request. Specifically,

it enables developers to configure html error pages

to be displayed in place of a error stack trace.

 

<customErrors mode="RemoteOnly" defaultRedirect="Error.htm">

<error statusCode="403" redirect="NoAccess.htm" />

<error statusCode="404" redirect="FileNotFound.htm" />

</customErrors>

 

 

-->

 

<

 

pages>

 

<

 

controls>

 

<

 

add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

 

<

 

add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

 

<

 

add tagPrefix="telerik" namespace="Telerik.Web.UI" assembly="Telerik.Web.UI"/>

 

</

 

controls>

 

</

 

pages>

 

<

 

httpRuntime maxRequestLength="50000" executionTimeout="3600" />

 

<

 

httpHandlers>

 

<

 

remove verb="*" path="*.asmx" />

 

<

 

add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

 

<

 

add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

 

<

 

add verb="GET,HEAD" path="ScriptResource.axd" validate="false" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

 

<

 

add path="Telerik.Web.UI.WebResource.axd" type="Telerik.Web.UI.WebResource" verb="*" validate="false" />

 

<

 

add path="Telerik.RadUploadProgressHandler.ashx" type="Telerik.Web.UI.RadUploadProgressHandler" verb="*" validate="false" />

 

<

 

add path="Telerik.Web.UI.DialogHandler.aspx" verb="*" type="Telerik.Web.UI.DialogHandler, Telerik.Web.UI" validate="false" />

 

<

 

add path="Telerik.Web.UI.SpellCheckHandler.axd" verb="*" type="Telerik.Web.UI.SpellCheckHandler, Telerik.Web.UI" validate="false" />

 

</

 

httpHandlers>

 

<

 

httpModules>

 

<

 

add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

 

<

 

add name="RadUploadModule" type="Telerik.Web.UI.RadUploadHttpModule" />

 

</

 

httpModules>

 

</

 

system.web>

 

<

 

applicationSettings>

 

<

 

WorklistHandler.Properties.Settings>

 

<

 

setting name="WorklistHandler_WorkflowWS_WorkflowService" serializeAs="String">

 

<

 

value>http://localhost/WorkflowProxyService/GPIWorkflow.asmx</value>

 

</

 

setting>

 

<

 

setting name="WorklistHandler_CommWS_CommWS" serializeAs="String">

 

<

 

value>http://localhost/CommWS/CommWS.asmx</value>

 

</

 

setting>

 

<

 

setting name="WorklistHandler_DMSService_DMSService" serializeAs="String">

 

<

 

value>http://localhost/DocumentManagementWS/DMSService.asmx</value>

 

</

 

setting>

 

<

 

setting name="WorklistHandler_CssWS_CSSWebService" serializeAs="String">

 

<

 

value>http://localhost/CssWS/CSSWebService.asmx</value>

 

</

 

setting>

 

<

 

setting name="WorklistHandler_OrderDataWS_OrderDataWS" serializeAs="String">

 

<

 

value>http://localhost/OrderDataWS/OrderDataWS.asmx</value>

 

</

 

setting>

 

<

 

setting name="WorklistHandler_OrderCatalogWS_OrderCatalogWS"

 

 

 

serializeAs="String">

 

<

 

value>http://localhost/OrderCatalogWS/OrderCatalogWS.asmx</value>

 

</

 

setting>

 

<

 

setting name="WorklistHandler_OrderHistoryWS_OrderHistoryWS"

 

 

 

serializeAs="String">

 

<

 

value>http://localhost/OrderHistoryWS/OrderHistoryWS.asmx</value>

 

</

 

setting>

 

</

 

WorklistHandler.Properties.Settings>

 

<

 

GPI.WorkflowService.Interface.InternalWF.WSComms.Properties.Settings>

 

<

 

setting name="WorkflowWSCommsService_OrderHistoryWS_OrderHistoryWS"

 

 

 

serializeAs="String">

 

<

 

value>http://localhost/OrderHistoryWS/OrderHistoryWS.asmx</value>

 

</

 

setting>

 

</

 

GPI.WorkflowService.Interface.InternalWF.WSComms.Properties.Settings>

 

</

 

applicationSettings>

 

<

 

system.codedom>

 

<

 

compilers>

 

<

 

compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">

 

<

 

providerOption name="CompilerVersion" value="v3.5" />

 

<

 

providerOption name="WarnAsError" value="false" />

 

</

 

compiler>

 

</

 

compilers>

 

</

 

system.codedom>

 

<

 

system.webServer>

 

<

 

validation validateIntegratedModeConfiguration="false" />

 

<

 

modules>

 

<

 

remove name="ScriptModule" />

 

<

 

add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

 

<

 

add name="RadUploadModule" preCondition="integratedMode" type="Telerik.Web.UI.RadUploadHttpModule" />

 

</

 

modules>

 

<

 

handlers>

 

<

 

remove name="WebServiceHandlerFactory-Integrated" />

 

<

 

remove name="ScriptHandlerFactory" />

 

<

 

remove name="ScriptHandlerFactoryAppServices" />

 

<

 

remove name="ScriptResource" />

 

<

 

add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

 

<

 

add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

 

<

 

add name="ScriptResource" verb="GET,HEAD" path="ScriptResource.axd" preCondition="integratedMode" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

 

<

 

add name="Telerik_Web_UI_WebResource_axd" verb="*" preCondition="integratedMode" path="Telerik.Web.UI.WebResource.axd" type="Telerik.Web.UI.WebResource" />

 

<

 

add name="Telerik_RadUploadProgressHandler_ashx" verb="*" preCondition="integratedMode" path="Telerik.RadUploadProgressHandler.ashx" type="Telerik.Web.UI.RadUploadProgressHandler" />

 

</

 

handlers>

 

</

 

system.webServer>

 

<

 

runtime>

 

<

 

assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

 

<

 

dependentAssembly>

 

<

 

assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35" />

 

<

 

bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0" />

 

</

 

dependentAssembly>

 

<

 

dependentAssembly>

 

<

 

assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35" />

 

<

 

bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0" />

 

</

 

dependentAssembly>

 

</

 

assemblyBinding>

 

</

 

runtime>

 

<

 

location path="Telerik.RadUploadProgressHandler.ashx">

 

<

 

system.web>

 

<

 

authorization>

 

<

 

allow users="*"/>

 

</

 

authorization >

 

</

 

system.web>

 

</

 

location>

 

</

 

configuration>

 

Genady Sergeev
Telerik team
 answered on 09 Oct 2009
1 answer
83 views
Hi please help me..

I have a link button with a command name of "EditDateTime" it doesnt fire the onitemcommand event on CHROME. It works fine on other browsers.

    protected void grdSurvey_ItemCommand(object source, GridCommandEventArgs e)
    {
    if (e.CommandName == "EditDateTime")
        {
        }
}

Thanks!
Nikolay Rusev
Telerik team
 answered on 09 Oct 2009
7 answers
175 views
Hi, I'm using client side binding with some web services registered in a RadScript manager.
All the web services return an XmlNode, and have their ResponseType set to Xml.
I can get the data fine, the problem is when I call set_dataSource and then dataBind, now rows appear in the tables.
I have autoGenerateColumns set to true in the grid.

What is the preferred method of binding a grid directly to the xml returned by the web service?
Nikolay Rusev
Telerik team
 answered on 09 Oct 2009
1 answer
119 views

Hi,
I am using Visual Studio 2005, Rad Conrtols for ASP.NET Q1 2008 and .net Framework 2.0 and C# Programming.
I am editing Rad Grid using User Control Form. I have a problem when editing dropdown list item.
When I click the edit command button on the grid, the User Control form shows up. All the Text boxes are filled with the correct values. But, the dropdown List which is databound in Code behind always shows the first value in the dropdownlist.
Is there a way to set the selected Value of the Dropdown list to show the current value of the cell in Grid.
Also can you please let me know what event is fired when the edit command button is clicked?


Thanks,
RKS
Princy
Top achievements
Rank 2
 answered on 09 Oct 2009
4 answers
257 views

Hi,
I'm considering using the RadTreeView (Version Q2 2009) in my projects, but I have some problems trying to replace node text with HTML table client-side. For example: I have to display a hierarchy of directories with the size of each directory right-aligned near the directory name.
I cannot use templates because I add items via web service.
I use the OnClientNodePopulated client-side event to add HTML tables inside nodes, but the table is rendered below the node image!
I spent several hours trying to create a custom skin to solve this problem, but with no results.
Can you help me?
Thanks in advance,
Nazareno.

This is the code of my ASP.NET page:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script language="javascript" type="text/javascript">
        function RadTreeView1_ClientNodePopulated(sender, eventArgs) {
            var parentnode = eventArgs.get_node();
            var childnodes = parentnode.get_nodes();
            for (var i = 0; i < childnodes.get_count(); i++) {
                var childnode = childnodes.getNode(i);
                childnode.get_textElement().innerHTML =
                "<table width=\"100%\"><tr><td>"
                + childnode.get_text() +
                "</td><td align=\"right\">"
                + childnode.get_attributes().getAttribute("LastWriteTime") +
                "</td></tr></table>";
            }
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server" ScriptMode="Release">
    </asp:ScriptManager>
    <div>
        <telerik:RadTreeView ID="RadTreeView1" runat="server" Width="400" Height="400" OnClientNodePopulated="RadTreeView1_ClientNodePopulated">
            <Nodes>
                <telerik:RadTreeNode runat="server" ExpandMode="WebService" Text="C:" ToolTip="C:"
                    Value="C:\\" ImageUrl="folder.png" ExpandedImageUrl="folder_open.png">
                </telerik:RadTreeNode>
            </Nodes>
            <WebServiceSettings Path="WebService1.asmx" Method="GetDirectories" />
        </telerik:RadTreeView>

    </div>
    </form>
</body>
</html>

This is the code of my web service:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using Telerik.Web.UI;
using System.IO;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class WebService1 : System.Web.Services.WebService {

    [WebMethod]
    public RadTreeNodeData[] GetDirectories(RadTreeNodeData node, object context)
    {
        // extract the "context" dictionary information. OnClientNodePopulating event loads the dictionary
        IDictionary<string, object> contextDictionary = (IDictionary<string, object>)context;
        // create the array of RadTreeNodeData that will be returned by this method
        List<RadTreeNodeData> result = new List<RadTreeNodeData>();

        // Make a reference to a directory.
        DirectoryInfo di = new DirectoryInfo(node.Value);

        // Get a reference to each directory in that directory.
        DirectoryInfo[] diArr = di.GetDirectories();

        // Returns the names of the directories.
        foreach (DirectoryInfo dri in diArr)
        {
            RadTreeNodeData nodeData = new RadTreeNodeData();
            nodeData.Text = dri.Name;
            nodeData.Value = dri.FullName;
            nodeData.Attributes.Add("LastWriteTime", dri.LastWriteTime.ToString());
            nodeData.ExpandMode = TreeNodeExpandMode.WebService;
            nodeData.ImageUrl = "folder.png";
            nodeData.ExpandedImageUrl = "folder_open.png";

            result.Add(nodeData);
        }

        return result.ToArray();
    }   
}

Atanas Korchev
Telerik team
 answered on 09 Oct 2009
10 answers
154 views
We use the TabStrip and we don't want a line break when the window gets too small. The documentation states that per default the tab strips are truncated in this case: "By default, when there is not enough room to display all the tabs at one level, RadTabStrip simply truncates the display".

This seems to be wrong, as in our case a line break is produced. This doesn't look to good, as with the default style, the tabs are cut in a strange way.

So I tried setting the ScrollChildren property to true, which would be actually a good solution for us. There is just one small problem: in Firefox (3.5), the scroll buttons are initially enabled and shown, even if there is enough space when scrolling would not be necessary (see attached pic 01). After the user can scroll, which again gives some weird results (see attached pic 02).

I noticed, after I once resized the window, the scroll buttons disappear, so then everything seems to work fine. So guess the tab strip somehow is registered on some resize event and then recalculates its scroll buttons enabled state. Is there some way to manually trigger this recalculation in order to get rid of this problem, or do you have some other idea how I can solve this?
Pascal
Top achievements
Rank 1
 answered on 09 Oct 2009
3 answers
336 views
I have a raddock with DockMode="Floating". When this dock is activated I would like there to be a modal just like you can do with RadWindow.
Pero
Telerik team
 answered on 09 Oct 2009
11 answers
706 views
HiTeam,

While opening of rad window in my project, it is taking more time to load.

Could you give any suggestions about slow...


Satyadev.
Knut
Top achievements
Rank 1
 answered on 09 Oct 2009
7 answers
192 views
Hello,

A page in my webapp is set up as followed :
  RadGrid
    DetailTable
      NestedView
          RadMultiPage
            RadPageView
              RadGrid


I've set the EnablePostbackOnRowClick to true for both RadGrids.
However when i expand the first gird and the detailtable and click on a row in the second RadGrid there doesn't seem to be a postback. I hooked the ItemCommand event of both RadGrids and for the first RadGrid this is triggered with CommandName "RowClick" but for the second RadGrid the event isn't triggered at all.

Both RadGrid's are set up with the following properties

 

<telerik:RadGrid ID="...RadGrid" runat="server" AutoGenerateColumns="False"

 

 

GridLines="None" AllowMultiRowSelection="true"

 

 

onitemcommand="...RadGrid_ItemCommand" OnNeedDataSource="...RadGrid_NeedDataSource" OnPreRender="....RadGrid_PreRender" >

 

<ClientSettings EnablePostBackOnRowClick="true" >

 

 

<Selecting AllowRowSelect="true" />

 

 

<ClientEvents OnRowContextMenu="RowContextMenu" OnRowCreated="OnRowCreated" />

 

 

</ClientSettings>

Anybody knows why the postback on the second RadGrid isn't triggered?

 

Jeroen Eikmans
Top achievements
Rank 1
 answered on 09 Oct 2009
1 answer
139 views
hi i have a problem related to assamblies..whenever i put a control from toolbox to web form it shows an error that error creating control:
Could not load file or assembly 'Telerik.Web.UI, Version=2009.2.826.35, Culture=neutral, PublicKeyToken=121fae78165ba3d4' or one of its dependencies..i read some previous blogs but i cant understand anything..can anyone help me to make it understand clearly and sort out this problem by a step by step procedure..i will be very thankfull to him for this..
Shinu
Top achievements
Rank 2
 answered on 09 Oct 2009
Narrow your results
Selected tags
Tags
+? more
Top users last month
Simon
Top achievements
Rank 2
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
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?