Skip to content

Commit 318bbfa

Browse files
author
User Jenkins
committed
Sync with Kendo UI Professional
1 parent 0a33f58 commit 318bbfa

File tree

9 files changed

+249
-10
lines changed

9 files changed

+249
-10
lines changed

docs-aspnet/compatibility/visual-studio-support.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ The table below describes the minimum required version of Visual Studio based on
1313

1414
| .NET CORE SDK | VISUAL STUDIO |
1515
| :---------------- | :---------------------------- |
16-
| 5.0 | Visual Studio 2019 version 16.8 or higher. |
16+
| 5.0 | Visual Studio 2022, or Visual Studio 2019 version 16.8 or higher. |
1717
| 3.1 | Visual Studio 2019 version 16.4 or higher. |
1818
| 3.0 | Visual Studio 2019 version 16.3 or higher. |
1919
| 2.2 | Visual Studio 2017 version 15.9 or higher. |

docs-aspnet/getting-started-mvc/installation/overview.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ An alternative approach is to use [NuGet]({% slug aspnetmvc_nuget %}) and to ins
2727

2828
* [A current .NET Framework version](https://dotnet.microsoft.com/download/dotnet-framework)
2929

30-
* [Visual Studio](https://www.visualstudio.com/downloads/)
30+
* [Visual Studio](https://www.visualstudio.com/downloads/) 2012 or later
3131

3232
* Microsoft SQL Server Express LocalDB
3333

docs-aspnet/getting-started-mvc/vs-integration/introduction.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ The extensions handle the following major points:
1616
* Project [Creation]({% slug newprojectwizards_visualstudio_aspnetmvc %}) and [Configuration]({% slug projectwizardconfig_visualstudio_aspnetmvc %}) Wizards—Web asset management, adding the required settings to `web.config`, changing the theme.
1717
* Project [Upgrade]({% slug projectwizardupgrade_visualstudio_aspnetmvc %})—Upgrading Telerik UI for ASP.NET MVC to a new version.
1818

19-
The Telerik UI for ASP.NET MVC VS Extensions are distributed with the Telerik UI for ASP.NET MVC installer. They support VS 2010, 2012, 2013, 2015, 2017, and 2019, which handle ASP.NET MVC 4 and 5 applications.
19+
The Telerik UI for ASP.NET MVC VS Extensions are distributed with the Telerik UI for ASP.NET MVC installer. They support Visual Studio 2022, 2019, 2017, 2015, 2013 and 2012.
2020

2121
> VS Express editions are not supported.
2222

docs-aspnet/installation/msi-install.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ This article describes how to download and install Telerik UI for ASP.NET Core o
1818
* The Telerik UI for ASP.NET Core **Sample Application** distributed with the same package requires:
1919

2020
* [.NET Core](https://dotnet.microsoft.com/learn/dotnet/hello-world-tutorial/install)
21-
* [Visual Studio](https://www.visualstudio.com/downloads/) with completely installed `.NET Core cross-platform development` workload.
21+
* [Visual Studio](https://www.visualstudio.com/downloads/) with completely installed `.NET Core cross-platform development` workload. See the Supported [Visual Studio Versions]({% slug visualstudiosupport_core %}).
2222

2323
## Download
2424

docs-aspnet/installation/vs-integration/introduction.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ position: 1
1111

1212
The {{ site.product_long }} Visual Studio (VS) Extensions enhance the experience in developing MVC web applications with {{ site.product }}.
1313
The VS Extensions come with handy templates that ease the creation of new projects. They also help you to add {{ site.product_short }} to an existing project or to upgrade the {{ site.product_short }} version.
14-
The {{ site.product_short }} VS extensions support VS 2017 and 2019 and are distributed with the {{ site.product }} installer.
14+
The {{ site.product_short }} VS extensions support VS 2022, 2019 and 2017, and are distributed with the {{ site.product }} installer.
1515

1616
### Benefits
1717

docs-aspnet/introduction.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ Telerik {{ site.product_short }} supports:
6868
* [C#](https://msdn.microsoft.com/en-us/library/aa288436(v=vs.71).aspx) and [VB.NET](http://www.tutorialspoint.com/vb.net/).
6969
* [SharePoint 2010](https://msdn.microsoft.com/en-us/library/office/dd776256(v=office.12).aspx) and later.
7070

71-
The Telerik UI for ASP.NET MVC Visual Studio extensions support Visual Studio 2015 and later.
71+
The Telerik UI for ASP.NET MVC Visual Studio extensions support Visual Studio 2012 and later.
7272
{% endif %}
7373

7474
### Monitoring the Progress Live Services

docs/backwards-compatibility/2021-backward-compatibility.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,14 @@ position: 1
1010

1111
This article lists the breaking or important changes in the 2021 releases of Kendo UI.
1212

13+
## Kendo UI 2021 R3
14+
15+
> Important change
16+
17+
**MultiSelect**
18+
19+
As of the 2021 R3 release the MultiSelect in virtualization scenario will no longer support `Shift` + `Arrow` key selection as it is described in the [Keyboard navigation demo](https://demos.telerik.com/kendo-ui/multiselect/keyboard-navigation). That is because when going from one virtual page of MultiSelect items to another the items indexes are reused. As the range selection functionality relies on indexes, executing it via the `Shift` + `Arrow` combination may result in improper selection in the widget. That is why it has been disabled for virtualized MultiSelect widgets.
20+
1321
## Kendo UI 2021 R2 SP1
1422

1523
> Important change

src/kendo.multiselect.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -903,7 +903,7 @@ var __meta__ = { // jshint ignore:line
903903
if (!listView.focus()) {
904904
listView.focusLast();
905905
} else {
906-
if (e.shiftKey) {
906+
if (e.shiftKey && !that.options.virtual) {
907907
this._multipleSelection = true;
908908
that._selectRange(activeItemIdx, listView.getElementIndex(listView.focus().first()) + dir);
909909
}
@@ -923,7 +923,7 @@ var __meta__ = { // jshint ignore:line
923923
if (!listView.focus()) {
924924
that.close();
925925
} else {
926-
if (e.shiftKey) {
926+
if (e.shiftKey && !that.options.virtual) {
927927
this._multipleSelection = true;
928928
that._selectRange(activeItemIdx, listView.getElementIndex(listView.focus().first()) + dir);
929929
}
@@ -981,7 +981,7 @@ var __meta__ = { // jshint ignore:line
981981
that._change();
982982
});
983983
e.preventDefault();
984-
} else if (key === keys.SPACEBAR && e.shiftKey && visible) {
984+
} else if (key === keys.SPACEBAR && e.shiftKey && visible && !that.options.virtual) {
985985
var activeIndex = listView.getElementIndex(that._getActiveItem());
986986
var currentIndex = listView.getElementIndex(listView.focus());
987987

tests/multiselect/navigation.js

Lines changed: 232 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
(function() {
22
var MultiSelect = kendo.ui.MultiSelect,
33
keys = kendo.keys,
4-
select;
4+
select,
5+
CONTAINER_HEIGHT = 200;;
56

67
function populateSelect(length) {
78
var options = [];
@@ -543,6 +544,236 @@
543544
});
544545
});
545546

547+
describe("kendo.ui.MultiSelect navigation in virtual scenario", function () {
548+
function generateData(parameters) {
549+
var items = [];
550+
for (var i = parameters.skip, len = parameters.skip + parameters.take; i < len; i++) {
551+
items.push({
552+
id: i,
553+
value: i,
554+
text: "Item " + i
555+
});
556+
}
557+
558+
return items;
559+
}
560+
561+
function createAsyncDataSource(options) {
562+
options = options || {};
563+
var transport = {
564+
read: function(options) {
565+
setTimeout(function() {
566+
options.success({ data: generateData(options.data), total: 300 });
567+
}, 0);
568+
}
569+
};
570+
571+
return new kendo.data.DataSource({
572+
transport: options.transport || transport,
573+
serverPaging: true,
574+
serverFiltering: true,
575+
pageSize: 40,
576+
schema: {
577+
data: "data",
578+
total: "total"
579+
}
580+
});
581+
}
582+
583+
beforeEach(function() {
584+
kendo.ns = "";
585+
select = $("<select multiple />").appendTo(Mocha.fixture);
586+
});
587+
afterEach(function() {
588+
if (select.data("kendoMultiSelect")) {
589+
select.data("kendoMultiSelect").destroy();
590+
}
591+
592+
select.parents(".k-widget").remove();
593+
});
594+
595+
it("MultiSelect selects all on CTRL+A", function(done) {
596+
var multiselect = new MultiSelect(select, {
597+
height: CONTAINER_HEIGHT,
598+
animation: false,
599+
dataTextField: "text",
600+
dataValueField: "value",
601+
dataSource: createAsyncDataSource(),
602+
virtual: {
603+
valueMapper: function(o) { o.success(o.value); },
604+
itemHeight: 40
605+
}
606+
});
607+
608+
multiselect.one("dataBound", function() {
609+
multiselect.open();
610+
611+
multiselect.input.trigger({
612+
type: "keydown",
613+
keyCode: 65,
614+
ctrlKey: true
615+
});
616+
617+
assert.equal(multiselect.tagList.children().length, 0);
618+
done();
619+
});
620+
});
621+
622+
it("MultiSelect selects multiple items on SHIFT+DOWN", function (done) {
623+
var multiselect = new MultiSelect(select, {
624+
height: CONTAINER_HEIGHT,
625+
animation: false,
626+
dataTextField: "text",
627+
dataValueField: "value",
628+
dataSource: createAsyncDataSource(),
629+
virtual: {
630+
valueMapper: function(o) { o.success(o.value); },
631+
itemHeight: 40
632+
}
633+
});
634+
635+
multiselect.one("dataBound", function() {
636+
multiselect.open();
637+
638+
multiselect.input.trigger({
639+
type: "keydown",
640+
keyCode: keys.DOWN
641+
});
642+
643+
multiselect.input.trigger({
644+
type: "keydown",
645+
keyCode: keys.DOWN,
646+
shiftKey: true
647+
});
648+
649+
multiselect.input.trigger({
650+
type: "keydown",
651+
keyCode: keys.DOWN,
652+
shiftKey: true
653+
});
654+
655+
assert.equal(multiselect.tagList.children().length, 0);
656+
done();
657+
});
658+
});
659+
660+
it("MultiSelect selects multiple items on SHIFT+UP", function (done) {
661+
var multiselect = new MultiSelect(select, {
662+
height: CONTAINER_HEIGHT,
663+
animation: false,
664+
dataTextField: "text",
665+
dataValueField: "value",
666+
dataSource: createAsyncDataSource(),
667+
virtual: {
668+
valueMapper: function(o) { o.success(o.value); },
669+
itemHeight: 40
670+
}
671+
});
672+
673+
multiselect.one("dataBound", function() {
674+
multiselect.open();
675+
676+
multiselect.input.trigger({
677+
type: "keydown",
678+
keyCode: keys.DOWN
679+
});
680+
multiselect.input.trigger({
681+
type: "keydown",
682+
keyCode: keys.DOWN
683+
});
684+
685+
multiselect.input.trigger({
686+
type: "keydown",
687+
keyCode: keys.UP,
688+
shiftKey: true
689+
});
690+
691+
multiselect.input.trigger({
692+
type: "keydown",
693+
keyCode: keys.UP,
694+
shiftKey: true
695+
});
696+
697+
assert.equal(multiselect.tagList.children().length, 0);
698+
done();
699+
});
700+
});
701+
702+
it("MultiSelect selects multiple items on CTRL+SHIFT+END", function (done) {
703+
var multiselect = new MultiSelect(select, {
704+
height: CONTAINER_HEIGHT,
705+
animation: false,
706+
dataTextField: "text",
707+
dataValueField: "value",
708+
dataSource: createAsyncDataSource(),
709+
virtual: {
710+
valueMapper: function(o) { o.success(o.value); },
711+
itemHeight: 40
712+
}
713+
});
714+
715+
multiselect.one("dataBound", function() {
716+
multiselect.open();
717+
718+
multiselect.input.trigger({
719+
type: "keydown",
720+
keyCode: keys.DOWN
721+
});
722+
723+
multiselect.input.trigger({
724+
type: "keydown",
725+
keyCode: keys.END,
726+
ctrlKey: true,
727+
shiftKey: true
728+
});
729+
730+
assert.equal(multiselect.tagList.children().length, 0);
731+
done();
732+
});
733+
});
734+
735+
it("MultiSelect selects multiple items on CTRL+SHIFT+HOME", function (done) {
736+
var multiselect = new MultiSelect(select, {
737+
height: CONTAINER_HEIGHT,
738+
animation: false,
739+
dataTextField: "text",
740+
dataValueField: "value",
741+
dataSource: createAsyncDataSource(),
742+
virtual: {
743+
valueMapper: function(o) { o.success(o.value); },
744+
itemHeight: 40
745+
}
746+
});
747+
748+
multiselect.one("dataBound", function() {
749+
multiselect.open();
750+
751+
multiselect.input.trigger({
752+
type: "keydown",
753+
keyCode: keys.DOWN
754+
});
755+
multiselect.input.trigger({
756+
type: "keydown",
757+
keyCode: keys.DOWN
758+
});
759+
multiselect.input.trigger({
760+
type: "keydown",
761+
keyCode: keys.DOWN
762+
});
763+
764+
multiselect.input.trigger({
765+
type: "keydown",
766+
keyCode: keys.HOME,
767+
ctrlKey: true,
768+
shiftKey: true
769+
});
770+
771+
assert.equal(multiselect.tagList.children().length, 0);
772+
done();
773+
});
774+
});
775+
});
776+
546777
describe("kendo.ui.MultiSelect tag navigation", function () {
547778
beforeEach(function() {
548779
select = $("<select multiple=multiple/>").appendTo(document.body);

0 commit comments

Comments
 (0)