Steps to reproduce: Use the following markup and click set html button: <telerik:RadEditor ID="RadEditor1" runat="server" NewLineMode="Div"> <Content> <div><span style="font-family: 'Courier New';">test</span></div> <div><span style="font-family: 'Courier New';"> </span></div> <div><span style="font-family: 'Courier New';">test</span></div> </Content> </telerik:RadEditor> <button type="button" onclick="getSetHtml();return false;">set html</button> <script> function getSetHtml() { var editor = $find("RadEditor1"); var html = editor.get_html(true); editor.set_html(html); } </script> Actual: The white space character in the empty line is removed and the empty line is not rendered Expected: The space is not removed and the new line is rendered Workaround: <script> (function ($E) { var utils = $E.Utils; Telerik.Web.UI.Editor.TrackerBase.prototype.removeZeroWidthNodes = function () { var that = this, nodes = that.nodes, reZeroWidthChar = new RegExp("^[" + that._zeroWidthCharacter + "]+$"); var nodeValuePairs = that.nodeValuePairs = []; for (var i = 0; i < nodes.length; i++) { var node = nodes[i]; if (utils.isTextNode(node) && !that._isNodeRemoved(node)) { var nodeValue = node.nodeValue; if (reZeroWidthChar.test(nodeValue)) { nodeValuePairs.push({ node: node, value: node.nodeValue }); var parentBlockElement = utils.getBlockParent(node); var isInEmptyBlockElement = parentBlockElement && utils.isNodeEmptyRecursive(parentBlockElement); node.nodeValue = isInEmptyBlockElement ? "\u00A0" : ""; } else { that.removeFirstZeroWidthChar(node); } } } } })(Telerik.Web.UI.Editor); </script>
Hi! could you consider implemnet a custom radio button that for the selected shows and image instead of the default circle for the radio button and that include a access key to select the option. That can bind a datasource an configure columns for show the radio options in the image for example can bind a databound for the answers and configure that shows by 2 columns and the image for the radio selected and maybe you can configure if the image is in the left, right, top or bottom
Deleting of a table by delete or backspace key does not work when the selection contains only the table. Steps to reproduce: 1. Set the following content <p>test p1</p> <table> <tbody> <tr> <td>test</td> <td>test</td> </tr> </tbody> </table> <p>test p2</p> 2. Select the table only and press delete or backspace key Actual: Only the content has been deleted. Expected: The table and its content to be deleted. Workaround: <telerik:RadEditor ID="RadEditor1" runat="server"> </telerik:RadEditor> <script type="text/javascript"> (function () { var $T = Telerik.Web.UI; var utils = $T.Editor.Utils; var isTableSelected = function (selected) { if (utils.isTag(selected, "table")) { return true; } var table = utils.getElementParentByTag(selected, "TABLE"); return table && !!utils.getElementParentByCondition(selected, function (current) { return utils.isAncestorOrSelf(table, current) && utils.isSingleChild(current); }); }; // Fix for delete table by delete or backspace key var formatFragments = $T.Editor.DeleteSelectionCommand.prototype.formatFragments; $T.Editor.DeleteSelectionCommand.prototype.formatFragments = function (fragments) { var cmd = this; var selected = cmd.get_editor().getSelectedElement(); if (isTableSelected(selected) && fragments.length) { var table = utils.isTag(selected, "table") ? selected : utils.getElementParentByTag(selected, "TABLE"); var $table = $telerik.$(table); var data = $table.find("th,td"); var firstCell = data.first().get(0); var lastCell = data.last().get(0); var firstFragment = fragments[0]; var lastFragment = fragments[fragments.length - 1]; var firstSelected = firstFragment.nodes[0]; var lastSelected = lastFragment.nodes[lastFragment.nodes.length - 1]; if ((firstSelected == firstCell || firstSelected == firstCell.firstChild || cmd.isMarker(firstCell.firstChild)) && (lastSelected == lastCell || lastSelected == lastCell.lastChild)) { $table.find("." + cmd.getMarkersCssClass()).insertBefore(table); $telerik.$(table).remove(); return; } } formatFragments.call(cmd, fragments); }; // Fix for select and delete a table by the DomInspector in Chrome var Modules = $T.Editor.Modules; if (Modules && Modules.RadEditorDomInspector) { var removeSelectedElement = Modules.RadEditorDomInspector.prototype.removeSelectedElement; Modules.RadEditorDomInspector.prototype.removeSelectedElement = function (element) { if (isTableSelected(element)) { element = utils.isTag(element, "table") ? element : utils.getElementParentByTag(element, "TABLE"); } removeSelectedElement.call(this, element); }; } })(); </script>
Hi! would you consider add a new control for time line for add events in a timeline something like this https://timeline.codeplex.com/
The CommandArgument value of RadButton is not available in the ClientClicking eventargs of RadButton. The get_commandName() method of the event arguments always returns null. The issue is introduced in Q1 2016 release. Steps to reproduce: Run the following code and click the button. <script type="text/javascript"> function btnEdit_Clicking(sender, eventArgs) { alert(eventArgs.get_commandArgument()); } </script> <telerik:RadButton ID="RadButton2" AutoPostBack="false" runat="server" Text="Click Me" OnClientClicking="btnEdit_Clicking" CommandArgument="Name"> </telerik:RadButton>
It would be nice to have a CardView type panel control. This could simply be a dezoned raddock control that is optionally missing the header. I am using some custom CSS for this now so that when the mouse moves over the div the shadow deepens to indicate selection. It would be nice to adjust the elevation as well. You can kind of get this now but taking a radwindow or a raddock but a dedicated control would be nice.
IE browser handles backspaces at some extent, but causes undesired HTML formatting when the entire UL|OL is wrapped in another DOM element. RadEditor can reuse the DeleteCommand implementation in order to bypass browser's behavior and give more reliable results. The following override can show you how you can handle this on your own and correct the browser result (Note that the script should be loaded after the RadEditor scripts in order to work): <telerik:RadEditor runat="server" ID="RadEditor1"> <Content> <div> <ul> <li>Purple</li> <li></li> </ul> </div> </Content> </telerik:RadEditor> <script> var originalApplyFix = Telerik.Web.UI.Editor.DeleteFix.prototype.applyFix; Telerik.Web.UI.Editor.DeleteFix.prototype.applyFix = function (e) { var that = this; var $E = Telerik.Web.UI.Editor; var utils = $E.Utils; var range = that._getRange(); originalApplyFix.call(that, e); if (Telerik.Web.Browser.ie) { var startContainer = range.startContainer; if (utils.isTag(startContainer, "li") && utils.isEmptyDom(startContainer) && !startContainer.nextElementSibling) { var outdent = new $E.OutdentCommand(that.editor); outdent.onExecute(); $telerik.preventDefault(e); } } }; </script>