Telerik Forums
UI for ASP.NET AJAX Forum
6 answers
455 views

Hi,

here is a link to the screenshot which will explain the problem. I added custom header background image to the grid. The grid uses static headers and verticle scrollbars. Now when scrollbars appear there is no header image above the scrollbar.

[img]http://img65.imageshack.us/img65/7702/gridsmn3.jpg[/img]

Which property do i need to change/set to get this right.

Thanks
Mridul
Dimo
Telerik team
 answered on 07 May 2010
1 answer
318 views

Hi,
I need to replace style attribute from img with plain width and height attributes. I.e.:
YES: <img src="..." height="100" width="200"/>
NO:   <img style="height: 100px; width=200px;" src="..."/>

I tried the two solutions you proposed in different posts of this forum, but they don't work completely.
When the editor is in HTML View and OnClientSubmit is triggered, the function doesn't remove style attribute. 
When the editor is in Design View, everything is ok.

Why? Is there a workaround?
Following the two solutions proposed.

Thanks.



Solution 1:

<script type="text/javascript">     
function OnClientSubmit(editor, args)     
{     
    var images = editor.get_document().getElementsByTagName("IMG");        
    for (i=0; i<images.length; i++)     
    {     
       var image = images[i];     
       var width = image.width;      
       var height = image.height;     
       image.removeAttribute("style");     
       image.setAttribute("width", width);     
       image.setAttribute("height", height);     
    }     
         
    alert(editor.get_html(true));     
        
}     
</script>     
     
<telerik:radeditor runat="server" OnClientSubmit="OnClientSubmit" ID="RadEditor1">     
    <ImageManager ViewPaths="~/Images" UploadPaths="~/Images" />     
    <Content><IMG style="WIDTH: 543px; HEIGHT: 287px" alt="" src="/editorQ2SP12008/Images/Deisy.jpg"></Content>     
</telerik:radeditor>     
<input type="submit" value="submit" />    
 


Solution 2:

<script type="text/javascript">    
function OnClientSubmit(editor)    
{                  
    var images = editor.get_document().getElementsByTagName("IMG");                
    var i = 0;                 
         
    for(i = 0; i < images.length; i++)   
    {                                                            
        var align = images[i].style.styleFloat;   
        var width = images[i].width;      
        var height = images[i].height;                     
             
        if(align != null && align != "")   
            images[i].setAttribute("align", align);   
                 
        if(width != null && width != "")   
            images[i].setAttribute("width", width);   
                 
        if(height != null && height != "")   
            images[i].setAttribute("height", height);   
                 
        images[i].removeAttribute("style");                   
    }             
}   
</script>    
      
<telerik:radeditor runat="server" OnClientSubmit="OnClientSubmit" ID="RadEditor1" ContentFilters="none">    
    <ImageManager ViewPaths="~/Images" UploadPaths="~/Images" />    
    <Content><IMG style="WIDTH: 543px; HEIGHT: 287px;float:left;" alt="" src="/editorQ2SP12008/Images/Deisy.jpg"></Content>    
</telerik:radeditor>    
<input type="submit" value="submit" /> 
Dobromir
Telerik team
 answered on 07 May 2010
1 answer
117 views
Hi all,

Does anyone know if it is possible to style radiobuttons like the ones in the example (attachment)?

Thanks!
Daniel
Bozhidar
Telerik team
 answered on 07 May 2010
1 answer
79 views
I noticed that there is a property on the RadGrid EnableAjax.  I do not see this as a property for the latest version of radgrid.  Has this property been removed/replaced?

Thanks,
Nathan Lacoff
Daniel
Telerik team
 answered on 07 May 2010
2 answers
106 views
I am using the RadEditor control.  The RadEditor is wrapped into a user (ascx) control, and then multiple instances of this user control are being used on a web forms (aspx) page.  

I would like to use the ToolProviderID property so that all instances of the RadEditor use the same tools markup and script.  However, the RadEditor instances are in different naming containers, so I cannot simply use the ID property of the RadEditor.  From a post on your forum (http://www.telerik.com/community/forums/aspnet-ajax/editor/use-toolproviderid-when-radeditor-in-itemtemplate.aspx) I should be able to use the ClientId property of the first RadEditor control as the ToolProviderId value for all of the subseqent rad editors.

I would like to set the ToolPRoviderId property of the RadEditor controls programmatically.  My question to you is how early in the ASP.Net eventing pipeline do I have to set this property so that the markup and scripts will be correctly injected into the page?  

I find that if I set these properties in the PageLoad event of the containing web forms page via data binding, the ToolProviderId behavior is not correct, since excessive script and markup are inserted into the page.  If I set this propery in the OnInit event of the radEditor in the user control (the earliest I can do it in the user control), then everything works fine.

Do you have any guidance of how early in the ASP.Net event pipeline I need to set the ToolProviderId for it to work properly?

Thanks for the help!
Joseph Alfano
Top achievements
Rank 1
 answered on 07 May 2010
3 answers
514 views

Hello,
I'm using a telerik(2009.2.826.35) radgrid for listing some items (with sorting and no paging)
on clicking a grid row I'm populating some info in the form (row selected will be highlighted)
However I'm facing with some problem at the time of sorting the columns.

Initially the selected row status is lost. I was able to fix it with the suggestion found under
http://www.telerik.com/help/aspnet-ajax/grid-persist-selected-rows-client-sorting-paging-grouping-filtering.html

However still there is an issue. Follow these steps. (Find below the source.)

Once the grid loads
1) click on any row (selection is made)
2) Sort by any column (initial row selection is retained)
3) Now click on any other row (it is supposed to select the new row and unselect the old row;
It does select the new row; However it fails to unselect the old one)
4) Now click on another row (this time it only selects the new row and unselects the old ones)

FYI: I notice this behaviour only on row selection made immediately after the sorting.

SortGrid.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="SortGrid.aspx.cs" Inherits="SortGrid" %> 
<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %> 
<!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 id="Head1" runat="server">  
    <title>Retain row seletion on grid sorting</title>   
      
    <style type="text/css">  
        .pnlClass  
        {  
            display:none;  
        }  
    </style> 
      
    <script type="text/javascript" language="javascript">      
        function RowKeyPress(eventArgs) {  
            alert('Return key pressed');  
        }  
          
        function RowDblClick(sender, eventArgs) {  
            alert('Mouse double click');  
        }      
          
        var selectedName = {};      
          
        function RowSelected(sender, args) {          
            var id = args.getDataKeyValue("ID");  
            if (!selectedName[id]) {  
                selectedName[id] = true;  
            }          
        }  
        function RowDeselected(sender, args) {  
            var id = args.getDataKeyValue("ID");  
            if (selectedName[id]) {  
                selectedName[id] = null;  
            }  
        }  
        function RowCreated(sender, args) {  
            var id = args.getDataKeyValue("ID");  
            if (selectedName[id]) {  
                args.get_gridDataItem().set_selected(true);  
            }  
        }     
    </script>     
</head> 
<body>      
    <form id="form1" runat="server">  
    <asp:ScriptManager ID="ScriptManager1" runat="server">  
    </asp:ScriptManager>   
    <asp:UpdatePanel runat="server" ID="UpdatePanel1">  
        <ContentTemplate>      
        <div>      
            <telerik:RadGrid ID="trgJobList" Skin="Telerik" runat="server" AllowPaging="false" AutoGenerateColumns="False" AllowSorting="True" AllowMultiRowSelection="true" GridLines="None" OnNeedDataSource="trgJobList_NeedDataSource" OnItemCommand="trgJobList_ItemCommand">  
                <ClientSettings> 
                </ClientSettings>     
                <MasterTableView NoMasterRecordsText="" AutoGenerateColumns="false" DataKeyNames="ID" Width="480px" ClientDataKeyNames="ID" TableLayout="Fixed">  
                    <Columns> 
                        <telerik:GridBoundColumn                     
                           HeaderText="ID" 
                           DataField="ID" 
                           UniqueName="ID">  
                           <HeaderStyle Width="30px" CssClass="pnlClass" /> 
                           <ItemStyle CssClass="pnlClass" /> 
                         </telerik:GridBoundColumn> 
                         <telerik:GridBoundColumn  
                           HeaderText="Title" 
                           DataField="Title" 
                           UniqueName="Title">  
                           <HeaderStyle Width="50px" /> 
                         </telerik:GridBoundColumn> 
                         <telerik:GridBoundColumn  
                           HeaderText="First" 
                           DataField="First" 
                           UniqueName="First">  
                           <HeaderStyle Width="150px" /> 
                         </telerik:GridBoundColumn> 
                         <telerik:GridBoundColumn  
                           HeaderText="Last" 
                           DataField="Last" 
                           UniqueName="Last">  
                           <HeaderStyle Width="150px" /> 
                         </telerik:GridBoundColumn> 
                         <telerik:GridBoundColumn                      
                           DataField="Editable"   
                           SortExpression="Editable"   
                           UniqueName="Editable">  
                           <HeaderStyle Width="30px" CssClass="pnlClass" /> 
                           <ItemStyle CssClass="pnlClass" />                                 
                         </telerik:GridBoundColumn> 
                    </Columns> 
                </MasterTableView> 
                <ClientSettings EnablePostBackOnRowClick="true">     
                <Selecting AllowRowSelect="true" />   
                <ClientEvents OnRowDblClick="RowDblClick" OnKeyPress="RowKeyPress" OnRowCreated="RowCreated" OnRowSelected="RowSelected" OnRowDeselected="RowDeselected" /> 
                <Scrolling  
                 AllowScroll="true" 
                 UseStaticHeaders="true" 
                 ScrollHeight="100px" /> 
                </ClientSettings> 
            </telerik:RadGrid> 
        </div> 
        </ContentTemplate> 
    </asp:UpdatePanel>      
    </form> 
</body> 
</html> 
 

SortGrid.aspx.cs

using System;  
using System.Collections;  
using System.Configuration;  
using System.Data;  
using System.Linq;  
using System.Web;  
using System.Web.Security;  
using System.Web.UI;  
using System.Web.UI.HtmlControls;  
using System.Web.UI.WebControls;  
using System.Web.UI.WebControls.WebParts;  
using System.Xml.Linq;  
using Telerik.Web.UI;  
 
public partial class SortGrid : System.Web.UI.Page  
{  
    protected void Page_Load(object sender, EventArgs e)  
    {  
 
    }  
 
    protected void trgJobList_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)  
    {  
        DataSet ds = new DataSet();  
        ds.ReadXml(MapPath("names.xml"));  
 
        RadGrid grid = sender as RadGrid;  
        grid.DataSource = ds.Tables[0];  
    }  
 
    protected void trgJobList_ItemCommand(object source, GridCommandEventArgs e)  
    {  
        if (e.CommandName == "RowClick" && e.Item is GridDataItem)  
        {  
            // My serverside code implementation when the row is clicked (like filling some labels)  
        }  
    }  
}  
 

names.xml

<?xml version="1.0" encoding="iso-8859-1"?>  
<names> 
    <name> 
        <ID>1</ID> 
        <Title>Mr.</Title> 
    <First>James</First> 
    <Last>cook</Last> 
    </name> 
    <name> 
        <ID>2</ID> 
        <Title>Mrs.</Title> 
    <First>Anne</First> 
    <Last>Thompson</Last> 
    </name> 
    <name> 
        <ID>3</ID> 
        <Title>Dr.</Title> 
    <First>David</First> 
    <Last>Balmer</Last> 
    </name> 
    <name> 
        <ID>4</ID> 
        <Title>Prof.</Title> 
    <First>Ben</First> 
    <Last>Longmann</Last> 
    </name> 
</names> 

web.config

<?xml version="1.0"?>  
<!--   
    Note: As an alternative to hand editing this file you can use the   
    web admin tool to configure settings for your application. Use  
    the Website->Asp.Net Configuration option in Visual Studio.  
    A full list of settings and comments can be found in   
    machine.config.comments usually located in   
    \Windows\Microsoft.Net\Framework\v2.x\Config   
--> 
<configuration> 
    <configSections> 
        <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/> 
    <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.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>  
                <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>  
            </assemblies> 
        </compilation> 
        <!--  
            The <authentication> section enables configuration   
            of the security authentication mode 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="GenericErrorPage.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"/>  
            </controls> 
        </pages> 
        <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" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>  
        </httpHandlers> 
        <httpModules> 
            <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>  
        </httpModules> 
    </system.web> 
    <system.codedom> 
        <compilers> 
            <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">  
                <providerOption name="CompilerVersion" value="v3.5"/>  
                <providerOption name="WarnAsError" value="false"/>  
            </compiler> 
            <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="4" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">  
                <providerOption name="CompilerVersion" value="v3.5"/>  
                <providerOption name="OptionInfer" value="true"/>  
                <providerOption name="WarnAsError" value="false"/>  
            </compiler> 
        </compilers> 
    </system.codedom> 
    <!--   
        The system.webServer section is required for running ASP.NET AJAX under Internet  
        Information Services 7.0.  It is not necessary for previous version of IIS.  
    --> 
    <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"/>  
        </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" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>  
        </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> 
</configuration> 
 

How can I fix this behaviour. Basically I want to retain the user selected rows (note that I need multi row selection; restricting
to single row selection is not going to meet my requirements.)

Thanks.

 

 

Rafael Enriquez
Top achievements
Rank 1
 answered on 07 May 2010
2 answers
194 views
I have a page with a grid which allows paging by definition in the RadGrid tag.  I want to prevent the user from changing pages when they have initiated an edit because they will lose whatever changes they have entered on the form.  I have tried putting MasterTableView.AllowPaging = False in the NeedDataSource event handler.  This does take the paging controls off the page.  But, if the selected record is on anything but the first page of the form the record in Edit mode is the corresponding record on the first page.  Or, in other words, the user selects record 5 on the second page to edit but record 5 on the first page is put in edit mode.  The page works as expected for any record selected on the first page.

What is the recommended way to disable paging when a record has been selected to edit while preserving the relationship of the record selected for editing by the user?

Thanks, in advance, for any help.

Grant
Grant Fletcher
Top achievements
Rank 1
 answered on 07 May 2010
4 answers
166 views
hello,

how to keep the checked status of node's checkboxes after a postback?

thanks
Wyatt
Top achievements
Rank 1
 answered on 07 May 2010
1 answer
120 views
This issue can be duplcated on your RadScheduler demo site:
http://demos.telerik.com/aspnet-ajax/scheduler/examples/customization/defaultcs.aspx

Add at least 11 All Day appointments to calendar in either Daily or Week view.  The hourly content section begins shrinking.  At around 12 or 13 appopintments, the scroll bars and hourly content section shrink to virtual unusability, and eventually disappear entirely.

I have tried 2 different solutions via CSS:

1)
Modifying rsInnerFix fixes the height of the All Day area to 60px, and provide scroll bars, BUT the scroll bar appears INSIDE the space allocated for the days, causing the Mon/Tue/Wed/etc. columns to be misaligned.

div.rsInnerFix
{
overflow-x: hidden !important;
overflow-y: auto !important;
min-height: 0px !important;
max-height: 60px !important;
}


2)
Modifying rsTopWrap provides a scroll bar for the entire calendar, however, the scroll bar doesn't take effect until the number of All Day appoinments forces the Hourly section to it's very narrowest.  Adding one more All Day apointment then seems to expand the entire hourly section, removing it's own scroll bar in favor of the rsTopWrap div's scroll bar.

Do you have any code or CSS solution that will allow the All Day section to scroll gracefully?  Any solution needs to apply to the 2009 Q3 release, as customer constraints preclude an upgrade prior to their next major release/dev cycle.

div.rsTopWrap
{
overflow-x: hidden !important;
overflow-y: auto !important;
min-height: 0px !important;
max-height: 100% !important;
}

Thanks in advance for your time,
-Kevin
Peter
Telerik team
 answered on 07 May 2010
1 answer
76 views
Is there a way to determine which appointments apply to a particular date and time? Is there a way to do this without doing it in an ASP page?
Peter
Telerik team
 answered on 07 May 2010
Narrow your results
Selected tags
Tags
+? more
Top users last month
Hiba
Top achievements
Rank 1
Iron
Iron
Rob
Top achievements
Rank 3
Bronze
Bronze
Iron
Max
Top achievements
Rank 1
Veteran
Iron
Alina
Top achievements
Rank 1
Rakhee
Top achievements
Rank 1
Iron
Iron
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Hiba
Top achievements
Rank 1
Iron
Iron
Rob
Top achievements
Rank 3
Bronze
Bronze
Iron
Max
Top achievements
Rank 1
Veteran
Iron
Alina
Top achievements
Rank 1
Rakhee
Top achievements
Rank 1
Iron
Iron
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?