Telerik Forums
UI for ASP.NET MVC Forum
1 answer
172 views
Hello,
please excuse me if I post you this but I was wondering what's the best approach for implementing this...
I've got a Grid witch has 3 column that will be editable and will have to show a dropdown while editing... we can call them Country,Profile and Status
I've to prefix that I came from SL world so what I do in that world would be
  • call the services GetCountries,GetProfiles and GetStatus
  • save those datas in 3 different collection
  • at the cell edit open the dropdown loading the corresponding collection as possible values and selecting the selected matching the IdCountry,IdProfile.IdStatus

How can I do this in the MVC world? I think I can't have all done via Mvc without using javascript... or should I create a viewmodel that holds those collections?

If I use "pure" js I would have 3 calls to the service from js, store the values and perform as I've written above

Any suggestion?
Thanks

Petur Subev
Telerik team
 answered on 29 Aug 2013
4 answers
261 views
Hello folks,
     If I set up an editor and set .Encode() to false OR specify .ViewHtml(), as soon as I click in the editor or show the Html by pressing the View Html button, the change event is fired which isn't really true from a user perspective.
Is there a way to prevent that behavior OR is there a way to know it's the encoding (or any other internal mechanism of the component) that fires the change so I can handle it properly?
What I want to achieve is, when the editor changes, I want to set a page dirty flag so I can notify the user something changed and wasn't saved in the editor.

Regards,

Stephan
Stéphan Parrot
Top achievements
Rank 1
 answered on 29 Aug 2013
1 answer
562 views
Hi to all,
I am doing crud operation by using Kendo Grid and using default window opening.

I searched a lot for custom window but didn't find the good example.

what i wants is that on Add and Edit  i wants to open my own form in Kendo window
i.e create.cshtml and Edit.cshtml .

I used lot of examples of kendo window but there were lot of problem sometimes
 window not opening sometime form design changing when clicking again and again.

Please guide me what to do
or if possible provide me sample where cutom window can be open on Add and edit
and i can load my forms inside that.

Thanks
Jack
Top achievements
Rank 1
 answered on 29 Aug 2013
6 answers
1.6K+ views
Hi to all, i am facing one problem while binding my json data to Kendo grid

I have 7 columns in  database . I ma fetching 5 columns and sending data through json and binding Kendo Grid,
but when passing those 6th or 7th column Kendo grid not showing anything as its coming in json result.

Please help as i don't know what to do with this

@(Html.Kendo().Grid(Model)  
    .Name("Grid")
     .Columns(columns =>
      {        
          
          columns.Bound(model => model.FirstName).Width(150);
          columns.Bound(model => model.LastName).Width(150);         
          columns.Bound(model => model.EmailAddress).Width(150).Sortable(false);        
          columns.Bound(model => model.IsActive).Width(100);
          columns.Bound(model => model.LoginName).Width(100).Visible(false);
          //columns.Bound(model => model.Address).Width(100).Visible(false);
          // Add "Edit" and "Destroy" commands
          columns.Command(command => { command.Edit(); }).Width(100);
         
      })
   .Pageable(pageable => pageable.ButtonCount(5))
  
    .Sortable(sort => sort.Enabled(true))
    .Filterable()
    .Scrollable()
    .Groupable()
    // Add "Create" command
    .ToolBar(commands => commands.Create())
     // Set the edit mode to "PopPup"
    .Editable(editable => editable.Mode(GridEditMode.PopUp))
    .HtmlAttributes(new { style = "height:430px;" })
    .DataSource(dataSource => dataSource
        
          
            .Ajax()
            .PageSize(50)
            .ServerOperation(false)
            .Model(model => model.Id(p => p.ID))
            
            .Create("InsertUser","ProductKendo")
            .Update("UpdateUser","ProductKendo")
             .Destroy("DeleteUser","ProductKendo")
            
        
        .Read(read => read.Action("GetUserDataKendo", "ProductKendo")
           
        
        )
    ) .Resizable(resize => resize.Columns(true))
    
    
)

when i send address field,grid doesn't show anything

Thanks
Jack
Top achievements
Rank 1
 answered on 29 Aug 2013
1 answer
2.4K+ views
Hello,
I've got some troubles validating 4 dropdownlist I've on a page... I've looked at this page

http://demos.kendoui.com/web/validator/index.html

but it refers to HTML version and I don't know how to use it with Kendo Wrappers...

Here's a piece of code only for the first dropdownlist (the other 3 are similar)

<div id="myform">
        @(Html.Kendo().DropDownList()
          .Name("cbFiliali")
          .HtmlAttributes(new { style = "width: 250px" })
          .DataTextField("Descr")
          .DataValueField("ID")
          .DataSource(source =>
          {
              source.Read(read =>
              {
                  read.Action("GetListaFiliali", "Common", new { Area = string.Empty });
              }).ServerFiltering(false);
          })
                     
        )
 
        <input id="btnCarica" type="button" value="CARICA" />
    </div>
 
 
    <script>
        var validator = $("#myform").kendoValidator(
            {
                rules: {
                    customRule1: function (input) {
                        // all of the input must have a value
                        return $.trim(input.val()) !== "";
                    }
                }
            }).data("kendoValidator");
 
        //validate the state on button click
        $("#btnCarica").click(function () {
            //validate the input elements and check if there are any errors
            //if (validator.validate()) {
            if (validator.validateInput($("DropDownList[name=cbFiliali]"))) {
                var ddFiliali = $("#cbFiliali").data("kendoDropDownList");
                var filiale = ddFiliali.value();
                alert(filiale);
            }
            else
                alert("NON VALIDO");
        });
 
</script>
Is there a way of forcing a value to be selected? I'm not really familiar with javascript so maybe I'm missing something really simple...
Thanks
Daniel
Telerik team
 answered on 29 Aug 2013
4 answers
172 views
Hello!

I've downloaded the Telerik Pack and installed, but today was the first day I actually could start using the Kendo UI.I created a new MVC 4 application (actually, I'm also learning the MVC). Then then I went to the Kendo UI documentation.I saw that there is a VS Extension here http://visualstudiogallery.msdn.microsoft.com/65b78c2c-951e-43a8-bae7-f9039f59fb9b
I tried to install it, but the .vsix just opened, the mouse cursor change to "waiting" for a bit, than it just stops. No error message, no window opening, nothing. Is there another way to install the VS Extension without the .vsix from the link?
Thanks in advance!
Momchil
Telerik team
 answered on 28 Aug 2013
1 answer
169 views
Using the internal build, the tooltip appears once and then all subsequent triggers fail to make the tooltip reappear, even though the DOM element is still on the page.

This is a regression bug I remember it from a few releases ago.
Dimo
Telerik team
 answered on 28 Aug 2013
2 answers
961 views
Hello Telerik,
I need to access to a control defined in a different area from the one my page is currently in... for example if I'm in Admin area I want to access to a CommonController defined in the main Controller folder (so Area = null)

In the specific I'm using a dropdown but in future I'll use it for grid as well... my code is

@(Html.Kendo().DropDownList()
          .Name("cbAccount")
          .HtmlAttributes(new { style = "width: 250px" })
          .DataTextField("Descr")
          .DataValueField("ID")
          .DataSource(source =>
          {
              source.Read(read =>
              {
                  read.Action("GetListaAccount", "Common");
              }).ServerFiltering(false);
          })
    )
It looks for a Common controller under the Admin area...I've tried specifing the routeValues as new {Area=null} or new {Area="Foo"} but I don't even see the call to the service...what am I doing wrong?

Thanks
Paolo
Daniel
Telerik team
 answered on 28 Aug 2013
1 answer
131 views
I am using ASP.net MVC 4 with Kendo UI and have created a Kendo UI WIndow that contains a tab control, each containing a kendo list view.  The purpose of the window is to maintain system notes and activity within the application.  The tab control contains 3 tabs: Notes, Activity and All Notes and Activity.   The Notes tab allows a user to create and view  notes while the Activity and All Notes and Activity allows the user to view information only.
The problem I am having is when creating a note in IE 8.  For some reason, the request object sent to the controller does not contain the note entered by the user.  It is null even when text is entered on the screen.  The mystery here is it works great in IE 9, FireFox and Chrome. 

Has anyone had any issues with the request object not being populated in IE 8?

The View

@model IEnumerable<BlueJayPPE.ViewModels.RequestNoteViewModel>

<script type="text/x-kendo-tmpl" id="requestTemplateNote">
     <div class="request-note-view k-widget">
        <div  class="request-note"> 
                <b>#:Subject#</b>
                <p>#:Note#</p>

                 #if (IsOwner==true){#
                    <div class="request-note-buttons">
                        <div class="request-note-edit-button">
                            <a id="addButton" class="k-button k-button-icontext k-edit-button" href="\\#"><span class="k-icon k-edit"></span></a>
                            <a class="k-button k-button-icontext k-delete-button" href="\\#"><span class="k-icon k-delete"></span></a>
                        </div>
                    </div>
                #} else {#
                        <div class="request-note-buttons">
                        <div class="request-note-edit-button">
                            <div>
                                <span class="k-icon k-edit k-state-disabled" >
                            </div>
                            <div>
                                <span class="k-icon k-delete k-state-disabled" >
                            </div>
                          </div>
                    </div>
                #}#
        </div>
    </div>
    
</script>

<div class="request-note-section">

    <div class="request-note-section-button">
        <a class="k-button k-button-icontext k-add-button" href="#"><span class="k-icon k-add"></span>@ViewRes.CCE.AddNoteButtonLabel</a>
    </div>

        @(Html.Kendo().ListView<BlueJayPPE.ViewModels.RequestNoteViewModel>(Model)
        .Name("RequestNotesView")
        .TagName("div")
        .ClientTemplateId("requestTemplateNote")
        .DataSource(dataSource => dataSource
            .Model(model => {
                model.Id("RequestNoteId");
              })
            .Read(read => read.Action("GetRequestNotes", "ProposalEngine").Data("RequestLogActivity.getRequestNotesParams"))
            .Create(create => create.Action("AddNote", "ProposalEngine").Data("RequestLogActivity.getRequestNotesParams"))
            .Update(update => update.Action("UpdateNote", "ProposalEngine"))
            .Destroy(destroy => destroy.Action("DeleteNote", "ProposalEngine"))
           )
        .Editable(editable => editable.TemplateName("RequestNoteEdit"))
    )

</div>

<script>
    $(function() {
        var listView = $("#RequestNotesView").data("kendoListView");
        var dsRequestNote = $("#RequestNotesView").data("kendoListView").dataSource;

        dsRequestNote.bind("requestEnd", function (e) {

            var dsAllActivity = $('#RequestAllActivityView').data('kendoListView').dataSource;
            var responseErr = false;;

            if (e.type == "create")
            {
                try{
                    console.log(e.response.Data[0].RequestId);
                }
                catch (err) {
                    console.log("no request id");
                }

                try {
                    console.log(e.response.Data[0].Note);
                }
                catch (err) {
                    console.log("no note");
                }

                dsAllActivity.add({
                    RequestId: e.response.Data[0].RequestId,
                    RequestNoteId: e.response.Data[0].RequestNoteId,
                    NoteType: e.response.Data[0].NoteType,
                    Note: e.response.Data[0].Note,
                    CreatedByUserName: e.response.Data[0].CreatedByUserName,
                    Subject: e.response.Data[0].Subject
                });

                dsAllActivity.sync;
             }
            else if (e.type == "update"){

                var item = dsAllActivity.get(e.response.Data[0].RequestNoteId);

                item.set("Note", e.response.Data[0].Note);

                dsAllActivity.sync;
               
            }
            else if (e.type == "destroy")
            {
                dsAllData = dsAllActivity._data;

                for (var pos = 0; pos < dsAllData.length; pos++) {

                    if (dsAllData[pos].RequestNoteId == e.response.Data[0].RequestNoteId) {

                        dsAllActivity.remove(dsAllData[pos]);
                        dsAllActivity.sync;

                        break;
                    }
                }
            }
        });

        $(".k-add-button").click(function (e) {
    
            listView.add();
            e.preventDefault();
        });
       
        listView.bind("remove", function (e) {

            if (!confirm("Are you sure you want to delete this item?")) {
                e.preventDefault();
            }

        });

    });

</script>

The Controller (irrelevant actions removed for brievity)
public class EngineController : Controller
    {

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult AddNote(int requestId, [DataSourceRequest] DataSourceRequest request, RequestNoteViewModel requestNote)
        {
            var results = new List<RequestNoteViewModel>();

            if (requestNote != null && ModelState.IsValid)
            {
                int webUserId = unchecked((int)User.WebUserKey());

                requestNote.RequestId = (requestId == 0 ? requestId : requestNote.RequestId);
                requestNote.IsOwner = true;


                var commitedNote = RequestNoteRepository.Insert(webUserId, requestNote);
      
                results.Add(commitedNote);
            }
            
            return Json(results.ToDataSourceResult(request, ModelState));
        }
       

    }

The View Model
public class RequestNoteViewModel
    {
        [Editable(false)]
        public int RequestId { get; set; }

        [Editable(false)]
        public int RequestNoteId { get; set; }

        [Editable(false)]
        public int CreatedByWebUserId { get; set; }

        [Editable(false)]
        public string CreatedByUserName { get; set; }

        [Editable(true)]
        [Required (AllowEmptyStrings = false, ErrorMessage = "A Numberic or Alpha Character is Required")]
        public string Note { get; set; }

        public string NoteType { get; set; }

        public string Action { get; set; }

        [Editable(false)]
        public DateTime CreatedDate { get; set; }

        public string Subject
        {
            get 
            { 
                if( NoteType == "log" ) {
                    return CreatedByUserName + " " + Action + " a request on " + CreatedDate;
                } else {
                    return CreatedByUserName + " created a note on " + CreatedDate;
                }
            }
            set { }
        }

        public bool IsOwner { get; set; }
    }
Petur Subev
Telerik team
 answered on 28 Aug 2013
2 answers
165 views
Hi All,

I'm trying to replicate the demo tabstrip animation functionality in my own project as a proof of concept project whilst trialing the controls.

However I'm getting the following error:

Object doesn't support property or method 'kendoTabStrip'

It's probably a setup issue but am not sure what I'm doing wrong.

Index.cshtml
<form class="configuration k-widget k-header">
    <span class="configHead">Animation Settings</span>
    <ul class="options">
        <li>
            <input name="animation" type="radio" @(ViewBag.animation == "toggle" ? "checked=\"checked\"" : "") value="toggle" /> <label for="toggle">toggle animation</label>
        </li>
        <li>
            <input name="animation" type="radio" @(ViewBag.animation != "toggle" ? "checked=\"checked\"" : "") value="expand" /> <label for="expand">expand animation</label>
        </li>
        <li>           
            @Html.CheckBox("opacity", (bool)ViewBag.opacity) <label for="opacity">animate opacity</label>
        </li>
    </ul>
 
    <button class="k-button">Apply</button>
</form>
 
<h3>Conversation history</h3>
 
@(Html.Kendo().TabStrip()
    .Name("tabstrip")
    .HtmlAttributes(new { style = "width:500px" })
    .Animation(animation =>
    {
        animation.Enable(ViewBag.animation == "expand" || ViewBag.opacity);
 
        animation.Open(config =>
        {
            if (ViewBag.animation != "toggle")
            {
                config.Expand();
            }
 
            if (ViewBag.opacity == true)
            {
                config.Fade(FadeDirection.In);
            }
 
            config.Duration(AnimationDuration.Fast);
        });
    })
    .SelectedIndex(0)
    .Items(panelbar =>
    {
        panelbar.Add().Text("First Tab")
                .Content(@<text>
                    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer felis libero, lobortis ac rutrum quis, varius a velit. Donec lacus erat, cursus sed porta quis, adipiscing et ligula. Duis volutpat, sem pharetra accumsan pharetra, mi ligula cursus felis, ac aliquet leo diam eget risus. Integer facilisis, justo cursus venenatis vehicula, massa nisl tempor sem, in ullamcorper neque mauris in orci.</p>
                </text>);
 
        panelbar.Add().Text("Second Tab")
                .Content(@<text>
                    <p>Ut orci ligula, varius ac consequat in, rhoncus in dolor. Mauris pulvinar molestie accumsan. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aenean velit ligula, pharetra quis aliquam sed, scelerisque sed sapien. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aliquam dui mi, vulputate vitae pulvinar ac, condimentum sed eros.</p>
                </text>);
     
        panelbar.Add().Text("Third Tab")
                .Content(@<text>
                    <p>Aliquam at nisl quis est adipiscing bibendum. Nam malesuada eros facilisis arcu vulputate at aliquam nunc tempor. In commodo scelerisque enim, eget sodales lorem condimentum rutrum. Phasellus sem metus, ultricies at commodo in, tristique non est. Morbi vel mauris eget mauris commodo elementum. Nam eget libero lacus, ut sollicitudin ante. Nam odio quam, suscipit a fringilla eget, dignissim nec arcu. Donec tristique arcu ut sapien elementum pellentesque.</p>
                </text>);
     
        panelbar.Add().Text("Fourth Tab")
                .Content(@<text>
                    <p>Maecenas vitae eros vel enim molestie cursus. Proin ut lacinia ipsum. Nam at elit arcu, at porttitor ipsum. Praesent id viverra lorem. Nam lacinia elementum fermentum. Nulla facilisi. Nulla bibendum erat sed sem interdum suscipit. Vestibulum eget molestie leo. Aliquam erat volutpat. Ut sed nulla libero. Suspendisse id euismod quam. Aliquam interdum turpis vitae purus consectetur in pulvinar libero accumsan. In id augue dui, ac volutpat ante. Suspendisse purus est, ullamcorper id bibendum sed, placerat id leo.</p>
                </text>);
     
        panelbar.Add().Text("Fifth Tab")
                .Content(@<text>
                    <p>Fusce nec mauris enim, non pharetra neque. Etiam elementum nunc ut velit fermentum sed porta eros dignissim. Duis at nisl eros. Integer arcu nisl, accumsan non molestie at, elementum nec odio. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque arcu odio, aliquam vel viverra ac, varius at sapien. Nullam elementum nulla non libero interdum vestibulum at in lacus. Curabitur ac magna ac lacus dapibus convallis non at turpis.</p>
                </text>);
    })
)


HomeController
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
 
namespace BizSpark.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/
 
        public ActionResult Index(string animation, bool? opacity)
        {
            ViewBag.animation = animation ?? "expand";
            ViewBag.opacity = opacity ?? true;
 
            return View();
        }
 
    }
}
_Layout.cshtml
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/modernizr")
     @Styles.Render("~/Content/kendo/css")
    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/kendo")
</head>
<body>
    @RenderBody()
 
    
    @RenderSection("scripts", required: false)
</body>
</html>
BundleConfig.cs
    public class BundleConfig
    {
        // For more information on Bundling, visit http://go.microsoft.com/fwlink/?LinkId=254725
        public static void RegisterBundles(BundleCollection bundles)
        {
            bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                        "~/Scripts/jquery-{version}.js"));
 
            bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
                        "~/Scripts/jquery-ui-{version}.js"));
 
            bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                        "~/Scripts/jquery.unobtrusive*",
                        "~/Scripts/jquery.validate*"));
 
            // Use the development version of Modernizr to develop with and learn from. Then, when you're
            // ready for production, use the build tool at http://modernizr.com to pick only the tests you need.
            bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
                        "~/Scripts/modernizr-*"));
 
 
            bundles.Add(new ScriptBundle("~/bundles/kendo")
     .Include("~/Scripts/kendo.all.min.js") // or kendo.all.min.js  kendo.web.min.js
     .Include("~/Scripts/kendo.aspnetmvc.min.js")
);
 
 
            bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.css"));
 
            bundles.Add(new StyleBundle("~/Content/themes/base/css").Include(
                        "~/Content/themes/base/jquery.ui.core.css",
                        "~/Content/themes/base/jquery.ui.resizable.css",
                        "~/Content/themes/base/jquery.ui.selectable.css",
                        "~/Content/themes/base/jquery.ui.accordion.css",
                        "~/Content/themes/base/jquery.ui.autocomplete.css",
                        "~/Content/themes/base/jquery.ui.button.css",
                        "~/Content/themes/base/jquery.ui.dialog.css",
                        "~/Content/themes/base/jquery.ui.slider.css",
                        "~/Content/themes/base/jquery.ui.tabs.css",
                        "~/Content/themes/base/jquery.ui.datepicker.css",
                        "~/Content/themes/base/jquery.ui.progressbar.css",
                        "~/Content/themes/base/jquery.ui.theme.css"));
 
 
            // The Kendo CSS bundle - replace "2012.3.1315" with the Kendo UI version that you are using
            bundles.Add(new StyleBundle("~/Content/css")
                  .Include("~/Content/kendo.common.*")
                  .Include("~/Content/kendo.uniform.min.*")
            );
        }
    }
}


Any help is appreciated, thanks.
Mark
Top achievements
Rank 1
 answered on 28 Aug 2013
Narrow your results
Selected tags
Tags
Grid
General Discussions
Scheduler
DropDownList
Chart
Editor
TreeView
DatePicker
ComboBox
Upload
MultiSelect
ListView
Window
TabStrip
Menu
Installer and VS Extensions
Spreadsheet
AutoComplete
TreeList
Gantt
PanelBar
NumericTextBox
Filter
ToolTip
Map
Diagram
Button
PivotGrid
Form
ListBox
Splitter
Application
FileManager
Sortable
Calendar
View
MaskedTextBox
PDFViewer
TextBox
Toolbar
Dialog
MultiColumnComboBox
DropDownTree
Checkbox
Slider
Switch
Notification
Accessibility
ListView (Mobile)
Pager
Security
ColorPicker
DateRangePicker
Wizard
Styling
Chat
DateInput
MediaPlayer
TileLayout
Drawer
SplitView
Template
Barcode
ButtonGroup (Mobile)
Drawer (Mobile)
ImageEditor
RadioGroup
Sparkline
Stepper
TabStrip (Mobile)
GridLayout
Badge
LinearGauge
ModalView
ResponsivePanel
TextArea
Breadcrumb
ExpansionPanel
Licensing
Rating
ScrollView
ButtonGroup
CheckBoxGroup
NavBar
ProgressBar
QRCode
RadioButton
Scroller
Timeline
TreeMap
TaskBoard
OrgChart
Captcha
ActionSheet
Signature
DateTimePicker
AppBar
BottomNavigation
Card
FloatingActionButton
Localization
MultiViewCalendar
PopOver (Mobile)
Ripple
ScrollView (Mobile)
Switch (Mobile)
PivotGridV2
FlatColorPicker
ColorPalette
DropDownButton
AIPrompt
PropertyGrid
ActionSheet (Mobile)
BulletGraph
Button (Mobile)
Collapsible
Loader
CircularGauge
SkeletonContainer
Popover
HeatMap
Avatar
ColorGradient
CircularProgressBar
SplitButton
StackLayout
TimeDurationPicker
Chip
ChipList
DockManager
ToggleButton
Sankey
OTPInput
ChartWizard
SpeechToTextButton
InlineAIPrompt
TimePicker
StockChart
RadialGauge
ContextMenu
ArcGauge
AICodingAssistant
SmartPasteButton
PromptBox
SegmentedControl
LLM Kit
+? 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?