diff --git a/docs-aspnet/knowledge-base/chart-rounded-columns.md b/docs-aspnet/knowledge-base/chart-rounded-columns.md new file mode 100644 index 00000000000..33e68f246d4 --- /dev/null +++ b/docs-aspnet/knowledge-base/chart-rounded-columns.md @@ -0,0 +1,299 @@ +--- +title: Rounded corners for Chart columns +page_title: Rounded corners for Bar Chart columns +description: "An example on how to apply rounded corners styling to {{ site.product }} Chart columns." +type: how-to +slug: chart-rounded-corners +tags: progress, telerik, aspnet, mvc, core, chart, rounded, corners +res_type: kb +component: chart +--- + +## Environment + + + + + + +
Product{{ site.product }} Chart
+ +## Description + +How can I change {{ site.product }} Chart columns to appear with rounded corners? + +## Solution + +You can achieve this requirement using the .Visual() capability offered by the component. Check the full implementation in this live REPL sample: + +[Chart Example: All Corners Rounded](https://netcorerepl.telerik.com/myPlcPlg30MY8AnT10) + +The result looks like this: + +![chart-rounded-corners](images/chart-rounded-corners.png) + +```Razor +
+ @(Html.Kendo().Chart() + .Name("chart") + .Title("Orders Status") + .Legend(legend => legend + .Position(ChartLegendPosition.Top) + ) + .SeriesDefaults(seriesDefaults => seriesDefaults + .Column().Visual("columnVisual") + .Highlight(highlight => highlight.Toggle("toggleHandler")) + ) + .Series(series => { + series.Column(new double[] { 440000 }) + .Name("Active").Color("#229954"); + series.Column(new double[] { 180000 }) + .Name("Delayed").Color("#CD5C5C"); + series.Column(new double[] { 230000 }) + .Name("Delivered").Color("#145a32"); + }) + .CategoryAxis(axis => axis + .Labels(labels => labels.Rotation(-90)) + .MajorGridLines(lines => lines.Visible(false)) + ) + .ValueAxis(axis => axis.Numeric() + .Labels(labels => labels.Format("{0:N0}")) + .MajorUnit(50000) + .Line(line => line.Visible(false)) + ) + .Tooltip(tooltip => tooltip + .Visible(true) + .Format("{0:N0}") + ) + ) +
+ +``` + +It is also possible to have only the top corners rounded: + +[Chart Example: Top Corners Rounded](https://netcorerepl.telerik.com/woPPcpOm0806bKQP47) + +Here is the result: + +![chart-rounded-corners](images/chart-top-corners.png) + +```Razor +
+ @(Html.Kendo().Chart() + .Name("chart") + .Title("Orders Status") + .SeriesDefaults(seriesDefaults => seriesDefaults + .Column().Visual("columnVisual") + .Highlight(highlight => highlight.Toggle("toggleHandler")) + ) + .Series(series => { + series.Column(new double[] { 440000 }) + .Name("Active").Color("#229954"); + series.Column(new double[] { 180000 }) + .Name("Delayed").Color("#CD5C5C"); + series.Column(new double[] { 230000 }) + .Name("Delivered").Color("#145a32"); + }) + .CategoryAxis(axis => axis + .Labels(labels => labels.Rotation(-90)) + .MajorGridLines(lines => lines.Visible(false)) + ) + .ValueAxis(axis => axis.Numeric() + .Labels(labels => labels.Format("{0:N0}")) + .MajorUnit(50000) + .Line(line => line.Visible(false)) + ) + .Tooltip(tooltip => tooltip + .Visible(true) + .Format("{0:N0}") + ) + ) +
+ +``` + +## See Also + +* [Telerik UI for {{ site.framework }} Knowledge Base](https://docs.telerik.com/{{ site.platform }}/knowledge-base) diff --git a/docs-aspnet/knowledge-base/images/chart-rounded-corners.png b/docs-aspnet/knowledge-base/images/chart-rounded-corners.png new file mode 100644 index 00000000000..1c58b13d040 Binary files /dev/null and b/docs-aspnet/knowledge-base/images/chart-rounded-corners.png differ diff --git a/docs-aspnet/knowledge-base/images/chart-top-corners.png b/docs-aspnet/knowledge-base/images/chart-top-corners.png new file mode 100644 index 00000000000..7c7ede0ff0d Binary files /dev/null and b/docs-aspnet/knowledge-base/images/chart-top-corners.png differ diff --git a/docs-aspnet/security/security.md b/docs-aspnet/security/security.md index e0592e1ab46..2436267b902 100644 --- a/docs-aspnet/security/security.md +++ b/docs-aspnet/security/security.md @@ -33,13 +33,22 @@ We value the contributions of security researchers and ethical hackers. If a res |------------------|------------------------| | First Response | 7 days | | Time to Triage | 10 days | -| Time to Resolution| Depends on severity | +| Time to Resolution| [Depends on severity](#vulnerability-remediation-guidelines) | For more information, visit: - [Bugcrowd Vulnerability Disclosure Program](https://bugcrowd.com/engagements/devtools-vdp) - [Progress Trust Center](https://www.progress.com/trust-center) - [Vulnerability Reporting Policy](https://www.progress.com/trust-center/vulnerability-reporting-policy) +## Vulnerability Remediation Guidelines + +Progress follows defined timelines for remediating vulnerabilities based on their severity levels, ensuring a structured and efficient approach to maintaining security across all products. These guidelines are aligned with CVSS (Common Vulnerability Scoring System) scoring: + +- **Critical scored issues (CVSS 9.0+):** Resolved within **30 days**. +- **High scored issues (CVSS 7.0–8.9):** Resolved within **60 days**. +- **Medium or lower scored issues (CVSS < 7):** Resolved within **90–120 days**, depending on the score. + +While these are not strict SLA (Service Level Agreement), they serve as a commitment to providing timely resolutions for identified vulnerabilities. ## What We Do to Mitigate Risk diff --git a/docs/knowledge-base/customize-grouping-field-template-scheduler.md b/docs/knowledge-base/customize-grouping-field-template-scheduler.md new file mode 100644 index 00000000000..3d5f1a24976 --- /dev/null +++ b/docs/knowledge-base/customize-grouping-field-template-scheduler.md @@ -0,0 +1,61 @@ +--- +title: Adding Custom HTML to Grouping Field Template in Scheduler +description: Learn how to customize the Scheduler's grouping column with custom HTML, such as adding buttons or links, using the groupHeaderTemplate configuration. +type: how-to +page_title: How to Customize Grouping Field Template in Scheduler with Custom HTML +slug: customize-grouping-field-template-scheduler +tags: kendo-ui, scheduler, groupheadertemplate, custom-html, customization +res_type: kb +ticketid: 1671258 +--- + +## Environment + + + + + + + + + + + + +
ProductScheduler for Progress® Kendo UI®
Version2024.4.1112
+ +## Description + +I want to modify the grouping column in the Scheduler with custom HTML, such as adding a button or a link with the ID of the group. + +This KB article also answers the following questions: +- How can I add a custom button to the Scheduler's group header? +- Is it possible to insert custom HTML into the Scheduler's grouping template? +- Can I customize the appearance of the Scheduler's group headers with HTML? + +## Solution + +To customize the grouping column in the Scheduler with custom HTML, such as adding buttons or links, utilize the [groupHeaderTemplate](https://docs.telerik.com/kendo-ui/api/javascript/ui/scheduler/configuration/group#groupheadertemplate) configuration option. This option allows the insertion of custom HTML content into the group header cells based on specific conditions or for specific resources. + +Below is an example demonstrating how to add a custom button to the group header cell for a specific resource using the `groupHeaderTemplate` configuration: + +```html + +``` + +In this example, a custom button is added to the group header cell when the grouping is done based on the `roomId` field. You can modify the condition and content as needed to suit your particular requirements. + +For a practical implementation of this solution, refer to this [example](https://dojo.telerik.com/MsoTFBhM/3). + +## See Also + +- [Scheduler Group Header Template Configuration](https://docs.telerik.com/kendo-ui/api/javascript/ui/scheduler/configuration/group#groupheadertemplate) +- [Scheduler Overview](https://docs.telerik.com/kendo-ui/controls/scheduling/scheduler/overview) +- [Templates Overview](https://docs.telerik.com/kendo-ui/framework/templates/overview) diff --git a/docs/security/security-information.md b/docs/security/security-information.md index e7cdb420cb3..ddc309f04b2 100644 --- a/docs/security/security-information.md +++ b/docs/security/security-information.md @@ -34,13 +34,22 @@ We value the contributions of security researchers and ethical hackers. If a res |------------------|------------------------| | First Response | 7 days | | Time to Triage | 10 days | -| Time to Resolution| Depends on severity | +| Time to Resolution| [Depends on severity](#vulnerability-remediation-guidelines) | For more information, visit: - [Bugcrowd Vulnerability Disclosure Program](https://bugcrowd.com/engagements/devtools-vdp) - [Progress Trust Center](https://www.progress.com/trust-center) - [Vulnerability Reporting Policy](https://www.progress.com/trust-center/vulnerability-reporting-policy) +## Vulnerability Remediation Guidelines + +Progress follows defined timelines for remediating vulnerabilities based on their severity levels, ensuring a structured and efficient approach to maintaining security across all products. These guidelines are aligned with CVSS (Common Vulnerability Scoring System) scoring: + +- **Critical scored issues (CVSS 9.0+):** Resolved within **30 days**. +- **High scored issues (CVSS 7.0–8.9):** Resolved within **60 days**. +- **Medium or lower scored issues (CVSS < 7):** Resolved within **90–120 days**, depending on the score. + +While these are not strict SLA (Service Level Agreement), they serve as a commitment to providing timely resolutions for identified vulnerabilities. ## What We Do to Mitigate Risk diff --git a/src/kendo.binder.js b/src/kendo.binder.js index 90dc771d5c0..cd47c493403 100644 --- a/src/kendo.binder.js +++ b/src/kendo.binder.js @@ -980,10 +980,10 @@ export const __meta__ = { source = that.bindings[bindingName].get(); - if (widget[fieldName] instanceof kendo.data.DataSource && widget[fieldName] != source) { + if (widget[fieldName] instanceof kendo.data.DataSource && widget[fieldName] != source && source) { if (source instanceof kendo.data.DataSource) { widget[setter](source); - } else if (source && source._dataSource) { + } else if (source._dataSource) { widget[setter](source._dataSource); } else { select = kendo.ui.Select && widget instanceof kendo.ui.Select; diff --git a/src/kendo.splitter.js b/src/kendo.splitter.js index 0895d90dce6..e59c6256c27 100644 --- a/src/kendo.splitter.js +++ b/src/kendo.splitter.js @@ -23,6 +23,7 @@ export const __meta__ = { CONTENTLOAD = "contentLoad", ERROR = "error", RESIZE = "resize", + RESIZING = "resizing", LAYOUTCHANGE = "layoutChange", HORIZONTAL = "horizontal", VERTICAL = "vertical", @@ -134,6 +135,7 @@ export const __meta__ = { CONTENTLOAD, ERROR, RESIZE, + RESIZING, LAYOUTCHANGE ], @@ -823,6 +825,8 @@ export const __meta__ = { paneElement.style[PANE_SIZING_PROP] = size; $(paneElement).data("pane").size = size; + + that.trigger(RESIZING, { pane: paneElement }); }, _getPaneSizes: function(paneIndex) { diff --git a/src/kendo.tabstrip.js b/src/kendo.tabstrip.js index 0de80037503..d47cabb2e6d 100644 --- a/src/kendo.tabstrip.js +++ b/src/kendo.tabstrip.js @@ -171,7 +171,7 @@ export const __meta__ = { } function scrollButtonHtml(buttonClass, iconClass) { - return ``; + return ``; } function ajaxXhr() { @@ -897,6 +897,8 @@ export const __meta__ = { if (options.navigatable) { that.tabGroup.on("keydown" + NS, that._keyDownProxy); } + + $(window).on('resize' + NS, that._resize.bind(that)); }, _click: function(item) { @@ -1202,6 +1204,14 @@ export const __meta__ = { this._scrollable(); }, + _getChildrenWidth: function(element) { + let width = 0; + element.children().each(function() { + width += outerWidth($(this)); + }); + return width; + }, + _scrollable: function() { var that = this, options = that.options, @@ -1216,8 +1226,9 @@ export const __meta__ = { wrapperOffsetWidth = that.wrapper[0].offsetWidth; tabGroupScrollWidth = that.tabGroup[0].scrollWidth; + const enableScroll = (tabGroupScrollWidth > wrapperOffsetWidth) || (that._getChildrenWidth(that.tabGroup) > that.tabGroup.outerWidth()); - if (tabGroupScrollWidth > wrapperOffsetWidth && !that._scrollableModeActive) { + if (enableScroll && !that._scrollableModeActive) { that._nowScrollingTabs = false; that._isRtl = kendo.support.isRtl(that.element); var mouseDown = kendo.support.touch ? "touchstart" : "mousedown"; @@ -1248,7 +1259,7 @@ export const __meta__ = { that._scrollableModeActive = true; that._toggleScrollButtons(); - } else if (that._scrollableModeActive && tabGroupScrollWidth <= wrapperOffsetWidth) { + } else if (that._scrollableModeActive && !enableScroll) { that._scrollableModeActive = false; that.wrapper.removeClass("k-tabstrip-scrollable");