Telerik Forums
UI for ASP.NET AJAX Forum
11 answers
282 views
Hi,

I would like advice on how to make a toolbar that looks like the example in the image.

What I want is to have a RadToolBar in the top of a page, with width=100%, a few buttons to the left of the bar and a single button aligned to the right.

I've experimented with some properties of the buttons and with a little of custom cssclasses for the buttons, but didn't come to a solution.

Thanks for any help.

Simón de Lizarza
Kate
Telerik team
 answered on 10 Nov 2011
1 answer
62 views
we want to mark time slots back color based on resource available timings. 
We will save Resource available timings in appointments format.
Please let us know the solution for this.


Ivana
Telerik team
 answered on 10 Nov 2011
6 answers
141 views
Please add functionality to render RadCombo in standard HTML select and option tags. The control needs to degrade to user the mobile devices web browser UI as designed for device. Droid, IPhone and many others have specifically designed thier browser to display drop downs allowing easy and intuitive picking, display and selection. Telerik design does not allow ability to degrade to HTML Select and Option tags to use mobile device browser. Allow the option to degrade even if it disables Telerik options of load on demand, auto scrolling, etc. It is important for Telerik to allow ths for developers to write one UI to work on many devices using XHTML standards. The developer can global enable the degrade option as needed. We have a large and important customer base that is embracing smartphones and tablets for standard business operations. Respectfully, Tre. 
Simon
Telerik team
 answered on 10 Nov 2011
1 answer
136 views
We recently installed the Telerik Sharepoint Acceleration Kit on our Sharepoint 2010 server.  The installation ran successfully.  However, when I go into our Sharepoint site, I don't see the telerik Web Parts.  Am I missing something?

As well, if I try to load the web parts manually from the wsp files, we receive the following error when trying to activate the web parts.
Tsvetoslav
Telerik team
 answered on 10 Nov 2011
5 answers
79 views
Hi Telerik Team.

i'm using radstrip and multipage control for switching screen.
and main page has 2 usercontrols.

i difined mainpage splitter resize event that adjust each usercontrol's splitter width and height.

WebUserControl1 has a button

the button call javascript function and raise ajaxmanager request event.


- load first menu
-.load second menu
-.resizing web browser from any tabs, it works fine.

but i have a problem, below phase
- load first menu
- load second menu
-click the button in the WebUserControl1
- resizing web browser while focusing WebUserControl1
-switch other tabs --> It tab's screen width and height are broken.

how can i make same width and height from other tab's screen?

please let me know good solution. thank you.
i'm attaching source code. i'm sorry , i don't know how to upload zip file.

Default.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="damnitsplitter._Default" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head runat="server">
    <title></title>
    <style type="text/css">
        html, body, form
        {
            width: 100%;
            height: 100%;
            margin: 0px;
            padding: 0px;
            overflow: hidden;
        }
    </style>
    <script type="text/javascript">
        function OnClientResized(sender, args) {
            var panewidth = $find("DefaultContents").get_width();
            var paneheight = $find("DefaultContents").get_height();
 
            var firstmenusplitter = $find($("#UserControl1Splitter").val());
            firstmenusplitter.resize(panewidth, paneheight);
            firstmenusplitter.repaint();
 
            var secondmenusplitter = $find($("#UserControl2Splitter").val());
            secondmenusplitter.resize(panewidth, paneheight);
            secondmenusplitter.repaint();
        }
 
        function OnClientTabSelected(sender, args) {
            var panewidth = $find("DefaultContents").get_width();
            var paneheight = $find("DefaultContents").get_height();
 
            var firstmenusplitter = $find($("#UserControl1Splitter").val());
            firstmenusplitter.resize(panewidth, paneheight);
            firstmenusplitter.repaint();
 
            var secondmenusplitter = $find($("#UserControl2Splitter").val());
            secondmenusplitter.resize(panewidth, paneheight);
            secondmenusplitter.repaint();
        }
 
        function OnClientTabSelecting(sender, args) {
 
        }
        function OnRequestStart() {
            var pageLoadWindow = $find("RadWindowPageLoad");
            pageLoadWindow.show();
        }
 
        function OnResponseEnd() {
            var pageLoadWindow = $find("RadWindowPageLoad");
            pageLoadWindow.close();
        }
 
        function sendingdata() {
            var radAjaxManager = $find("RadAjaxManager1");
            radAjaxManager.ajaxRequest("damn it RadSplitter!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
        }
 
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div style="display: none;">
        <telerik:RadScriptManager ID="RadScriptManager1" runat="server">
            <scripts>
                <%--Needed for JavaScript IntelliSense in VS2010--%>
                <%--For VS2008 replace RadScriptManager with ScriptManager--%>
                <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.Core.js" />
                <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQuery.js" />
                <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQueryInclude.js" />
            </scripts>
        </telerik:RadScriptManager>
        <telerik:RadWindow ID="RadWindowPageLoad" AutoSize="false" Skin="Simple" Modal="true"
            Overlay="true" VisibleTitlebar="true" Title="Processing..." Behaviors="None"
            VisibleStatusbar="false" Width="400" Height="200" runat="server" Style="position: absolute;
            z-index: 9000;">
            <contenttemplate>
                <div style="margin-top: 55px; text-align: center; vertical-align: middle;">
                    <asp:Image ID="ImagePageLoading" runat="server" />
                </div>
            </contenttemplate>
        </telerik:RadWindow>
    </div>
    <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
        <clientevents onrequeststart="OnRequestStart" onresponseend="OnResponseEnd" />
        <ajaxsettings>
                <telerik:AjaxSetting AjaxControlID="DefaultRadMenu">
                    <UpdatedControls>
                        <telerik:AjaxUpdatedControl ControlID="DefaultRadSplitter1" UpdatePanelHeight="100%" />
                        <telerik:AjaxUpdatedControl ControlID="hiddenfields" />
                    </UpdatedControls>
                </telerik:AjaxSetting>
                <telerik:AjaxSetting AjaxControlID="RadAjaxManager1">
                    <UpdatedControls>
                        <telerik:AjaxUpdatedControl ControlID="DefaultRadSplitter1" UpdatePanelHeight="100%"/>
                        <telerik:AjaxUpdatedControl ControlID="hiddenfields" />
                    </UpdatedControls>
                </telerik:AjaxSetting>
            </ajaxsettings>
    </telerik:RadAjaxManager>
    <telerik:RadSplitter runat="server" ID="DefaultRadSplitter1" Orientation="Horizontal"
        OnClientResized="OnClientResized" Width="100%" Height="100%">
        <telerik:RadPane runat="server" ID="DefaultHeader" Height="60" CssClass="DefaultHeaderCss"
            Scrolling="None">
            <div style="height: 100%; width: 100%; background-color: Gray;">
                <telerik:RadMenu ID="DefaultRadMenu" runat="server" EnableShadows="true">
                    <items>
                        <telerik:RadMenuItem Text="first menu" Value="first menu" PostBack="false">
                            <Items>
                                <telerik:RadMenuItem Text="first menu1" Value="WebUserControl1" />
                            </Items>
                        </telerik:RadMenuItem>
                        <telerik:RadMenuItem IsSeparator="true" />
                        <telerik:RadMenuItem Text="second menu" Value="second menu" PostBack="false">
                            <Items>
                                <telerik:RadMenuItem Text="second menu1" Value="WebUserControl2" />
                            </Items>
                        </telerik:RadMenuItem>
                    </items>
                </telerik:RadMenu>
            </div>
        </telerik:RadPane>
        <telerik:RadPane runat="server" ID="DefaultTab" Height="30">
            <telerik:RadTabStrip runat="server" ID="DefaultRadTabStrip" MultiPageID="DefaultMultiPage"
                OnClientTabSelected="OnClientTabSelected" OnClientTabSelecting="OnClientTabSelecting">
                <tabtemplate>
                    <asp:Label ID="LabelTabName" runat="server" Text='<%# DataBinder.Eval(Container, "Text") %>' />
                    <span class="ie6shim"></span>
                </tabtemplate>
            </telerik:RadTabStrip>
        </telerik:RadPane>
        <telerik:RadPane runat="server" ID="DefaultContents" Width="100%" Height="100%" Scrolling="None">
            <telerik:RadMultiPage runat="server" ID="DefaultMultiPage">
            </telerik:RadMultiPage>
        </telerik:RadPane>
        <telerik:RadPane runat="server" ID="DefaultFooter" Height="30">
            <div style="height: 100%; width: 100%; background-color: Gray">
                Footer</div>
        </telerik:RadPane>
    </telerik:RadSplitter>
    <asp:Panel runat="server" ID="hiddenfields">
        <asp:HiddenField runat="server" ID="UserControl1Splitter" />
        <asp:HiddenField runat="server" ID="UserControl2Splitter" />
    </asp:Panel>
    </form>
</body>
</html>


Default.aspx.vb
Imports Telerik.Web.UI
 
Partial Class _Default
    Inherits System.Web.UI.Page
    Private Sub RadMenuTopItemClick(sender As Object, e As Telerik.Web.UI.RadMenuEventArgs) Handles DefaultRadMenu.ItemClick
 
        Try
 
            If DefaultRadTabStrip.FindTabByText(e.Item.Text) Is Nothing Then
                AddTab(e.Item.Text)
                DefaultRadTabStrip.FindTabByText(e.Item.Text).Value = e.Item.Value
                AddPageView(DefaultRadTabStrip.FindTabByText(e.Item.Text))
                DefaultRadTabStrip.DataBind()
 
            Else
                DefaultRadTabStrip.FindTabByText(e.Item.Text).Selected = True
                DefaultRadTabStrip.FindTabByText(e.Item.Text).PageView.Selected = True
 
            End If
 
        Catch ex As Exception
            Throw ex
        End Try
 
    End Sub
 
    Private Sub AddTab(ByVal tabName As String)
        VisibleRadTabContent(True)
        DefaultTab.Collapsed = False
 
        If DefaultRadTabStrip.SelectedTab IsNot Nothing Then
            DefaultRadTabStrip.SelectedTab.Selected = False
        End If
 
        Dim tab As RadTab = New RadTab
        tab.Text = tabName
        tab.Selected = True
        DefaultRadTabStrip.Tabs.Add(tab)
 
    End Sub
 
    Private Sub AddPageView(ByVal tab As RadTab)
        Dim pageView As RadPageView = New RadPageView
        pageView.ID = tab.Value
        pageView.Selected = True
        pageView.Width = System.Web.UI.WebControls.Unit.Percentage(100)
        pageView.Height = System.Web.UI.WebControls.Unit.Percentage(100)
        DefaultMultiPage.PageViews.Add(pageView)
        tab.PageViewID = pageView.ID
    End Sub
 
 
    Private Sub VisibleRadTabContent(value As Boolean)
        DefaultRadTabStrip.Visible = value
        DefaultRadTabStrip.Visible = value
    End Sub
 
    Protected Sub DefaultMultiPage_PageViewCreated(sender As Object, e As Telerik.Web.UI.RadMultiPageEventArgs) Handles DefaultMultiPage.PageViewCreated
        Dim userControlName As String = e.PageView.ID + ".ascx"
        Dim userControl As Control = Page.LoadControl(userControlName)
        userControl.ID = e.PageView.ID & "_userControl"
        e.PageView.Controls.Add(userControl)
    End Sub
 
    Protected Sub RadAjaxManager_AjaxRequest(ByVal sender As Object, ByVal e As Telerik.Web.UI.AjaxRequestEventArgs) Handles RadAjaxManager1.AjaxRequest
        Dim a = e.Argument
    End Sub
End Class


WebUserControl1.ascx
<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="WebUserControl1.ascx.vb"
    Inherits="damnitsplitter.WebUserControl1" %>
 
 
<telerik:RadSplitter runat="server" ID="WebUserControl1RadSplitterWrap" Orientation="Horizontal"
    Width="100%" Height="100%">
    <telerik:RadPane runat="server" ID="WebUserControl1RadPaneMenu" height="30">
        <div>
            <asp:Button ID="sendtodefaultpage" runat="server" Text="Button" OnClientClick="return sendingdata();"/>
        </div>
    </telerik:RadPane>
    <telerik:RadPane runat="server" ID="WebUserControl1RadPane" Width="100%" Height="100%"
        Scrolling="Y">
        <div style="background-color: yellow">
            start<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            WebUserControl 1 Content<br />
            end<br />
        </div>
    </telerik:RadPane>
</telerik:RadSplitter>


WebUserControl1.ascx.vb
Public Class WebUserControl1
    Inherits System.Web.UI.UserControl
 
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim hiddenfield = DirectCast(Page.FindControl("UserControl1Splitter"), HiddenField)
        hiddenfield.Value = WebUserControl1RadSplitterWrap.ClientID
    End Sub
 
End Class


WebUserControl2.ascx
<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="WebUserControl2.ascx.vb"
    Inherits="damnitsplitter.WebUserControl2" %>
<telerik:RadSplitter runat="server" ID="WebUserControl1RadSplitterWrap" Orientation="Horizontal"
    Width="100%" Height="100%">
    <telerik:RadPane runat="server" ID="WebUserControl1RadPane" Scrolling="None">
        <telerik:RadSplitter runat="server" ID="RadSplitter" Orientation="Vertical" Width="100%"
            ResizeWithParentPane="false" Height="100%">
            <telerik:RadPane runat="server" ID="RadPane1" Scrolling="None">
                <div style="background-color: Blue;">
                    WebUserControl 2 Content fisrt
                </div>
            </telerik:RadPane>
            <telerik:RadSplitBar runat="server">
            </telerik:RadSplitBar>
            <telerik:RadPane runat="server" ID="RadPane2" Scrolling="Y">
                <div style="background-color: yellow">
                    start<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    WebUserControl 2 Content<br />
                    end<br />
                </div>
            </telerik:RadPane>
        </telerik:RadSplitter>
    </telerik:RadPane>
</telerik:RadSplitter>

WebUserControl2.ascx.vb
Public Class WebUserControl2
    Inherits System.Web.UI.UserControl
 
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim hiddenfield = DirectCast(Page.FindControl("UserControl2Splitter"), HiddenField)
        hiddenfield.Value = RadSplitter.ClientID
    End Sub
 
     
End Class
Mira
Telerik team
 answered on 10 Nov 2011
5 answers
520 views
Hi,

    I have to disable rad datepicker if a checkbox is checked. if i uncheck the checkbox i have to enable the rad datepicker.. I am able to disable the date picker in all browsers. But i am not able to enable the same in firefox, chrome and safai.. it works in IE.  Is there any solution to avoid this?

var CheckBoxNoExpiration = document.getElementById('<%= CheckBoxNoExpiration.ClientID %>');
                   var DatePicker = $find('<%= RadExpiryDate.ClientID %>');
                   var MandatoryMark = document.getElementById('<%= MandatoryMark.ClientID %>');
                   if (CheckBoxNoExpiration != null) {
                       if (CheckBoxNoExpiration.checked) {
                           if (MandatoryMark != null)
                               MandatoryMark.style.display = 'none';
                           DatePicker.get_dateInput().disable();
                           DatePicker.get_dateInput.onclick = function() { return false; };
                           //onKeyDown = "javascript:return false;"
                           DatePicker._popupButton.disabled = true;
                           DatePicker._popupButton.onclick = function() { return false; };
                       }
                       else {
                           if (MandatoryMark != null)
                               MandatoryMark.style.display = 'inline';
                           DatePicker.get_dateInput().enable();
                           DatePicker._popupButton.disabled = false;
                           DatePicker._popupButton.onclick = function() { DatePicker.togglePopup(); return false; };
                       }
                   }

Thx
Esther
Maria Ilieva
Telerik team
 answered on 10 Nov 2011
1 answer
38 views
Hi,

I noticed a strange behavior: when I drop a node onto another node which has no children and is loaded on demand by a webserivce, I will have the dropped node twice.

This is what I do
- expand node A by clicking the expand icon
- node A expands and has no children (using LoadOnDemand - webservice)
- I drag node B over node A
- The change of the parent is saved in database using a webservice
- After saving, I move node B client-side in javascript from the old parent to the new parent (node A)
- node B is visible under his new parent node A
- when I collapse node A and expand it again (by using the expand icon), I see the new node twice (the first was my moving in javascript the duplicate is fetched by webservice)

If node A would has at least one child when it is expanded the first time, everything is fine.
This only occurs if the new parent node had no children before the drag&drop operation.

How can I prevent that behavior?

Edit: What currently works for me is to clear the current node's children on the OnClientNodePopulatingHandler:
function OnClientNodePopulatingHandler(sender, e) {
   e.get_node().get_nodes().clear();
}

Is there a better way to achieve this?
Plamen
Telerik team
 answered on 10 Nov 2011
2 answers
100 views
Hi

This is the markup for 2 Rad combo boxes with Checkboes enabled

<td><telerik:RadComboBox ID="ddlCustomer" Runat="server" Width="245px" EnableEmbeddedSkins="false" Skin="Activity" CheckBoxes="true" AutoPostBack="true"></telerik:RadComboBox></td>

<td><telerik:RadComboBox ID="ddlLocation" Runat="server" Width="185px" EnableEmbeddedSkins="false" Skin="Activity" CheckBoxes="true" AutoPostBack="true"></telerik:RadComboBox></td>


These checkboxes are passed back to be parameters a data class to populate a Rad Grid.
In the Radgrid I have a column

<telerik:GridTemplateColumn HeaderText="Arrival" SortExpression="LocationArrival" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" AllowFiltering="false" UniqueName="LocationArrival">

<ItemTemplate>

 

<asp:CheckBox ID="chkLocationArrival" runat="server" AutoPostBack="True" OnCheckedChanged="chkLocationArrival_CheckedChanged"/>              

</ItemTemplate>

</telerik:GridTemplateColumn>

If the Checkboxes = true is enabled the postbask fails and the chkLocationArrival_CheckedChanged never runs.

Whats going on

Andy

Dimitar Terziev
Telerik team
 answered on 10 Nov 2011
1 answer
99 views
I have implemented a solution for a project that utilizes a RadGrid, custom filter controls, custom filtering, custom sorting, and custom paging.  I am using LINQ2SQL for my datasource, and using the NeedDataSource event.  Everything is working perfectly, except for when I try to filter a column using
ltcs = ltcs.Where(l => Object.Equals(l.status, null));
The pager is showing the correct number of records, as I am setting that using the VirtualItemCount property of the radgrid, but when the page loads, it is giving me the "No records to display" message inside the grid.

Below is the .aspx page, the .aspx.cs code behind, and the code for the custom filter control.  I have been struggling for a while to figure this out, but can't for the life of me figure out why it wouldn't be working.

HELP ME PLEASE!!!

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeFile="ListToCountList.aspx.cs" Inherits="ListToCountList" %>
 
<%@ Register TagPrefix="rad" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
<%@ Register TagPrefix="HU" Namespace="HumanUse.CustomControls" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="Server">
    <style type="text/css">
        .wait, .wait *
        {
            cursor: wait !important;
        }
    </style>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="Server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <rad:RadAjaxManager ID="RadAjaxManager1" runat="server" OnAjaxRequest="RadAjaxManager1_AjaxRequest"
        DefaultLoadingPanelID="RadAjaxLoadingPanel1">
        <AjaxSettings>
            <rad:AjaxSetting AjaxControlID="RadAjaxManager1">
                <UpdatedControls>
                    <rad:AjaxUpdatedControl ControlID="RadGrid1" />
                </UpdatedControls>
            </rad:AjaxSetting>
            <rad:AjaxSetting AjaxControlID="RadGrid1">
                <UpdatedControls>
                    <rad:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1" />
                </UpdatedControls>
            </rad:AjaxSetting>
        </AjaxSettings>
    </rad:RadAjaxManager>
    <rad:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" Height="430px"
        Width="924px" Transparency="0">
        <img alt="Loading..." src='<%= RadAjaxLoadingPanel.GetWebResourceUrl(Page, "Telerik.Web.UI.Skins.Default.Ajax.loading.gif") %>'
            style="border: 0;" />
    </rad:RadAjaxLoadingPanel>
    <rad:RadCodeBlock ID="RadCodeBlock1" runat="server">
        <script type="text/javascript">
            function ShowViewForm(id, rowIndex) {
                var grid = $find("<%= RadGrid1.ClientID %>");
                var rowControl = grid.get_masterTableView().get_dataItems()[rowIndex].get_element();
                grid.get_masterTableView().selectItem(rowControl, true);
 
                var manager = GetRadWindowManager();
                var window1 = manager.getWindowByName("ListToCountForm");
                window1.setUrl("ListToCountForm.aspx?ltcid=" + id);
                window1.show();
                return false;
            }
            function refreshGrid(arg, rebindOnly) {
                alert('Your changes have been saved successfully');
                if (!arg && !rebindOnly) {
                    $find("<%= RadAjaxManager1.ClientID %>").ajaxRequest("Rebind");
                }
                else if (rebindOnly) {
                    $find("<%= RadAjaxManager1.ClientID %>").ajaxRequest("RebindOnly");
                }
                else {
                    $find("<%= RadAjaxManager1.ClientID %>").ajaxRequest("RebindOnly");
                }
            }
        </script>
    </rad:RadCodeBlock>
    <rad:RadGrid ID="RadGrid1" runat="server" PageSize="25" GridLines="None" AllowCustomPaging="true" AllowFilteringByColumn="True" AllowPaging="True" AllowSorting="True" EnableLinqExpressions="false" AutoGenerateColumns="False">
        <MasterTableView ClientDataKeyNames="assignment_id" AllowCustomPaging="true" AllowMultiColumnSorting="true" AllowCustomSorting="true" DataKeyNames="assignment_id" AutoGenerateColumns="False" AllowFilteringByColumn="True">
            <Columns>
                <rad:GridBoundColumn HeaderText="Segment" AllowFiltering="true" AllowSorting="true" DataField="segment_id" UniqueName="segment_id" DataType="System.Int32" SortExpression="segment_id" CurrentFilterFunction="EqualTo" ShowFilterIcon="false">
                </rad:GridBoundColumn>
                <rad:GridBoundColumn HeaderText="Photo Date" DataField="photo_date" DataType="System.DateTime" DataFormatString="{0:d}" SortExpression="photo_date" UniqueName="date" CurrentFilterFunction="EqualTo" ShowFilterIcon="false">
                </rad:GridBoundColumn>
                <HU:DistinctLTCValueDropDownFilterColumn FilterControlWidth="60" HeaderText="Initials" AllowFiltering="true" DataField="initials" UniqueName="initials" SortExpression="initials" ShowFilterIcon="false">
                    <ItemTemplate>
                        <%#Eval("initials") %>
                    </ItemTemplate>
                </HU:DistinctLTCValueDropDownFilterColumn>
                <HU:DistinctLTCValueDropDownFilterColumn FilterControlWidth="60" HeaderText="Zone" AllowFiltering="true" DataField="zone" UniqueName="zone" SortExpression="zone" ShowFilterIcon="false">
                    <ItemTemplate>
                        <%#Eval("zone")%>
                    </ItemTemplate>
                </HU:DistinctLTCValueDropDownFilterColumn>
                <HU:DistinctLTCValueDropDownFilterColumn FilterControlWidth="140" HeaderText="Field Office" AllowFiltering="true" DataField="FieldOffice" UniqueName="FieldOffice" SortExpression="FieldOffice" ShowFilterIcon="false">
                    <ItemTemplate>
                        <%#Eval("FieldOffice")%>
                    </ItemTemplate>
                </HU:DistinctLTCValueDropDownFilterColumn>
                <HU:DistinctLTCValueDropDownFilterColumn FilterControlWidth="100" HeaderText="Status" AllowFiltering="true" DataField="status" UniqueName="status" SortExpression="status" ShowFilterIcon="false">
                    <ItemTemplate>
                        <%#Eval("status")%>
                    </ItemTemplate>
                </HU:DistinctLTCValueDropDownFilterColumn>
                <rad:GridBoundColumn HeaderText="Last User" DataField="last_updated_user" ItemStyle-VerticalAlign="Top"
                    DataType="System.String" SortExpression="last_updated_user" AllowFiltering="true"
                    AllowSorting="true" CurrentFilterFunction="EqualTo"
                    ShowFilterIcon="false">
                </rad:GridBoundColumn>
                <rad:GridBoundColumn HeaderText="Last Update" DataField="last_update_date" ItemStyle-VerticalAlign="Top"
                    DataFormatString="{0:MM/dd/yyyy}" UniqueName="last_update_date" SortExpression="last_update_date"
                    AllowSorting="true" CurrentFilterFunction="EqualTo"
                    ShowFilterIcon="false">
                </rad:GridBoundColumn>
                <HU:DistinctLTCValueDropDownFilterColumn FilterControlWidth="50" HeaderText="Boating" AllowFiltering="true" DataField="boating" UniqueName="boating" SortExpression="boating" ShowFilterIcon="false">
                    <ItemTemplate>
                        <%#Eval("boating")%>
                    </ItemTemplate>
                </HU:DistinctLTCValueDropDownFilterColumn>
                <rad:GridTemplateColumn ItemStyle-VerticalAlign="Top" UniqueName="TemplateEditColumn"
                    AllowFiltering="True" HeaderText="Edit" HeaderStyle-Wrap="false">
                    <ItemTemplate>
                        <asp:HyperLink ID="EditLink" runat="server" Text="Edit"></asp:HyperLink>
                    </ItemTemplate>
                    <FilterTemplate>
                        <asp:Button runat="server" ID="btnFilter" Text="Filter" OnClick="btn_Click" />
                        <br />
                        <asp:Button runat="server" ID="btnClearFilter" Text="Clear" OnClick="btn_ClearClick" />
                    </FilterTemplate>
                </rad:GridTemplateColumn>
            </Columns>
        </MasterTableView>
    </rad:RadGrid>
    <rad:RadWindowManager ID="RadWindowManager1" runat="server" Skin="Vista">
        <Windows>
            <rad:RadWindow Skin="Vista" ID="ListToCountForm" ClientIDMode="Static" RestrictionZoneID="main" ShowContentDuringLoad="false" runat="server"
                Title="List To Count Form" Width="400px" Height="600px" ReloadOnShow="true" Modal="true" />
        </Windows>
    </rad:RadWindowManager>
</asp:Content>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.Web.UI;
using HumanUse;
using System.Configuration;
using System.Text.RegularExpressions;
 
public partial class ListToCountList : BasePage
{
    protected void Page_Load(object sender, EventArgs e)
    {
        base.CheckSecurity(true);
        RadGrid1.GroupingSettings.CaseSensitive = false;
        RadGrid1.ItemDataBound += new Telerik.Web.UI.GridItemEventHandler(RadGrid1_ItemDataBound);
        RadGrid1.NeedDataSource += new GridNeedDataSourceEventHandler(RadGrid1_NeedDataSource);
    }
 
    protected void btn_Click(object sender, EventArgs e)
    {
        RadGrid1.Rebind();
    }
 
    protected void btn_ClearClick(object sender, EventArgs e)
    {
        RadGrid1.MasterTableView.FilterExpression = "";
        foreach (GridColumn c in RadGrid1.MasterTableView.Columns)
        {
            c.CurrentFilterValue = "";
        }
        RadGrid1.Rebind();
    }
 
    void RadGrid1_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
    {
        WCSAerialDataContext db = new WCSAerialDataContext(ConfigurationManager.ConnectionStrings["WCS_AerialConnectionString"].ConnectionString);
        IQueryable<vwLTC> ltcs = db.vwLTCs;
        if (ShouldApplySortFilterOrGroup())
        {
            if (RadGrid1.MasterTableView.FilterExpression != "")
            {
                foreach (String s in RadGrid1.MasterTableView.FilterExpression.Replace("AND", "~").Split('~'))
                {
                    string column = s.Substring(2, s.IndexOf("]", 2) - 2);
                    string value = "";
                    if (column != "segment_id")
                    {
                        value = RadGrid1.MasterTableView.FilterExpression.Substring(RadGrid1.MasterTableView.FilterExpression.IndexOf("'") + 1, RadGrid1.MasterTableView.FilterExpression.IndexOf("'", RadGrid1.MasterTableView.FilterExpression.IndexOf("'") + 1) - (RadGrid1.MasterTableView.FilterExpression.IndexOf("'") + 1));
                    }
                    else
                    {
                        value = RadGrid1.MasterTableView.FilterExpression.Substring(RadGrid1.MasterTableView.FilterExpression.IndexOf("=") + 2, (RadGrid1.MasterTableView.FilterExpression.IndexOf(")", RadGrid1.MasterTableView.FilterExpression.IndexOf("=") + 2) - (RadGrid1.MasterTableView.FilterExpression.IndexOf("=") + 2)));
                    }
                    if (value == "NULL")
                        value = null;
                    switch (column)
                    {
                        case "segment_id":
                            ltcs = ltcs.Where(l => l.segment_id == int.Parse(value));
                            break;
                        case "photo_date":
                            ltcs = ltcs.Where(l => l.photo_date == DateTime.Parse(value));
                            break;
                        case "initials":
                            if (value == null)
                            {
                                ltcs = ltcs.Where(l => Object.Equals(l.initials, null));
                            }
                            else
                            {
                                value = value.Replace("%", "");
                                ltcs = ltcs.Where(l => l.initials == value);
                            }
                            break;
                        case "zone":
                            if (value == null)
                            {
                                ltcs = ltcs.Where(l => Object.Equals(l.zone, null));
                            }
                            else
                            {
                                value = value.Replace("%", "");
                                ltcs = ltcs.Where(l => l.zone == value);
                            }
                            break;
                        case "FieldOffice":
                            if (value == null)
                            {
                                ltcs = ltcs.Where(l => Object.Equals(l.FieldOffice, null));
                            }
                            else
                            {
                                value = value.Replace("%", "");
                                ltcs = ltcs.Where(l => l.FieldOffice == value);
                            }
                            break;
                        case "status":
                            if (value == null)
                            {
                                ltcs = ltcs.Where(l => Object.Equals(l.status, null));
                            }
                            else
                            {
                                value = value.Replace("%", "");
                                ltcs = ltcs.Where(l => l.status == value);
                            }
                            break;
                        case "last_updated_user":
                            if (value == null)
                            {
                                ltcs = ltcs.Where(l => Object.Equals(l.last_updated_user, null));
                            }
                            else
                            {
                                value = value.Replace("%", "");
                                ltcs = ltcs.Where(l => l.last_updated_user == value);
                            }
                            break;
                        case "last_update_date":
                            ltcs = ltcs.Where(l => l.last_update_date == DateTime.Parse(value));
                            break;
                        case "boating":
                            if (value == null)
                            {
                                ltcs = ltcs.Where(l => Object.Equals(l.boating, null));
                            }
                            else
                            {
                                value = value.Replace("%", "");
                                ltcs = ltcs.Where(l => l.boating == value);
                            }
                            break;
 
                    }
                }
            }
            if (RadGrid1.MasterTableView.SortExpressions.Count > 0)
            {
                foreach (GridSortExpression exp in RadGrid1.MasterTableView.SortExpressions)
                {
                    switch (exp.FieldName)
                    {
                        case "segment_id":
                            if (exp.SortOrder == GridSortOrder.Ascending)
                                ltcs = ltcs.OrderBy(l => l.segment_id);
                            else if (exp.SortOrder == GridSortOrder.Descending)
                                ltcs = ltcs.OrderByDescending(l => l.segment_id);
                            break;
                        case "photo_date":
                            if (exp.SortOrder == GridSortOrder.Ascending)
                                ltcs = ltcs.OrderBy(l => l.photo_date);
                            else if (exp.SortOrder == GridSortOrder.Descending)
                                ltcs = ltcs.OrderByDescending(l => l.photo_date);
                            break;
                        case "initials":
                            if (exp.SortOrder == GridSortOrder.Ascending)
                                ltcs = ltcs.OrderBy(l => l.initials);
                            else if (exp.SortOrder == GridSortOrder.Descending)
                                ltcs = ltcs.OrderByDescending(l => l.initials);
                            break;
                        case "zone":
                            if (exp.SortOrder == GridSortOrder.Ascending)
                                ltcs = ltcs.OrderBy(l => l.zone);
                            else if (exp.SortOrder == GridSortOrder.Descending)
                                ltcs = ltcs.OrderByDescending(l => l.zone);
                            break;
                        case "FieldOffice":
                            if (exp.SortOrder == GridSortOrder.Ascending)
                                ltcs = ltcs.OrderBy(l => l.FieldOffice);
                            else if (exp.SortOrder == GridSortOrder.Descending)
                                ltcs = ltcs.OrderByDescending(l => l.FieldOffice);
                            break;
                        case "status":
                            if (exp.SortOrder == GridSortOrder.Ascending)
                                ltcs = ltcs.OrderBy(l => l.status);
                            else if (exp.SortOrder == GridSortOrder.Descending)
                                ltcs = ltcs.OrderByDescending(l => l.status);
                            break;
                        case "last_updated_user":
                            if (exp.SortOrder == GridSortOrder.Ascending)
                                ltcs = ltcs.OrderBy(l => l.last_updated_user);
                            else if (exp.SortOrder == GridSortOrder.Descending)
                                ltcs = ltcs.OrderByDescending(l => l.last_updated_user);
                            break;
                        case "last_update_date":
                            if (exp.SortOrder == GridSortOrder.Ascending)
                                ltcs = ltcs.OrderBy(l => l.last_update_date);
                            else if (exp.SortOrder == GridSortOrder.Descending)
                                ltcs = ltcs.OrderByDescending(l => l.last_update_date);
                            break;
                        case "boating":
                            if (exp.SortOrder == GridSortOrder.Ascending)
                                ltcs = ltcs.OrderBy(l => l.boating);
                            else if (exp.SortOrder == GridSortOrder.Descending)
                                ltcs = ltcs.OrderByDescending(l => l.boating);
                            break;
 
                    }
                }
            }
        }
        RadGrid1.VirtualItemCount = ltcs.Count();
        RadGrid1.DataSource = ltcs.Skip(RadGrid1.CurrentPageIndex * RadGrid1.PageSize).Take(RadGrid1.PageSize);
    }
 
    public bool ShouldApplySortFilterOrGroup()
    {
        return RadGrid1.MasterTableView.FilterExpression != "" || RadGrid1.MasterTableView.SortExpressions.Count > 0;
    }
 
    void RadGrid1_ItemDataBound(object sender, Telerik.Web.UI.GridItemEventArgs e)
    {
        if (e.Item is GridDataItem)
        {
            string next = string.Empty;
            string previous = string.Empty;
            string current = string.Empty;
            current = e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["assignment_id"].ToString();
            HyperLink editLink = (HyperLink)e.Item.FindControl("EditLink");
            editLink.Attributes["href"] = "#";
            editLink.Attributes["onclick"] = String.Format("return ShowViewForm('{0}','{1}');", current, e.Item.ItemIndex);
        }
    }
 
    protected void RadAjaxManager1_AjaxRequest(object sender, AjaxRequestEventArgs e)
    {
        if (e.Argument == "Rebind")
        {
            RadGrid1.MasterTableView.SortExpressions.Clear();
            RadGrid1.MasterTableView.GroupByExpressions.Clear();
            RadGrid1.Rebind();
        }
        else if (e.Argument == "RebindAndNavigate")
        {
            RadGrid1.MasterTableView.SortExpressions.Clear();
            RadGrid1.MasterTableView.GroupByExpressions.Clear();
            RadGrid1.MasterTableView.CurrentPageIndex = RadGrid1.MasterTableView.PageCount - 1;
            RadGrid1.Rebind();
        }
        else if (e.Argument == "RebindOnly")
        {
            RadGrid1.Rebind();
        }
    }
}
using Telerik.Web.UI;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections.Generic;
using System;
 
namespace HumanUse.CustomControls
{
    /// <summary>
    /// Summary description for DistinctValueDropDownFilterColumn
    /// </summary>
    public class DistinctLTCValueDropDownFilterColumn : GridTemplateColumn
    {
        public enum Orders { ASC, DESC }
        public Orders Order { get; set; }
        public bool OrderResults { get; set; }
 
        protected override void SetupFilterControls(TableCell cell)
        {
            RadComboBox rcBox = new RadComboBox();
            rcBox.ID = "DDL" + this.UniqueName;
            rcBox.AutoPostBack = this.AutoPostBackOnFilter;
            rcBox.Width = this.FilterControlWidth;
            rcBox.SelectedIndexChanged += rcBox_SelectedIndexChanged;
            WCSAerialDataContext db = new WCSAerialDataContext();
            string q = String.Format("SELECT DISTINCT {0} FROM vwLTC", DataField);
            if(OrderResults)
            {
                q += " ORDER BY " + DataField + " " + Order.ToString();
            }
            IEnumerable<String> values = db.ExecuteQuery<String>(q);
            rcBox.Items.Add(new RadComboBoxItem("No Filter", ""));
            foreach (string s in values)
            {
                if(String.IsNullOrWhiteSpace(s))
                    rcBox.Items.Add(new RadComboBoxItem("", "NULL"));
                else
                    rcBox.Items.Add(new RadComboBoxItem(s, s));
            }
            cell.Controls.Add(rcBox);
        }
 
        protected override void SetCurrentFilterValueToControl(TableCell cell)
        {
            if (!(this.CurrentFilterValue == ""))
            {
                ((RadComboBox)cell.Controls[0]).Items.FindItemByValue(this.CurrentFilterValue).Selected = true;
            }
        }
 
        protected override string GetCurrentFilterValueFromControl(TableCell cell)
        {
            string currentText = ((RadComboBox)cell.Controls[0]).SelectedItem.Text;
            string currentValue = ((RadComboBox)cell.Controls[0]).SelectedItem.Value;
            this.CurrentFilterFunction = (currentText != "No Filter") ? GridKnownFunction.EqualTo : GridKnownFunction.NoFilter;
            return currentValue;
        }
 
        private void rcBox_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
        {
            ((GridFilteringItem)(((RadComboBox)sender).Parent.Parent)).FireCommandEvent("Filter", new Pair());
        }
    }
}
Marin
Telerik team
 answered on 10 Nov 2011
1 answer
133 views
I'm using a RadListBox to drag and drop some values into a RadEditor, when I used it inFirefox it inserts de value where i have the cursor, but in IE it inserts the Radlistbox value always in the beginnig of the RadEditor content, i'm using the function: editor.pasteHtml("..."); as you have in the sample of emoticons, but no works for me..

Here I write me code lines:
<telerik:RadListBox ID="RadListbox1" runat="server" EnableDragAndDrop="True"  OnClientDragStart="OnClientDragStart" OnClientDragging="OnClientDragging" OnClientDropping="OnClientDropping"
        Width="250px" Height="100px" SelectionMode="Single" AllowDelete="false" >
        <ButtonSettings ReorderButtons="Common"></ButtonSettings>
    </telerik:RadListBox>
 
    <telerik:RadEditor OnClientLoad="OnClientLoad" ID="RadEditor1" runat="server" SkinID="DefaultSetOfTools" Visible="true" EditModes="Design"
        Height="500px" Width="650px" StripFormattingOnPaste="All" ToolsFile="~/App_GlobalResources/ToolsFile.xml"
        SpellCheckSettings-AllowAddCustom="false" SpellCheckSettings-DictionaryLanguage="es-ES"
        SpellCheckSettings-DictionaryPath="~/App_Data/RadSpell/" ContentAreaCssFile="EditorContentAreaStyles.css"  >
        <ImageManager EnableImageEditor="false" ViewPaths="" MaxUploadFileSize="512000" >
        </ImageManager>
        <Modules>
            <telerik:EditorModule Name="RadEditorStatistics" Visible="false" Enabled="true" />
            <telerik:EditorModule Name="RadEditorDomInspector" Visible="false" Enabled="true" />
            <telerik:EditorModule Name="RadEditorNodeInspector" Visible="false" Enabled="true" />
            <telerik:EditorModule Name="RadEditorHtmlInspector" Visible="false" Enabled="true" />                   
        </Modules>               
   

<script type="text/javascript">
//<![CDATA[
 
     function OnClientLoad(editor) {
         var list = $find("<%= RadListbox1.ClientID %>");
         makeUnselectable(list.get_element());
     }

     function OnClientDragStart() {         
         setOverlayVisible(true);
     }

     function OnClientDropping(sender, args) {
         var editor = $find("<%=RadEditor1.ClientID%>");        
         var event = args.get_domEvent();        
         document.body.style.cursor = "default";

         var result = isMouseOverEditor(editor, event);
       
         if (result) {
             var span_value = args.get_sourceItem().get_text();

             if (span_value) {                                 
                 editor.setFocus();
                 editor.pasteHtml("{" + span_value + "}");
                 args.set_cancel(true);
             }
         }
         setOverlayVisible(false);
     }

     function OnClientDragging(sender, args) {
         var editor = editor = $find("<%=RadEditor1.ClientID%>");
         var event = args.get_domEvent();
         
         if (isMouseOverEditor(editor, event)) {
             document.body.style.cursor = "hand";
         }
         else {
             document.body.style.cursor = "no-drop";
         }
     }

     /* ================== Utility methods needed for the Drag/Drop ===============================*/
     
     function makeUnselectable(element) {         
         var nodes = element.getElementsByTagName("li");
         
         for (var index = 0; index < nodes.length; index++) {
             var elem = nodes[index];             
             elem.setAttribute("unselectable", "on");
         }
     }

     //Create and display an overlay to prevent the editor content area from capturing mouse events
     var shimId = null;
     function setOverlayVisible(toShow) {
         if (!shimId) {
             var div = document.createElement("DIV");
             document.body.appendChild(div);
             shimId = new Telerik.Web.UI.ModalExtender(div);
         }

         if (toShow) shimId.show();
         else shimId.hide();
     }
     
     //Check if the image is over the editor or not
     function isMouseOverEditor(editor, events) {
     
         var editorFrame = editor.get_contentAreaElement();
         var editorRect = $telerik.getBounds(editorFrame);

         var mouseX = events.clientX;
         var mouseY = events.clientY;         

         if (mouseX < (editorRect.x + editorRect.width) &&
             mouseX > editorRect.x &&
                mouseY < (editorRect.y + editorRect.height) &&
             mouseY > editorRect.y) {
             return true;
         }
         return false;
     }

</script>


And I want to know if I can have another icon when I drag one item to the RadEditor, not the forbidden icon.

Thanks,

Rumen
Telerik team
 answered on 10 Nov 2011
Narrow your results
Selected tags
Tags
+? more
Top users last month
Will
Top achievements
Rank 2
Iron
Motti
Top achievements
Rank 1
Iron
Hester
Top achievements
Rank 1
Iron
Bob
Top achievements
Rank 3
Iron
Iron
Veteran
Thomas
Top achievements
Rank 2
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Will
Top achievements
Rank 2
Iron
Motti
Top achievements
Rank 1
Iron
Hester
Top achievements
Rank 1
Iron
Bob
Top achievements
Rank 3
Iron
Iron
Veteran
Thomas
Top achievements
Rank 2
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?