Skip to content

Commit

Permalink
Vue sample
Browse files Browse the repository at this point in the history
  • Loading branch information
pt-icg committed Oct 6, 2020
1 parent 5ae10ce commit 526c424
Show file tree
Hide file tree
Showing 85 changed files with 38,120 additions and 29 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -355,3 +355,4 @@ MigrationBackup/
/RecurrenceRuleUIWebApp.1
/RecurrenceRuleUIWebApp22
/TestResults
/ActiveButtonGroup
12 changes: 12 additions & 0 deletions IcgSoftware.RecurrenceRuleToText.sln
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IcgSoftware.RecurrenceRuleT
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RecurrenceRuleWebApp", "RecurrenceRuleWebApp\RecurrenceRuleWebApp.csproj", "{DBB82759-46FA-4DA9-A4DD-8C29D0F07714}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RecurrenceRuleWebAppVue", "RecurrenceRuleWebAppVue\RecurrenceRuleWebAppVue.csproj", "{3C5A3BA9-8449-4A44-B94D-76D41EC71DC8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ActiveButtonGroup", "ActiveButtonGroup\ActiveButtonGroup.csproj", "{97EA403E-30BE-4E5F-95A8-02B7EE0A3308}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand All @@ -39,6 +43,14 @@ Global
{DBB82759-46FA-4DA9-A4DD-8C29D0F07714}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DBB82759-46FA-4DA9-A4DD-8C29D0F07714}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DBB82759-46FA-4DA9-A4DD-8C29D0F07714}.Release|Any CPU.Build.0 = Release|Any CPU
{3C5A3BA9-8449-4A44-B94D-76D41EC71DC8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3C5A3BA9-8449-4A44-B94D-76D41EC71DC8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3C5A3BA9-8449-4A44-B94D-76D41EC71DC8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3C5A3BA9-8449-4A44-B94D-76D41EC71DC8}.Release|Any CPU.Build.0 = Release|Any CPU
{97EA403E-30BE-4E5F-95A8-02B7EE0A3308}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{97EA403E-30BE-4E5F-95A8-02B7EE0A3308}.Debug|Any CPU.Build.0 = Debug|Any CPU
{97EA403E-30BE-4E5F-95A8-02B7EE0A3308}.Release|Any CPU.ActiveCfg = Release|Any CPU
{97EA403E-30BE-4E5F-95A8-02B7EE0A3308}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
4 changes: 2 additions & 2 deletions RecurrenceRuleWebApp/Views/Home/Index.cshtml
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@
<select id="yearly-bymonth" class="form-control" data-bind="options: yearlyByMonth, optionsText: 'text', value: selectedYearlyByMonth, enable: yearlyOptions() === 'yearly-one-month'"></select>
</div>
<div class="col-4">
<select id="yearly-bymonth" class="form-control" data-bind="options: yearlyByMonthDay, optionsText: 'text', value: selectedYearlyByMonthDay, enable: yearlyOptions() === 'yearly-one-month'"></select>
<select id="yearly-bymonth-day" class="form-control" data-bind="options: yearlyByMonthDay, optionsText: 'text', value: selectedYearlyByMonthDay, enable: yearlyOptions() === 'yearly-one-month'"></select>
</div>
</div>

Expand Down Expand Up @@ -167,7 +167,7 @@
<option value="SU,SA">Weekend day</option>*@
</div>

<div class="col-3">
<div class="col-4">
<div class="row">
<label class="col-form-label col-2" for="yearly-bymonth-with-bysetpos-byday">
in
Expand Down
13 changes: 0 additions & 13 deletions RecurrenceRuleWebApp/wwwroot/js/rrule-viewmodel-ts.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion RecurrenceRuleWebApp/wwwroot/js/rrule-viewmodel-ts.js.map

Large diffs are not rendered by default.

13 changes: 0 additions & 13 deletions RecurrenceRuleWebApp/wwwroot/js/rrule-viewmodel-ts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -366,20 +366,7 @@ class RruleViewModel {
type: 'POST',
url: '/Home/CreateRRule',
contentType: 'application/json; charset=utf-8',
//headers: {
// "CSRF-TOKEN-MOONGLADE-FORM": $('input[name="CSRF-TOKEN-MOONGLADE-FORM"]').val()
//},
//headers = {
// "__RequestVerificationToken": antiForgeryToken
//},
//headers = '"__RequestVerificationToken": antiForgeryToken,'
//headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() },
headers: { "RequestVerificationToken": `${antiForgeryToken}` },
//data: {
// __RequestVerificationToken: antiForgeryToken,
// rRuleWrapper: rRuleWrapper
//},
//dataType: 'JSON',
data: JSON.stringify(rRuleWrapper),
success: (result) => {
this.rruleCode(result.recurrencePatternString)
Expand Down
12 changes: 12 additions & 0 deletions RecurrenceRuleWebAppVue/.config/dotnet-tools.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"version": 1,
"isRoot": true,
"tools": {
"dotnet-ef": {
"version": "3.1.8",
"commands": [
"dotnet-ef"
]
}
}
}
94 changes: 94 additions & 0 deletions RecurrenceRuleWebAppVue/Controllers/HomeController.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Threading.Tasks;
using Ical.Net;
using Ical.Net.DataTypes;
using IcgSoftware.RecurrenceRuleToText;
using Microsoft.AspNetCore.Mvc;
using RecurrenceRuleWebAppVue.Models;

namespace RecurrenceRuleWebAppVue.Controllers
{
public class HomeController : Controller
{

private readonly int maxOccurences = 50;
private readonly int maxYears = 20;

public IActionResult Index()
{
return View();
}

public IActionResult Privacy()
{
return View();
}

[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}

[HttpPost]
//VUE erstmal ohne [ValidateAntiForgeryToken]
[ValidateAntiForgeryToken]
public IActionResult CreateRRule([FromBody] RRuleWrapper RRuleWrapper)
{
if (RRuleWrapper == null)
{
var rRuleResultE = new RRuleResult() { ErrorText = "invalid data" };
return new JsonResult(rRuleResultE);
};

var recurrencePattern = new RecurrencePattern(RRuleWrapper.GetFrequencyType(), RRuleWrapper.Interval);
switch (recurrencePattern.Frequency)
{
case FrequencyType.None:
case FrequencyType.Secondly:
case FrequencyType.Minutely:
case FrequencyType.Hourly:
case FrequencyType.Daily:
break;
case FrequencyType.Weekly:
recurrencePattern.ByDay = RRuleWrapper.GetByDayList();
break;
case FrequencyType.Monthly:
recurrencePattern.ByDay = RRuleWrapper.GetByDayList();
recurrencePattern.ByMonthDay = RRuleWrapper.ByMonthDay;
recurrencePattern.BySetPosition = RRuleWrapper.BySetPosition;
break;
case FrequencyType.Yearly:
recurrencePattern.ByDay = RRuleWrapper.GetByDayList();
recurrencePattern.ByMonth = RRuleWrapper.ByMonth;
recurrencePattern.ByMonthDay = RRuleWrapper.ByMonthDay;
recurrencePattern.BySetPosition = RRuleWrapper.BySetPosition;
break;
default:
break;
}
if (RRuleWrapper.Count > 0)
recurrencePattern.Count = RRuleWrapper.Count;
if (RRuleWrapper.Until.HasValue)
recurrencePattern.Until = RRuleWrapper.Until.Value;

//var rRuleResult = new RRuleResult() { RecurrencePatternString = recurrencePattern.ToString(), RecurrencePatternText = recurrencePattern.ToText() };
var browserLang = Request.Headers["Accept-Language"].ToString().Split(";").FirstOrDefault()?.Split(",").FirstOrDefault();
var rRuleResult = new RRuleResult() { RecurrencePatternString = recurrencePattern.ToString(), RecurrencePatternText = recurrencePattern.ToText(new CultureInfo(browserLang)) };
var startTime = RRuleWrapper.StartDate != null ? RRuleWrapper.StartDate : DateTime.Now;
rRuleResult.RecurrencePatternList = RecurringRuleProcessor.GetAppointments(startTime, startTime.AddYears(maxYears), recurrencePattern.ToString()).Take(maxOccurences + 1).ToList();
if (rRuleResult.RecurrencePatternList.Count > maxOccurences)
{
rRuleResult.RecurrencePatternList.RemoveAt(maxOccurences);
rRuleResult.HintText = $"there are more occurences, only first {maxOccurences} occurences in the next {maxYears} years at most are listed";
}

return new JsonResult(rRuleResult);
}

}
}
11 changes: 11 additions & 0 deletions RecurrenceRuleWebAppVue/Models/ErrorViewModel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using System;

namespace RecurrenceRuleWebAppVue.Models
{
public class ErrorViewModel
{
public string RequestId { get; set; }

public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
}
}
19 changes: 19 additions & 0 deletions RecurrenceRuleWebAppVue/Models/FormViewModel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace RecurrenceRuleWebAppVue.Models
{
public class FormViewModel
{
public FormFields Fields { get; set; }
}

public class FormFields
{
public string FullName { get; set; }
public string Email { get; set; }
public string Comments { get; set; }
}
}
16 changes: 16 additions & 0 deletions RecurrenceRuleWebAppVue/Models/RRuleResult.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace RecurrenceRuleWebAppVue.Models
{
public class RRuleResult
{
public string ErrorText { get; set; } = "";
public string RecurrencePatternString { get; set; } = "";
public string RecurrencePatternText { get; set; } = "";
public List<DateTime> RecurrencePatternList { get; set; } = new List<DateTime>();
public string HintText { get; set; } = "";
}
}
93 changes: 93 additions & 0 deletions RecurrenceRuleWebAppVue/Models/RRuleWrapper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
using Ical.Net;
using Ical.Net.DataTypes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace RecurrenceRuleWebAppVue.Models
{
public class RRuleWrapper
{
public string Guid { get; set; }
public DateTime StartDate { get; set; }
public string Frequency { get; set; }
public string event_recurring { get; set; }
public int Interval { get; set; }
public List<string> ByDayValue { get; set; }
public int Count { get; set; }
public List<int> ByMonth { get; set; }
public List<int> ByMonthDay { get; set; }
public List<int> BySetPosition { get; set; }
public DateTime? Until { get; set; }

public List<WeekDay> GetByDayList()
{
var result = new List<WeekDay>();
foreach (var d in ByDayValue)
{
switch (d)
{
case "MO":
result.Add(new WeekDay(DayOfWeek.Monday));
break;
case "TU":
result.Add(new WeekDay(DayOfWeek.Tuesday));
break;
case "WE":
result.Add(new WeekDay(DayOfWeek.Wednesday));
break;
case "TH":
result.Add(new WeekDay(DayOfWeek.Thursday));
break;
case "FR":
result.Add(new WeekDay(DayOfWeek.Friday));
break;
case "SA":
result.Add(new WeekDay(DayOfWeek.Saturday));
break;
case "SU":
result.Add(new WeekDay(DayOfWeek.Sunday));
break;
}
}

return result;
}

public FrequencyType GetFrequencyType()
{

switch (Frequency)
{
case "daily":
return FrequencyType.Daily;
case "weekly":
return FrequencyType.Weekly;
case "monthly":
return FrequencyType.Monthly;
case "yearly":
return FrequencyType.Yearly;
default:
return FrequencyType.None;
}

/*
public enum FrequencyType
{
None = 0,
Secondly = 1,
Minutely = 2,
Hourly = 3,
Daily = 4,
Weekly = 5,
Monthly = 6,
Yearly = 7
}
*/
}


}
}
Loading

0 comments on commit 526c424

Please sign in to comment.