From 17b56bb559c5209e02691631f4a0e903e0635478 Mon Sep 17 00:00:00 2001 From: Dirk von Gruenigen Date: Sat, 23 Jul 2011 01:22:45 +0200 Subject: [PATCH] Modified the converter, so that it also convert aspx-imports to razor-usings. --- ...ik.RazorConverter.Tests.Integration.csproj | 6 ++- .../TestCases/TestCase09.cshtml | 3 +- .../TestCases/TestCase25.aspx.txt | 42 +++++++++++++++++++ .../TestCases/TestCase25.cshtml | 38 +++++++++++++++++ .../Telerik.RazorConverter.Tests.csproj | 4 +- .../WebForms/WebFormsParserTests.cs | 1 + Telerik.RazorConverter.sln | 4 ++ .../Razor/Converters/DirectiveConverter.cs | 32 ++++++++++---- .../Converters/WebFormsToRazorConverter.cs | 5 +++ .../WebForms/DOM/DirectiveType.cs | 1 + .../WebForms/DOM/WebFormsNodeFactory.cs | 4 ++ .../WebForms/Parsing/WebFormsParser.cs | 4 ++ aspx2razor/aspx2razor.csproj | 2 +- 13 files changed, 131 insertions(+), 15 deletions(-) create mode 100644 Telerik.RazorConverter.Tests.Integration/TestCases/TestCase25.aspx.txt create mode 100644 Telerik.RazorConverter.Tests.Integration/TestCases/TestCase25.cshtml diff --git a/Telerik.RazorConverter.Tests.Integration/Telerik.RazorConverter.Tests.Integration.csproj b/Telerik.RazorConverter.Tests.Integration/Telerik.RazorConverter.Tests.Integration.csproj index a4a524a..0002769 100644 --- a/Telerik.RazorConverter.Tests.Integration/Telerik.RazorConverter.Tests.Integration.csproj +++ b/Telerik.RazorConverter.Tests.Integration/Telerik.RazorConverter.Tests.Integration.csproj @@ -67,6 +67,7 @@ ASPXCodeBehind PreserveNewest + PreserveNewest @@ -224,6 +225,7 @@ ASPXCodeBehind PreserveNewest + @@ -233,11 +235,11 @@ {B30D861F-7D12-436A-BC5A-930D48291037} - RazorConverter.Tests.Common + Telerik.RazorConverter.Tests.Common {88630458-D5BE-43B0-A7FB-BC0DFE6CB62E} - RazorConverter + Telerik.RazorConverter diff --git a/Telerik.RazorConverter.Tests.Integration/TestCases/TestCase09.cshtml b/Telerik.RazorConverter.Tests.Integration/TestCases/TestCase09.cshtml index 1248373..c513e0e 100644 --- a/Telerik.RazorConverter.Tests.Integration/TestCases/TestCase09.cshtml +++ b/Telerik.RazorConverter.Tests.Integration/TestCases/TestCase09.cshtml @@ -1,4 +1,5 @@ -@if (ViewData["telerik.web.mvc.products.examples"] != null) +@using Telerik.Web.Mvc +@if (ViewData["telerik.web.mvc.products.examples"] != null) { Html.Telerik().PanelBar() .Name("navigation-product-examples") diff --git a/Telerik.RazorConverter.Tests.Integration/TestCases/TestCase25.aspx.txt b/Telerik.RazorConverter.Tests.Integration/TestCases/TestCase25.aspx.txt new file mode 100644 index 0000000..bdd3c44 --- /dev/null +++ b/Telerik.RazorConverter.Tests.Integration/TestCases/TestCase25.aspx.txt @@ -0,0 +1,42 @@ +<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage>" %> +<%@ Import Namespace="Project.Namespace.To.Models" %> + + +<% using (Html.Configurator("The grid should...") + .PostTo("FirstLook", "Grid") + .Begin()) + { %> +
    +
  • <%= Html.CheckBox("ajax", true, "make AJAX requests")%>
  • +
  • <%= Html.CheckBox("grouping", true, "allow grouping of data")%>
  • +
  • <%= Html.CheckBox("filtering", true, "allow filtering of data")%>
  • +
  • <%= Html.CheckBox("paging", true, "have pages with 10 items")%>
  • +
  • <%= Html.CheckBox("scrolling", true, "show a scrollbar when there are many items")%>
  • +
  • <%= Html.CheckBox("sorting", true, "allow sorting of data")%>
  • +
  • <%= Html.CheckBox("showFooter", true, "show footer")%>
  • +
+ +<% } %> + +<%= Html.Telerik().Grid(Model) + .Name("Grid") + .Columns(columns => + { + columns.Bound(o => o.OrderID).Width(100); + columns.Bound(o => o.ContactName).Width(200); + columns.Bound(o => o.ShipAddress); + columns.Bound(o => o.OrderDate).Format("{0:MM/dd/yyyy}").Width(120); + }) + .DataBinding(dataBinding => + { + dataBinding.Server().Select("FirstLook", "Grid", new { ajax = ViewData["ajax"] }); + dataBinding.Ajax().Select("_FirstLook", "Grid").Enabled((bool)ViewData["ajax"]); + }) + .Scrollable(scrolling => scrolling.Enabled((bool)ViewData["scrolling"])) + .Sortable(sorting => sorting.Enabled((bool)ViewData["sorting"])) + .Pageable(paging => paging.Enabled((bool)ViewData["paging"])) + .Filterable(filtering => filtering.Enabled((bool)ViewData["filtering"])) + .Groupable(grouping => grouping.Enabled((bool)ViewData["grouping"])) + .Footer((bool)ViewData["showFooter"]) +%> +
diff --git a/Telerik.RazorConverter.Tests.Integration/TestCases/TestCase25.cshtml b/Telerik.RazorConverter.Tests.Integration/TestCases/TestCase25.cshtml new file mode 100644 index 0000000..a389c87 --- /dev/null +++ b/Telerik.RazorConverter.Tests.Integration/TestCases/TestCase25.cshtml @@ -0,0 +1,38 @@ +@model IEnumerable +@using Project.Namespace.To.Models +@using (Html.Configurator("The grid should...") + .PostTo("FirstLook", "Grid") + .Begin()) + { +
    +
  • @Html.CheckBox("ajax", true, "make AJAX requests")
  • +
  • @Html.CheckBox("grouping", true, "allow grouping of data")
  • +
  • @Html.CheckBox("filtering", true, "allow filtering of data")
  • +
  • @Html.CheckBox("paging", true, "have pages with 10 items")
  • +
  • @Html.CheckBox("scrolling", true, "show a scrollbar when there are many items")
  • +
  • @Html.CheckBox("sorting", true, "allow sorting of data")
  • +
  • @Html.CheckBox("showFooter", true, "show footer")
  • +
+ +} +@(Html.Telerik().Grid(Model) + .Name("Grid") + .Columns(columns => + { + columns.Bound(o => o.OrderID).Width(100); + columns.Bound(o => o.ContactName).Width(200); + columns.Bound(o => o.ShipAddress); + columns.Bound(o => o.OrderDate).Format("{0:MM/dd/yyyy}").Width(120); + }) + .DataBinding(dataBinding => + { + dataBinding.Server().Select("FirstLook", "Grid", new { ajax = ViewData["ajax"] }); + dataBinding.Ajax().Select("_FirstLook", "Grid").Enabled((bool)ViewData["ajax"]); + }) + .Scrollable(scrolling => scrolling.Enabled((bool)ViewData["scrolling"])) + .Sortable(sorting => sorting.Enabled((bool)ViewData["sorting"])) + .Pageable(paging => paging.Enabled((bool)ViewData["paging"])) + .Filterable(filtering => filtering.Enabled((bool)ViewData["filtering"])) + .Groupable(grouping => grouping.Enabled((bool)ViewData["grouping"])) + .Footer((bool)ViewData["showFooter"]) +) \ No newline at end of file diff --git a/Telerik.RazorConverter.Tests/Telerik.RazorConverter.Tests.csproj b/Telerik.RazorConverter.Tests/Telerik.RazorConverter.Tests.csproj index dda6eb9..18a6bac 100644 --- a/Telerik.RazorConverter.Tests/Telerik.RazorConverter.Tests.csproj +++ b/Telerik.RazorConverter.Tests/Telerik.RazorConverter.Tests.csproj @@ -86,11 +86,11 @@ {B30D861F-7D12-436A-BC5A-930D48291037} - RazorConverter.Tests.Common + Telerik.RazorConverter.Tests.Common {88630458-D5BE-43B0-A7FB-BC0DFE6CB62E} - RazorConverter + Telerik.RazorConverter diff --git a/Telerik.RazorConverter.Tests/WebForms/WebFormsParserTests.cs b/Telerik.RazorConverter.Tests/WebForms/WebFormsParserTests.cs index 6f694f4..30ebd76 100644 --- a/Telerik.RazorConverter.Tests/WebForms/WebFormsParserTests.cs +++ b/Telerik.RazorConverter.Tests/WebForms/WebFormsParserTests.cs @@ -215,6 +215,7 @@ public void Should_treat_doctype_as_text() var document = parser.Parse(docType); ((IWebFormsTextNode)document.RootNode.Children[0]).Text.ShouldEqual(docType); } + } } diff --git a/Telerik.RazorConverter.sln b/Telerik.RazorConverter.sln index bbaf00e..6808dc7 100644 --- a/Telerik.RazorConverter.sln +++ b/Telerik.RazorConverter.sln @@ -20,6 +20,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Telerik.RazorConverter.Test EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Telerik.RazorConverter.Tests.Integration", "Telerik.RazorConverter.Tests.Integration\Telerik.RazorConverter.Tests.Integration.csproj", "{D41C5C1A-83E4-43E4-AE54-2FC44CE87BA8}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestItems", "TestItems", "{02F8810D-BE2D-4D6E-9EF7-7A7DBA8502A6}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{F4DA0538-E425-4E71-A508-0D024B125043}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU diff --git a/Telerik.RazorConverter/Razor/Converters/DirectiveConverter.cs b/Telerik.RazorConverter/Razor/Converters/DirectiveConverter.cs index 43d39b4..02cbd04 100644 --- a/Telerik.RazorConverter/Razor/Converters/DirectiveConverter.cs +++ b/Telerik.RazorConverter/Razor/Converters/DirectiveConverter.cs @@ -23,19 +23,33 @@ public IList ConvertNode(IWebFormsNode node) var result = new List(); var directiveNode = node as IWebFormsDirectiveNode; - if (directiveNode != null && - directiveNode.Attributes.ContainsKey("inherits")) + + if (directiveNode != null) { - var inheritsFrom = directiveNode.Attributes["inherits"]; - var viewPageGenericType = new Regex("System.Web.Mvc.(?:ViewPage|ViewUserControl)<(?.*)>"); - var typeMatch = viewPageGenericType.Match(inheritsFrom); - if (typeMatch.Success) + if (directiveNode.Attributes.ContainsKey("inherits")) { - result.Add(DirectiveNodeFactory.CreateDirectiveNode("model", typeMatch.Result("${type}"))); + var inheritsFrom = directiveNode.Attributes["inherits"]; + var viewPageGenericType = new Regex("System.Web.Mvc.(?:ViewPage|ViewUserControl)<(?.*)>"); + var typeMatch = viewPageGenericType.Match(inheritsFrom); + if (typeMatch.Success) + { + result.Add(DirectiveNodeFactory.CreateDirectiveNode("model", typeMatch.Result("${type}"))); + } + else if (inheritsFrom != "System.Web.Mvc.ViewPage" && inheritsFrom != "System.Web.Mvc.ViewUserControl") + { + result.Add(DirectiveNodeFactory.CreateDirectiveNode("inherits", directiveNode.Attributes["inherits"])); + } } - else if (inheritsFrom != "System.Web.Mvc.ViewPage" && inheritsFrom != "System.Web.Mvc.ViewUserControl") + else if (directiveNode.Attributes.ContainsKey("namespace") && + directiveNode.Directive == DirectiveType.Import) { - result.Add(DirectiveNodeFactory.CreateDirectiveNode("inherits", directiveNode.Attributes["inherits"])); + /* Case of of a using directive */ + var imports = directiveNode.Attributes["namespace"]; + + if (!string.IsNullOrEmpty(imports)) + { + result.Add(DirectiveNodeFactory.CreateDirectiveNode("using", directiveNode.Attributes["namespace"])); + } } } diff --git a/Telerik.RazorConverter/Razor/Converters/WebFormsToRazorConverter.cs b/Telerik.RazorConverter/Razor/Converters/WebFormsToRazorConverter.cs index dc3bf3f..01e9f79 100644 --- a/Telerik.RazorConverter/Razor/Converters/WebFormsToRazorConverter.cs +++ b/Telerik.RazorConverter/Razor/Converters/WebFormsToRazorConverter.cs @@ -29,6 +29,11 @@ public IDocument Convert(IDocument srcDoc) { if (converter.CanConvertNode(srcNode)) { + if (srcNode.Type == NodeType.Directive && srcNode.Attributes.ContainsKey("namespace")) + { + var i = 1; + } + foreach (var dstNode in converter.ConvertNode(srcNode)) { rootNode.Children.Add(dstNode); diff --git a/Telerik.RazorConverter/WebForms/DOM/DirectiveType.cs b/Telerik.RazorConverter/WebForms/DOM/DirectiveType.cs index 2a74aef..c999cd7 100644 --- a/Telerik.RazorConverter/WebForms/DOM/DirectiveType.cs +++ b/Telerik.RazorConverter/WebForms/DOM/DirectiveType.cs @@ -4,6 +4,7 @@ public enum DirectiveType { Page, Control, + Import, Unknown } } diff --git a/Telerik.RazorConverter/WebForms/DOM/WebFormsNodeFactory.cs b/Telerik.RazorConverter/WebForms/DOM/WebFormsNodeFactory.cs index 22d94b1..be6a939 100644 --- a/Telerik.RazorConverter/WebForms/DOM/WebFormsNodeFactory.cs +++ b/Telerik.RazorConverter/WebForms/DOM/WebFormsNodeFactory.cs @@ -66,6 +66,10 @@ private IWebFormsNode DirectiveNodeBuilder(Match match) { node.Directive = DirectiveType.Control; } + else if (directiveType.Contains("import")) + { + node.Directive = DirectiveType.Import; + } } return node; diff --git a/Telerik.RazorConverter/WebForms/Parsing/WebFormsParser.cs b/Telerik.RazorConverter/WebForms/Parsing/WebFormsParser.cs index f3f6353..6e2e75e 100644 --- a/Telerik.RazorConverter/WebForms/Parsing/WebFormsParser.cs +++ b/Telerik.RazorConverter/WebForms/Parsing/WebFormsParser.cs @@ -78,6 +78,10 @@ public IDocument Parse(string input) { if ((match = directiveRegex.Match(input, startAt)).Success) { + if (input.Contains(@"Namespace=")) + { + var i = 0; + } var directiveNode = NodeFactory.CreateNode(match, NodeType.Directive); parentNode.Children.Add(directiveNode); } diff --git a/aspx2razor/aspx2razor.csproj b/aspx2razor/aspx2razor.csproj index f3afd10..854d6a4 100644 --- a/aspx2razor/aspx2razor.csproj +++ b/aspx2razor/aspx2razor.csproj @@ -63,7 +63,7 @@ {88630458-D5BE-43B0-A7FB-BC0DFE6CB62E} - RazorConverter + Telerik.RazorConverter