Browse Source

Initial commit

root 3 years ago
commit
dd354a108d
58 changed files with 40362 additions and 0 deletions
  1. 51
    0
      Jenkinsfile
  2. 26
    0
      Pages/Error.cshtml
  3. 32
    0
      Pages/Error.cshtml.cs
  4. 10
    0
      Pages/Index.cshtml
  5. 25
    0
      Pages/Index.cshtml.cs
  6. 8
    0
      Pages/Privacy.cshtml
  7. 24
    0
      Pages/Privacy.cshtml.cs
  8. 50
    0
      Pages/Shared/_Layout.cshtml
  9. 2
    0
      Pages/Shared/_ValidationScriptsPartial.cshtml
  10. 3
    0
      Pages/_ViewImports.cshtml
  11. 3
    0
      Pages/_ViewStart.cshtml
  12. 26
    0
      Program.cs
  13. 28
    0
      Properties/launchSettings.json
  14. 7
    0
      RazorApp.csproj
  15. 56
    0
      Startup.cs
  16. 10
    0
      appsettings.Development.json
  17. 10
    0
      appsettings.json
  18. 63
    0
      obj/RazorApp.csproj.nuget.dgspec.json
  19. 18
    0
      obj/RazorApp.csproj.nuget.g.props
  20. 6
    0
      obj/RazorApp.csproj.nuget.g.targets
  21. 68
    0
      obj/project.assets.json
  22. 8
    0
      obj/project.nuget.cache
  23. 71
    0
      wwwroot/css/site.css
  24. BIN
      wwwroot/favicon.ico
  25. 4
    0
      wwwroot/js/site.js
  26. 22
    0
      wwwroot/lib/bootstrap/LICENSE
  27. 3719
    0
      wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css
  28. 1
    0
      wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map
  29. 7
    0
      wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css
  30. 1
    0
      wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map
  31. 331
    0
      wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css
  32. 1
    0
      wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map
  33. 8
    0
      wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css
  34. 1
    0
      wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map
  35. 10038
    0
      wwwroot/lib/bootstrap/dist/css/bootstrap.css
  36. 1
    0
      wwwroot/lib/bootstrap/dist/css/bootstrap.css.map
  37. 7
    0
      wwwroot/lib/bootstrap/dist/css/bootstrap.min.css
  38. 1
    0
      wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map
  39. 7013
    0
      wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js
  40. 1
    0
      wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map
  41. 7
    0
      wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js
  42. 1
    0
      wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map
  43. 4435
    0
      wwwroot/lib/bootstrap/dist/js/bootstrap.js
  44. 1
    0
      wwwroot/lib/bootstrap/dist/js/bootstrap.js.map
  45. 7
    0
      wwwroot/lib/bootstrap/dist/js/bootstrap.min.js
  46. 1
    0
      wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map
  47. 12
    0
      wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt
  48. 432
    0
      wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js
  49. 5
    0
      wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js
  50. 22
    0
      wwwroot/lib/jquery-validation/LICENSE.md
  51. 1158
    0
      wwwroot/lib/jquery-validation/dist/additional-methods.js
  52. 4
    0
      wwwroot/lib/jquery-validation/dist/additional-methods.min.js
  53. 1601
    0
      wwwroot/lib/jquery-validation/dist/jquery.validate.js
  54. 4
    0
      wwwroot/lib/jquery-validation/dist/jquery.validate.min.js
  55. 36
    0
      wwwroot/lib/jquery/LICENSE.txt
  56. 10872
    0
      wwwroot/lib/jquery/dist/jquery.js
  57. 2
    0
      wwwroot/lib/jquery/dist/jquery.min.js
  58. 1
    0
      wwwroot/lib/jquery/dist/jquery.min.map

+ 51
- 0
Jenkinsfile View File

@@ -0,0 +1,51 @@
1
+pipeline {
2
+    agent any
3
+    environment {
4
+    }
5
+    stages {
6
+		stage('Restore packages') {
7
+            steps {
8
+                sh 'dotnet restore ${WORKSPACE}/RazorApp.csproj'
9
+            }
10
+        }
11
+		stage('Clean') {
12
+		    steps {
13
+			    sh 'dotnet clean ${WORKSPACE}/RazorApp.csproj --configuration Release'
14
+			}
15
+		}
16
+        stage('Build') {
17
+		    steps {
18
+			    sh 'dotnet build ${WORKSPACE}/RazorApp.csproj --configuration Release --no-restore'
19
+			}
20
+        }
21
+        /*stage('Test') {
22
+            steps {
23
+			   sh 'dotnet test ${WORKSPACE}/RazorApp.csproj --no-restore'
24
+            }
25
+        }*/
26
+        stage('Publish') {
27
+			steps {
28
+				sh 'dotnet publish ${WORKSPACE} -o out --configuration Release --no-restore'
29
+			}
30
+            
31
+        }
32
+        stage ('Deploy') {
33
+            steps {
34
+				sh 'sudo /root/jenkins_scripts/qa_deploy ${WORKSPACE}/out'
35
+			}
36
+        }
37
+    }
38
+	post{
39
+		success{
40
+			emailext body: "${currentBuild.currentResult}: Job   ${env.JOB_NAME} build ${env.BUILD_NUMBER}\n More info at: ${env.BUILD_URL}",
41
+			recipientProviders: [[$class: 'DevelopersRecipientProvider'], [$class: 'RequesterRecipientProvider']],
42
+			subject: "Jenkins Build ${currentBuild.currentResult}: Job ${env.JOB_NAME}"
43
+		}
44
+		always {
45
+            deleteDir()
46
+        }
47
+		cleanup {
48
+            cleanWs()
49
+        }
50
+	}
51
+}

+ 26
- 0
Pages/Error.cshtml View File

@@ -0,0 +1,26 @@
1
+@page
2
+@model ErrorModel
3
+@{
4
+    ViewData["Title"] = "Error";
5
+}
6
+
7
+<h1 class="text-danger">Error.</h1>
8
+<h2 class="text-danger">An error occurred while processing your request.</h2>
9
+
10
+@if (Model.ShowRequestId)
11
+{
12
+    <p>
13
+        <strong>Request ID:</strong> <code>@Model.RequestId</code>
14
+    </p>
15
+}
16
+
17
+<h3>Development Mode</h3>
18
+<p>
19
+    Swapping to the <strong>Development</strong> environment displays detailed information about the error that occurred.
20
+</p>
21
+<p>
22
+    <strong>The Development environment shouldn't be enabled for deployed applications.</strong>
23
+    It can result in displaying sensitive information from exceptions to end users.
24
+    For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
25
+    and restarting the app.
26
+</p>

+ 32
- 0
Pages/Error.cshtml.cs View File

@@ -0,0 +1,32 @@
1
+using System;
2
+using System.Collections.Generic;
3
+using System.Diagnostics;
4
+using System.Linq;
5
+using System.Threading.Tasks;
6
+using Microsoft.AspNetCore.Mvc;
7
+using Microsoft.AspNetCore.Mvc.RazorPages;
8
+using Microsoft.Extensions.Logging;
9
+
10
+namespace RazorApp.Pages
11
+{
12
+    [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
13
+    [IgnoreAntiforgeryToken]
14
+    public class ErrorModel : PageModel
15
+    {
16
+        public string RequestId { get; set; }
17
+
18
+        public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
19
+
20
+        private readonly ILogger<ErrorModel> _logger;
21
+
22
+        public ErrorModel(ILogger<ErrorModel> logger)
23
+        {
24
+            _logger = logger;
25
+        }
26
+
27
+        public void OnGet()
28
+        {
29
+            RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;
30
+        }
31
+    }
32
+}

+ 10
- 0
Pages/Index.cshtml View File

@@ -0,0 +1,10 @@
1
+@page
2
+@model IndexModel
3
+@{
4
+    ViewData["Title"] = "Home page";
5
+}
6
+
7
+<div class="text-center">
8
+    <h1 class="display-4">Welcome</h1>
9
+    <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
10
+</div>

+ 25
- 0
Pages/Index.cshtml.cs View File

@@ -0,0 +1,25 @@
1
+using System;
2
+using System.Collections.Generic;
3
+using System.Linq;
4
+using System.Threading.Tasks;
5
+using Microsoft.AspNetCore.Mvc;
6
+using Microsoft.AspNetCore.Mvc.RazorPages;
7
+using Microsoft.Extensions.Logging;
8
+
9
+namespace RazorApp.Pages
10
+{
11
+    public class IndexModel : PageModel
12
+    {
13
+        private readonly ILogger<IndexModel> _logger;
14
+
15
+        public IndexModel(ILogger<IndexModel> logger)
16
+        {
17
+            _logger = logger;
18
+        }
19
+
20
+        public void OnGet()
21
+        {
22
+
23
+        }
24
+    }
25
+}

+ 8
- 0
Pages/Privacy.cshtml View File

@@ -0,0 +1,8 @@
1
+@page
2
+@model PrivacyModel
3
+@{
4
+    ViewData["Title"] = "Privacy Policy";
5
+}
6
+<h1>@ViewData["Title"]</h1>
7
+
8
+<p>Use this page to detail your site's privacy policy.</p>

+ 24
- 0
Pages/Privacy.cshtml.cs View File

@@ -0,0 +1,24 @@
1
+using System;
2
+using System.Collections.Generic;
3
+using System.Linq;
4
+using System.Threading.Tasks;
5
+using Microsoft.AspNetCore.Mvc;
6
+using Microsoft.AspNetCore.Mvc.RazorPages;
7
+using Microsoft.Extensions.Logging;
8
+
9
+namespace RazorApp.Pages
10
+{
11
+    public class PrivacyModel : PageModel
12
+    {
13
+        private readonly ILogger<PrivacyModel> _logger;
14
+
15
+        public PrivacyModel(ILogger<PrivacyModel> logger)
16
+        {
17
+            _logger = logger;
18
+        }
19
+
20
+        public void OnGet()
21
+        {
22
+        }
23
+    }
24
+}

+ 50
- 0
Pages/Shared/_Layout.cshtml View File

@@ -0,0 +1,50 @@
1
+<!DOCTYPE html>
2
+<html lang="en">
3
+<head>
4
+    <meta charset="utf-8" />
5
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+    <title>@ViewData["Title"] - RazorApp</title>
7
+    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
8
+    <link rel="stylesheet" href="~/css/site.css" />
9
+</head>
10
+<body>
11
+    <header>
12
+        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
13
+            <div class="container">
14
+                <a class="navbar-brand" asp-area="" asp-page="/Index">RazorApp</a>
15
+                <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
16
+                        aria-expanded="false" aria-label="Toggle navigation">
17
+                    <span class="navbar-toggler-icon"></span>
18
+                </button>
19
+                <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
20
+                    <ul class="navbar-nav flex-grow-1">
21
+                        <li class="nav-item">
22
+                            <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
23
+                        </li>
24
+                        <li class="nav-item">
25
+                            <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
26
+                        </li>
27
+                    </ul>
28
+                </div>
29
+            </div>
30
+        </nav>
31
+    </header>
32
+    <div class="container">
33
+        <main role="main" class="pb-3">
34
+            @RenderBody()
35
+        </main>
36
+    </div>
37
+
38
+    <footer class="border-top footer text-muted">
39
+        <div class="container">
40
+            &copy; 2021 - RazorApp - <a asp-area="" asp-page="/Privacy">Privacy</a>
41
+        </div>
42
+    </footer>
43
+
44
+    <script src="~/lib/jquery/dist/jquery.min.js"></script>
45
+    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
46
+    <script src="~/js/site.js" asp-append-version="true"></script>
47
+
48
+    @await RenderSectionAsync("Scripts", required: false)
49
+</body>
50
+</html>

+ 2
- 0
Pages/Shared/_ValidationScriptsPartial.cshtml View File

@@ -0,0 +1,2 @@
1
+<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
2
+<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>

+ 3
- 0
Pages/_ViewImports.cshtml View File

@@ -0,0 +1,3 @@
1
+@using RazorApp
2
+@namespace RazorApp.Pages
3
+@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

+ 3
- 0
Pages/_ViewStart.cshtml View File

@@ -0,0 +1,3 @@
1
+@{
2
+    Layout = "_Layout";
3
+}

+ 26
- 0
Program.cs View File

@@ -0,0 +1,26 @@
1
+using System;
2
+using System.Collections.Generic;
3
+using System.Linq;
4
+using System.Threading.Tasks;
5
+using Microsoft.AspNetCore.Hosting;
6
+using Microsoft.Extensions.Configuration;
7
+using Microsoft.Extensions.Hosting;
8
+using Microsoft.Extensions.Logging;
9
+
10
+namespace RazorApp
11
+{
12
+    public class Program
13
+    {
14
+        public static void Main(string[] args)
15
+        {
16
+            CreateHostBuilder(args).Build().Run();
17
+        }
18
+
19
+        public static IHostBuilder CreateHostBuilder(string[] args) =>
20
+            Host.CreateDefaultBuilder(args)
21
+                .ConfigureWebHostDefaults(webBuilder =>
22
+                {
23
+                    webBuilder.UseStartup<Startup>();
24
+                });
25
+    }
26
+}

+ 28
- 0
Properties/launchSettings.json View File

@@ -0,0 +1,28 @@
1
+{
2
+  "iisSettings": {
3
+    "windowsAuthentication": false,
4
+    "anonymousAuthentication": true,
5
+    "iisExpress": {
6
+      "applicationUrl": "http://localhost:31018",
7
+      "sslPort": 44306
8
+    }
9
+  },
10
+  "profiles": {
11
+    "IIS Express": {
12
+      "commandName": "IISExpress",
13
+      "launchBrowser": true,
14
+      "environmentVariables": {
15
+        "ASPNETCORE_ENVIRONMENT": "Development"
16
+      }
17
+    },
18
+    "RazorApp": {
19
+      "commandName": "Project",
20
+      "dotnetRunMessages": "true",
21
+      "launchBrowser": true,
22
+      "applicationUrl": "https://localhost:5001;http://localhost:5000",
23
+      "environmentVariables": {
24
+        "ASPNETCORE_ENVIRONMENT": "Development"
25
+      }
26
+    }
27
+  }
28
+}

+ 7
- 0
RazorApp.csproj View File

@@ -0,0 +1,7 @@
1
+<Project Sdk="Microsoft.NET.Sdk.Web">
2
+
3
+  <PropertyGroup>
4
+    <TargetFramework>net5.0</TargetFramework>
5
+  </PropertyGroup>
6
+
7
+</Project>

+ 56
- 0
Startup.cs View File

@@ -0,0 +1,56 @@
1
+using System;
2
+using System.Collections.Generic;
3
+using System.Linq;
4
+using System.Threading.Tasks;
5
+using Microsoft.AspNetCore.Builder;
6
+using Microsoft.AspNetCore.Hosting;
7
+using Microsoft.AspNetCore.HttpsPolicy;
8
+using Microsoft.Extensions.Configuration;
9
+using Microsoft.Extensions.DependencyInjection;
10
+using Microsoft.Extensions.Hosting;
11
+
12
+namespace RazorApp
13
+{
14
+    public class Startup
15
+    {
16
+        public Startup(IConfiguration configuration)
17
+        {
18
+            Configuration = configuration;
19
+        }
20
+
21
+        public IConfiguration Configuration { get; }
22
+
23
+        // This method gets called by the runtime. Use this method to add services to the container.
24
+        public void ConfigureServices(IServiceCollection services)
25
+        {
26
+            services.AddRazorPages();
27
+        }
28
+
29
+        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
30
+        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
31
+        {
32
+            if (env.IsDevelopment())
33
+            {
34
+                app.UseDeveloperExceptionPage();
35
+            }
36
+            else
37
+            {
38
+                app.UseExceptionHandler("/Error");
39
+                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
40
+                app.UseHsts();
41
+            }
42
+
43
+            app.UseHttpsRedirection();
44
+            app.UseStaticFiles();
45
+
46
+            app.UseRouting();
47
+
48
+            app.UseAuthorization();
49
+
50
+            app.UseEndpoints(endpoints =>
51
+            {
52
+                endpoints.MapRazorPages();
53
+            });
54
+        }
55
+    }
56
+}

+ 10
- 0
appsettings.Development.json View File

@@ -0,0 +1,10 @@
1
+{
2
+  "DetailedErrors": true,
3
+  "Logging": {
4
+    "LogLevel": {
5
+      "Default": "Information",
6
+      "Microsoft": "Warning",
7
+      "Microsoft.Hosting.Lifetime": "Information"
8
+    }
9
+  }
10
+}

+ 10
- 0
appsettings.json View File

@@ -0,0 +1,10 @@
1
+{
2
+  "Logging": {
3
+    "LogLevel": {
4
+      "Default": "Information",
5
+      "Microsoft": "Warning",
6
+      "Microsoft.Hosting.Lifetime": "Information"
7
+    }
8
+  },
9
+  "AllowedHosts": "*"
10
+}

+ 63
- 0
obj/RazorApp.csproj.nuget.dgspec.json View File

@@ -0,0 +1,63 @@
1
+{
2
+  "format": 1,
3
+  "restore": {
4
+    "/home/work/RazorApp/RazorApp.csproj": {}
5
+  },
6
+  "projects": {
7
+    "/home/work/RazorApp/RazorApp.csproj": {
8
+      "version": "1.0.0",
9
+      "restore": {
10
+        "projectUniqueName": "/home/work/RazorApp/RazorApp.csproj",
11
+        "projectName": "RazorApp",
12
+        "projectPath": "/home/work/RazorApp/RazorApp.csproj",
13
+        "packagesPath": "/root/.nuget/packages/",
14
+        "outputPath": "/home/work/RazorApp/obj/",
15
+        "projectStyle": "PackageReference",
16
+        "configFilePaths": [
17
+          "/root/.nuget/NuGet/NuGet.Config"
18
+        ],
19
+        "originalTargetFrameworks": [
20
+          "net5.0"
21
+        ],
22
+        "sources": {
23
+          "https://api.nuget.org/v3/index.json": {}
24
+        },
25
+        "frameworks": {
26
+          "net5.0": {
27
+            "targetAlias": "net5.0",
28
+            "projectReferences": {}
29
+          }
30
+        },
31
+        "warningProperties": {
32
+          "warnAsError": [
33
+            "NU1605"
34
+          ]
35
+        }
36
+      },
37
+      "frameworks": {
38
+        "net5.0": {
39
+          "targetAlias": "net5.0",
40
+          "imports": [
41
+            "net461",
42
+            "net462",
43
+            "net47",
44
+            "net471",
45
+            "net472",
46
+            "net48"
47
+          ],
48
+          "assetTargetFallback": true,
49
+          "warn": true,
50
+          "frameworkReferences": {
51
+            "Microsoft.AspNetCore.App": {
52
+              "privateAssets": "none"
53
+            },
54
+            "Microsoft.NETCore.App": {
55
+              "privateAssets": "all"
56
+            }
57
+          },
58
+          "runtimeIdentifierGraphPath": "/usr/share/dotnet/sdk/5.0.301/RuntimeIdentifierGraph.json"
59
+        }
60
+      }
61
+    }
62
+  }
63
+}

+ 18
- 0
obj/RazorApp.csproj.nuget.g.props View File

@@ -0,0 +1,18 @@
1
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
2
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+  <PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
4
+    <RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
5
+    <RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
6
+    <ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
7
+    <NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">/root/.nuget/packages/</NuGetPackageRoot>
8
+    <NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">/root/.nuget/packages/</NuGetPackageFolders>
9
+    <NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
10
+    <NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">5.10.0</NuGetToolVersion>
11
+  </PropertyGroup>
12
+  <ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
13
+    <SourceRoot Include="/root/.nuget/packages/" />
14
+  </ItemGroup>
15
+  <PropertyGroup>
16
+    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
17
+  </PropertyGroup>
18
+</Project>

+ 6
- 0
obj/RazorApp.csproj.nuget.g.targets View File

@@ -0,0 +1,6 @@
1
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
2
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+  <PropertyGroup>
4
+    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
5
+  </PropertyGroup>
6
+</Project>

+ 68
- 0
obj/project.assets.json View File

@@ -0,0 +1,68 @@
1
+{
2
+  "version": 3,
3
+  "targets": {
4
+    "net5.0": {}
5
+  },
6
+  "libraries": {},
7
+  "projectFileDependencyGroups": {
8
+    "net5.0": []
9
+  },
10
+  "packageFolders": {
11
+    "/root/.nuget/packages/": {}
12
+  },
13
+  "project": {
14
+    "version": "1.0.0",
15
+    "restore": {
16
+      "projectUniqueName": "/home/work/RazorApp/RazorApp.csproj",
17
+      "projectName": "RazorApp",
18
+      "projectPath": "/home/work/RazorApp/RazorApp.csproj",
19
+      "packagesPath": "/root/.nuget/packages/",
20
+      "outputPath": "/home/work/RazorApp/obj/",
21
+      "projectStyle": "PackageReference",
22
+      "configFilePaths": [
23
+        "/root/.nuget/NuGet/NuGet.Config"
24
+      ],
25
+      "originalTargetFrameworks": [
26
+        "net5.0"
27
+      ],
28
+      "sources": {
29
+        "https://api.nuget.org/v3/index.json": {}
30
+      },
31
+      "frameworks": {
32
+        "net5.0": {
33
+          "targetAlias": "net5.0",
34
+          "projectReferences": {}
35
+        }
36
+      },
37
+      "warningProperties": {
38
+        "warnAsError": [
39
+          "NU1605"
40
+        ]
41
+      }
42
+    },
43
+    "frameworks": {
44
+      "net5.0": {
45
+        "targetAlias": "net5.0",
46
+        "imports": [
47
+          "net461",
48
+          "net462",
49
+          "net47",
50
+          "net471",
51
+          "net472",
52
+          "net48"
53
+        ],
54
+        "assetTargetFallback": true,
55
+        "warn": true,
56
+        "frameworkReferences": {
57
+          "Microsoft.AspNetCore.App": {
58
+            "privateAssets": "none"
59
+          },
60
+          "Microsoft.NETCore.App": {
61
+            "privateAssets": "all"
62
+          }
63
+        },
64
+        "runtimeIdentifierGraphPath": "/usr/share/dotnet/sdk/5.0.301/RuntimeIdentifierGraph.json"
65
+      }
66
+    }
67
+  }
68
+}

+ 8
- 0
obj/project.nuget.cache View File

@@ -0,0 +1,8 @@
1
+{
2
+  "version": 2,
3
+  "dgSpecHash": "m/YGTWN9kdTBZFEusQ5xU9qDCnDgWhrI1HDf45WkLJ7e7mGB3SCen5ilMJobd966PJRtScg3kgjE8mtrVQKIzA==",
4
+  "success": true,
5
+  "projectFilePath": "/home/work/RazorApp/RazorApp.csproj",
6
+  "expectedPackageFiles": [],
7
+  "logs": []
8
+}

+ 71
- 0
wwwroot/css/site.css View File

@@ -0,0 +1,71 @@
1
+/* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
2
+for details on configuring this project to bundle and minify static web assets. */
3
+
4
+a.navbar-brand {
5
+  white-space: normal;
6
+  text-align: center;
7
+  word-break: break-all;
8
+}
9
+
10
+/* Provide sufficient contrast against white background */
11
+a {
12
+  color: #0366d6;
13
+}
14
+
15
+.btn-primary {
16
+  color: #fff;
17
+  background-color: #1b6ec2;
18
+  border-color: #1861ac;
19
+}
20
+
21
+.nav-pills .nav-link.active, .nav-pills .show > .nav-link {
22
+  color: #fff;
23
+  background-color: #1b6ec2;
24
+  border-color: #1861ac;
25
+}
26
+
27
+/* Sticky footer styles
28
+-------------------------------------------------- */
29
+html {
30
+  font-size: 14px;
31
+}
32
+@media (min-width: 768px) {
33
+  html {
34
+    font-size: 16px;
35
+  }
36
+}
37
+
38
+.border-top {
39
+  border-top: 1px solid #e5e5e5;
40
+}
41
+.border-bottom {
42
+  border-bottom: 1px solid #e5e5e5;
43
+}
44
+
45
+.box-shadow {
46
+  box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05);
47
+}
48
+
49
+button.accept-policy {
50
+  font-size: 1rem;
51
+  line-height: inherit;
52
+}
53
+
54
+/* Sticky footer styles
55
+-------------------------------------------------- */
56
+html {
57
+  position: relative;
58
+  min-height: 100%;
59
+}
60
+
61
+body {
62
+  /* Margin bottom by footer height */
63
+  margin-bottom: 60px;
64
+}
65
+.footer {
66
+  position: absolute;
67
+  bottom: 0;
68
+  width: 100%;
69
+  white-space: nowrap;
70
+  line-height: 60px; /* Vertically center the text there */
71
+}

BIN
wwwroot/favicon.ico View File


+ 4
- 0
wwwroot/js/site.js View File

@@ -0,0 +1,4 @@
1
+// Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
2
+// for details on configuring this project to bundle and minify static web assets.
3
+
4
+// Write your JavaScript code.

+ 22
- 0
wwwroot/lib/bootstrap/LICENSE View File

@@ -0,0 +1,22 @@
1
+The MIT License (MIT)
2
+
3
+Copyright (c) 2011-2018 Twitter, Inc.
4
+Copyright (c) 2011-2018 The Bootstrap Authors
5
+
6
+Permission is hereby granted, free of charge, to any person obtaining a copy
7
+of this software and associated documentation files (the "Software"), to deal
8
+in the Software without restriction, including without limitation the rights
9
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+copies of the Software, and to permit persons to whom the Software is
11
+furnished to do so, subject to the following conditions:
12
+
13
+The above copyright notice and this permission notice shall be included in
14
+all copies or substantial portions of the Software.
15
+
16
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
+THE SOFTWARE.

+ 3719
- 0
wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css
File diff suppressed because it is too large
View File


+ 1
- 0
wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map
File diff suppressed because it is too large
View File


+ 7
- 0
wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css
File diff suppressed because it is too large
View File


+ 1
- 0
wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map
File diff suppressed because it is too large
View File


+ 331
- 0
wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css View File

@@ -0,0 +1,331 @@
1
+/*!
2
+ * Bootstrap Reboot v4.3.1 (https://getbootstrap.com/)
3
+ * Copyright 2011-2019 The Bootstrap Authors
4
+ * Copyright 2011-2019 Twitter, Inc.
5
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6
+ * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
7
+ */
8
+*,
9
+*::before,
10
+*::after {
11
+  box-sizing: border-box;
12
+}
13
+
14
+html {
15
+  font-family: sans-serif;
16
+  line-height: 1.15;
17
+  -webkit-text-size-adjust: 100%;
18
+  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
19
+}
20
+
21
+article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
22
+  display: block;
23
+}
24
+
25
+body {
26
+  margin: 0;
27
+  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
28
+  font-size: 1rem;
29
+  font-weight: 400;
30
+  line-height: 1.5;
31
+  color: #212529;
32
+  text-align: left;
33
+  background-color: #fff;
34
+}
35
+
36
+[tabindex="-1"]:focus {
37
+  outline: 0 !important;
38
+}
39
+
40
+hr {
41
+  box-sizing: content-box;
42
+  height: 0;
43
+  overflow: visible;
44
+}
45
+
46
+h1, h2, h3, h4, h5, h6 {
47
+  margin-top: 0;
48
+  margin-bottom: 0.5rem;
49
+}
50
+
51
+p {
52
+  margin-top: 0;
53
+  margin-bottom: 1rem;
54
+}
55
+
56
+abbr[title],
57
+abbr[data-original-title] {
58
+  text-decoration: underline;
59
+  -webkit-text-decoration: underline dotted;
60
+  text-decoration: underline dotted;
61
+  cursor: help;
62
+  border-bottom: 0;
63
+  -webkit-text-decoration-skip-ink: none;
64
+  text-decoration-skip-ink: none;
65
+}
66
+
67
+address {
68
+  margin-bottom: 1rem;
69
+  font-style: normal;
70
+  line-height: inherit;
71
+}
72
+
73
+ol,
74
+ul,
75
+dl {
76
+  margin-top: 0;
77
+  margin-bottom: 1rem;
78
+}
79
+
80
+ol ol,
81
+ul ul,
82
+ol ul,
83
+ul ol {
84
+  margin-bottom: 0;
85
+}
86
+
87
+dt {
88
+  font-weight: 700;
89
+}
90
+
91
+dd {
92
+  margin-bottom: .5rem;
93
+  margin-left: 0;
94
+}
95
+
96
+blockquote {
97
+  margin: 0 0 1rem;
98
+}
99
+
100
+b,
101
+strong {
102
+  font-weight: bolder;
103
+}
104
+
105
+small {
106
+  font-size: 80%;
107
+}
108
+
109
+sub,
110
+sup {
111
+  position: relative;
112
+  font-size: 75%;
113
+  line-height: 0;
114
+  vertical-align: baseline;
115
+}
116
+
117
+sub {
118
+  bottom: -.25em;
119
+}
120
+
121
+sup {
122
+  top: -.5em;
123
+}
124
+
125
+a {
126
+  color: #007bff;
127
+  text-decoration: none;
128
+  background-color: transparent;
129
+}
130
+
131
+a:hover {
132
+  color: #0056b3;
133
+  text-decoration: underline;
134
+}
135
+
136
+a:not([href]):not([tabindex]) {
137
+  color: inherit;
138
+  text-decoration: none;
139
+}
140
+
141
+a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {
142
+  color: inherit;
143
+  text-decoration: none;
144
+}
145
+
146
+a:not([href]):not([tabindex]):focus {
147
+  outline: 0;
148
+}
149
+
150
+pre,
151
+code,
152
+kbd,
153
+samp {
154
+  font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
155
+  font-size: 1em;
156
+}
157
+
158
+pre {
159
+  margin-top: 0;
160
+  margin-bottom: 1rem;
161
+  overflow: auto;
162
+}
163
+
164
+figure {
165
+  margin: 0 0 1rem;
166
+}
167
+
168
+img {
169
+  vertical-align: middle;
170
+  border-style: none;
171
+}
172
+
173
+svg {
174
+  overflow: hidden;
175
+  vertical-align: middle;
176
+}
177
+
178
+table {
179
+  border-collapse: collapse;
180
+}
181
+
182
+caption {
183
+  padding-top: 0.75rem;
184
+  padding-bottom: 0.75rem;
185
+  color: #6c757d;
186
+  text-align: left;
187
+  caption-side: bottom;
188
+}
189
+
190
+th {
191
+  text-align: inherit;
192
+}
193
+
194
+label {
195
+  display: inline-block;
196
+  margin-bottom: 0.5rem;
197
+}
198
+
199
+button {
200
+  border-radius: 0;
201
+}
202
+
203
+button:focus {
204
+  outline: 1px dotted;
205
+  outline: 5px auto -webkit-focus-ring-color;
206
+}
207
+
208
+input,
209
+button,
210
+select,
211
+optgroup,
212
+textarea {
213
+  margin: 0;
214
+  font-family: inherit;
215
+  font-size: inherit;
216
+  line-height: inherit;
217
+}
218
+
219
+button,
220
+input {
221
+  overflow: visible;
222
+}
223
+
224
+button,
225
+select {
226
+  text-transform: none;
227
+}
228
+
229
+select {
230
+  word-wrap: normal;
231
+}
232
+
233
+button,
234
+[type="button"],
235
+[type="reset"],
236
+[type="submit"] {
237
+  -webkit-appearance: button;
238
+}
239
+
240
+button:not(:disabled),
241
+[type="button"]:not(:disabled),
242
+[type="reset"]:not(:disabled),
243
+[type="submit"]:not(:disabled) {
244
+  cursor: pointer;
245
+}
246
+
247
+button::-moz-focus-inner,
248
+[type="button"]::-moz-focus-inner,
249
+[type="reset"]::-moz-focus-inner,
250
+[type="submit"]::-moz-focus-inner {
251
+  padding: 0;
252
+  border-style: none;
253
+}
254
+
255
+input[type="radio"],
256
+input[type="checkbox"] {
257
+  box-sizing: border-box;
258
+  padding: 0;
259
+}
260
+
261
+input[type="date"],
262
+input[type="time"],
263
+input[type="datetime-local"],
264
+input[type="month"] {
265
+  -webkit-appearance: listbox;
266
+}
267
+
268
+textarea {
269
+  overflow: auto;
270
+  resize: vertical;
271
+}
272
+
273
+fieldset {
274
+  min-width: 0;
275
+  padding: 0;
276
+  margin: 0;
277
+  border: 0;
278
+}
279
+
280
+legend {
281
+  display: block;
282
+  width: 100%;
283
+  max-width: 100%;
284
+  padding: 0;
285
+  margin-bottom: .5rem;
286
+  font-size: 1.5rem;
287
+  line-height: inherit;
288
+  color: inherit;
289
+  white-space: normal;
290
+}
291
+
292
+progress {
293
+  vertical-align: baseline;
294
+}
295
+
296
+[type="number"]::-webkit-inner-spin-button,
297
+[type="number"]::-webkit-outer-spin-button {
298
+  height: auto;
299
+}
300
+
301
+[type="search"] {
302
+  outline-offset: -2px;
303
+  -webkit-appearance: none;
304
+}
305
+
306
+[type="search"]::-webkit-search-decoration {
307
+  -webkit-appearance: none;
308
+}
309
+
310
+::-webkit-file-upload-button {
311
+  font: inherit;
312
+  -webkit-appearance: button;
313
+}
314
+
315
+output {
316
+  display: inline-block;
317
+}
318
+
319
+summary {
320
+  display: list-item;
321
+  cursor: pointer;
322
+}
323
+
324
+template {
325
+  display: none;
326
+}
327
+
328
+[hidden] {
329
+  display: none !important;
330
+}
331
+/*# sourceMappingURL=bootstrap-reboot.css.map */

+ 1
- 0
wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map
File diff suppressed because it is too large
View File


+ 8
- 0
wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css View File

@@ -0,0 +1,8 @@
1
+/*!
2
+ * Bootstrap Reboot v4.3.1 (https://getbootstrap.com/)
3
+ * Copyright 2011-2019 The Bootstrap Authors
4
+ * Copyright 2011-2019 Twitter, Inc.
5
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6
+ * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
7
+ */*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}
8
+/*# sourceMappingURL=bootstrap-reboot.min.css.map */

+ 1
- 0
wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map
File diff suppressed because it is too large
View File


+ 10038
- 0
wwwroot/lib/bootstrap/dist/css/bootstrap.css
File diff suppressed because it is too large
View File


+ 1
- 0
wwwroot/lib/bootstrap/dist/css/bootstrap.css.map
File diff suppressed because it is too large
View File


+ 7
- 0
wwwroot/lib/bootstrap/dist/css/bootstrap.min.css
File diff suppressed because it is too large
View File


+ 1
- 0
wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map
File diff suppressed because it is too large
View File


+ 7013
- 0
wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js
File diff suppressed because it is too large
View File


+ 1
- 0
wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map
File diff suppressed because it is too large
View File


+ 7
- 0
wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js
File diff suppressed because it is too large
View File


+ 1
- 0
wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map
File diff suppressed because it is too large
View File


+ 4435
- 0
wwwroot/lib/bootstrap/dist/js/bootstrap.js
File diff suppressed because it is too large
View File


+ 1
- 0
wwwroot/lib/bootstrap/dist/js/bootstrap.js.map
File diff suppressed because it is too large
View File


+ 7
- 0
wwwroot/lib/bootstrap/dist/js/bootstrap.min.js
File diff suppressed because it is too large
View File


+ 1
- 0
wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map
File diff suppressed because it is too large
View File


+ 12
- 0
wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt View File

@@ -0,0 +1,12 @@
1
+Copyright (c) .NET Foundation. All rights reserved.
2
+
3
+Licensed under the Apache License, Version 2.0 (the "License"); you may not use
4
+these files except in compliance with the License. You may obtain a copy of the
5
+License at
6
+
7
+http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+Unless required by applicable law or agreed to in writing, software distributed
10
+under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
11
+CONDITIONS OF ANY KIND, either express or implied. See the License for the
12
+specific language governing permissions and limitations under the License.

+ 432
- 0
wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js View File

@@ -0,0 +1,432 @@
1
+// Unobtrusive validation support library for jQuery and jQuery Validate
2
+// Copyright (c) .NET Foundation. All rights reserved.
3
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
4
+// @version v3.2.11
5
+
6
+/*jslint white: true, browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: false */
7
+/*global document: false, jQuery: false */
8
+
9
+(function (factory) {
10
+    if (typeof define === 'function' && define.amd) {
11
+        // AMD. Register as an anonymous module.
12
+        define("jquery.validate.unobtrusive", ['jquery-validation'], factory);
13
+    } else if (typeof module === 'object' && module.exports) {
14
+        // CommonJS-like environments that support module.exports     
15
+        module.exports = factory(require('jquery-validation'));
16
+    } else {
17
+        // Browser global
18
+        jQuery.validator.unobtrusive = factory(jQuery);
19
+    }
20
+}(function ($) {
21
+    var $jQval = $.validator,
22
+        adapters,
23
+        data_validation = "unobtrusiveValidation";
24
+
25
+    function setValidationValues(options, ruleName, value) {
26
+        options.rules[ruleName] = value;
27
+        if (options.message) {
28
+            options.messages[ruleName] = options.message;
29
+        }
30
+    }
31
+
32
+    function splitAndTrim(value) {
33
+        return value.replace(/^\s+|\s+$/g, "").split(/\s*,\s*/g);
34
+    }
35
+
36
+    function escapeAttributeValue(value) {
37
+        // As mentioned on http://api.jquery.com/category/selectors/
38
+        return value.replace(/([!"#$%&'()*+,./:;<=>?@\[\\\]^`{|}~])/g, "\\$1");
39
+    }
40
+
41
+    function getModelPrefix(fieldName) {
42
+        return fieldName.substr(0, fieldName.lastIndexOf(".") + 1);
43
+    }
44
+
45
+    function appendModelPrefix(value, prefix) {
46
+        if (value.indexOf("*.") === 0) {
47
+            value = value.replace("*.", prefix);
48
+        }
49
+        return value;
50
+    }
51
+
52
+    function onError(error, inputElement) {  // 'this' is the form element
53
+        var container = $(this).find("[data-valmsg-for='" + escapeAttributeValue(inputElement[0].name) + "']"),
54
+            replaceAttrValue = container.attr("data-valmsg-replace"),
55
+            replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) !== false : null;
56
+
57
+        container.removeClass("field-validation-valid").addClass("field-validation-error");
58
+        error.data("unobtrusiveContainer", container);
59
+
60
+        if (replace) {
61
+            container.empty();
62
+            error.removeClass("input-validation-error").appendTo(container);
63
+        }
64
+        else {
65
+            error.hide();
66
+        }
67
+    }
68
+
69
+    function onErrors(event, validator) {  // 'this' is the form element
70
+        var container = $(this).find("[data-valmsg-summary=true]"),
71
+            list = container.find("ul");
72
+
73
+        if (list && list.length && validator.errorList.length) {
74
+            list.empty();
75
+            container.addClass("validation-summary-errors").removeClass("validation-summary-valid");
76
+
77
+            $.each(validator.errorList, function () {
78
+                $("<li />").html(this.message).appendTo(list);
79
+            });
80
+        }
81
+    }
82
+
83
+    function onSuccess(error) {  // 'this' is the form element
84
+        var container = error.data("unobtrusiveContainer");
85
+
86
+        if (container) {
87
+            var replaceAttrValue = container.attr("data-valmsg-replace"),
88
+                replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) : null;
89
+
90
+            container.addClass("field-validation-valid").removeClass("field-validation-error");
91
+            error.removeData("unobtrusiveContainer");
92
+
93
+            if (replace) {
94
+                container.empty();
95
+            }
96
+        }
97
+    }
98
+
99
+    function onReset(event) {  // 'this' is the form element
100
+        var $form = $(this),
101
+            key = '__jquery_unobtrusive_validation_form_reset';
102
+        if ($form.data(key)) {
103
+            return;
104
+        }
105
+        // Set a flag that indicates we're currently resetting the form.
106
+        $form.data(key, true);
107
+        try {
108
+            $form.data("validator").resetForm();
109
+        } finally {
110
+            $form.removeData(key);
111
+        }
112
+
113
+        $form.find(".validation-summary-errors")
114
+            .addClass("validation-summary-valid")
115
+            .removeClass("validation-summary-errors");
116
+        $form.find(".field-validation-error")
117
+            .addClass("field-validation-valid")
118
+            .removeClass("field-validation-error")
119
+            .removeData("unobtrusiveContainer")
120
+            .find(">*")  // If we were using valmsg-replace, get the underlying error
121
+            .removeData("unobtrusiveContainer");
122
+    }
123
+
124
+    function validationInfo(form) {
125
+        var $form = $(form),
126
+            result = $form.data(data_validation),
127
+            onResetProxy = $.proxy(onReset, form),
128
+            defaultOptions = $jQval.unobtrusive.options || {},
129
+            execInContext = function (name, args) {
130
+                var func = defaultOptions[name];
131
+                func && $.isFunction(func) && func.apply(form, args);
132
+            };
133
+
134
+        if (!result) {
135
+            result = {
136
+                options: {  // options structure passed to jQuery Validate's validate() method
137
+                    errorClass: defaultOptions.errorClass || "input-validation-error",
138
+                    errorElement: defaultOptions.errorElement || "span",
139
+                    errorPlacement: function () {
140
+                        onError.apply(form, arguments);
141
+                        execInContext("errorPlacement", arguments);
142
+                    },
143
+                    invalidHandler: function () {
144
+                        onErrors.apply(form, arguments);
145
+                        execInContext("invalidHandler", arguments);
146
+                    },
147
+                    messages: {},
148
+                    rules: {},
149
+                    success: function () {
150
+                        onSuccess.apply(form, arguments);
151
+                        execInContext("success", arguments);
152
+                    }
153
+                },
154
+                attachValidation: function () {
155
+                    $form
156
+                        .off("reset." + data_validation, onResetProxy)
157
+                        .on("reset." + data_validation, onResetProxy)
158
+                        .validate(this.options);
159
+                },
160
+                validate: function () {  // a validation function that is called by unobtrusive Ajax
161
+                    $form.validate();
162
+                    return $form.valid();
163
+                }
164
+            };
165
+            $form.data(data_validation, result);
166
+        }
167
+
168
+        return result;
169
+    }
170
+
171
+    $jQval.unobtrusive = {
172
+        adapters: [],
173
+
174
+        parseElement: function (element, skipAttach) {
175
+            /// <summary>
176
+            /// Parses a single HTML element for unobtrusive validation attributes.
177
+            /// </summary>
178
+            /// <param name="element" domElement="true">The HTML element to be parsed.</param>
179
+            /// <param name="skipAttach" type="Boolean">[Optional] true to skip attaching the
180
+            /// validation to the form. If parsing just this single element, you should specify true.
181
+            /// If parsing several elements, you should specify false, and manually attach the validation
182
+            /// to the form when you are finished. The default is false.</param>
183
+            var $element = $(element),
184
+                form = $element.parents("form")[0],
185
+                valInfo, rules, messages;
186
+
187
+            if (!form) {  // Cannot do client-side validation without a form
188
+                return;
189
+            }
190
+
191
+            valInfo = validationInfo(form);
192
+            valInfo.options.rules[element.name] = rules = {};
193
+            valInfo.options.messages[element.name] = messages = {};
194
+
195
+            $.each(this.adapters, function () {
196
+                var prefix = "data-val-" + this.name,
197
+                    message = $element.attr(prefix),
198
+                    paramValues = {};
199
+
200
+                if (message !== undefined) {  // Compare against undefined, because an empty message is legal (and falsy)
201
+                    prefix += "-";
202
+
203
+                    $.each(this.params, function () {
204
+                        paramValues[this] = $element.attr(prefix + this);
205
+                    });
206
+
207
+                    this.adapt({
208
+                        element: element,
209
+                        form: form,
210
+                        message: message,
211
+                        params: paramValues,
212
+                        rules: rules,
213
+                        messages: messages
214
+                    });
215
+                }
216
+            });
217
+
218
+            $.extend(rules, { "__dummy__": true });
219
+
220
+            if (!skipAttach) {
221
+                valInfo.attachValidation();
222
+            }
223
+        },
224
+
225
+        parse: function (selector) {
226
+            /// <summary>
227
+            /// Parses all the HTML elements in the specified selector. It looks for input elements decorated
228
+            /// with the [data-val=true] attribute value and enables validation according to the data-val-*
229
+            /// attribute values.
230
+            /// </summary>
231
+            /// <param name="selector" type="String">Any valid jQuery selector.</param>
232
+
233
+            // $forms includes all forms in selector's DOM hierarchy (parent, children and self) that have at least one
234
+            // element with data-val=true
235
+            var $selector = $(selector),
236
+                $forms = $selector.parents()
237
+                    .addBack()
238
+                    .filter("form")
239
+                    .add($selector.find("form"))
240
+                    .has("[data-val=true]");
241
+
242
+            $selector.find("[data-val=true]").each(function () {
243
+                $jQval.unobtrusive.parseElement(this, true);
244
+            });
245
+
246
+            $forms.each(function () {
247
+                var info = validationInfo(this);
248
+                if (info) {
249
+                    info.attachValidation();
250
+                }
251
+            });
252
+        }
253
+    };
254
+
255
+    adapters = $jQval.unobtrusive.adapters;
256
+
257
+    adapters.add = function (adapterName, params, fn) {
258
+        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation.</summary>
259
+        /// <param name="adapterName" type="String">The name of the adapter to be added. This matches the name used
260
+        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>
261
+        /// <param name="params" type="Array" optional="true">[Optional] An array of parameter names (strings) that will
262
+        /// be extracted from the data-val-nnnn-mmmm HTML attributes (where nnnn is the adapter name, and
263
+        /// mmmm is the parameter name).</param>
264
+        /// <param name="fn" type="Function">The function to call, which adapts the values from the HTML
265
+        /// attributes into jQuery Validate rules and/or messages.</param>
266
+        /// <returns type="jQuery.validator.unobtrusive.adapters" />
267
+        if (!fn) {  // Called with no params, just a function
268
+            fn = params;
269
+            params = [];
270
+        }
271
+        this.push({ name: adapterName, params: params, adapt: fn });
272
+        return this;
273
+    };
274
+
275
+    adapters.addBool = function (adapterName, ruleName) {
276
+        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where
277
+        /// the jQuery Validate validation rule has no parameter values.</summary>
278
+        /// <param name="adapterName" type="String">The name of the adapter to be added. This matches the name used
279
+        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>
280
+        /// <param name="ruleName" type="String" optional="true">[Optional] The name of the jQuery Validate rule. If not provided, the value
281
+        /// of adapterName will be used instead.</param>
282
+        /// <returns type="jQuery.validator.unobtrusive.adapters" />
283
+        return this.add(adapterName, function (options) {
284
+            setValidationValues(options, ruleName || adapterName, true);
285
+        });
286
+    };
287
+
288
+    adapters.addMinMax = function (adapterName, minRuleName, maxRuleName, minMaxRuleName, minAttribute, maxAttribute) {
289
+        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where
290
+        /// the jQuery Validate validation has three potential rules (one for min-only, one for max-only, and
291
+        /// one for min-and-max). The HTML parameters are expected to be named -min and -max.</summary>
292
+        /// <param name="adapterName" type="String">The name of the adapter to be added. This matches the name used
293
+        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>
294
+        /// <param name="minRuleName" type="String">The name of the jQuery Validate rule to be used when you only
295
+        /// have a minimum value.</param>
296
+        /// <param name="maxRuleName" type="String">The name of the jQuery Validate rule to be used when you only
297
+        /// have a maximum value.</param>
298
+        /// <param name="minMaxRuleName" type="String">The name of the jQuery Validate rule to be used when you
299
+        /// have both a minimum and maximum value.</param>
300
+        /// <param name="minAttribute" type="String" optional="true">[Optional] The name of the HTML attribute that
301
+        /// contains the minimum value. The default is "min".</param>
302
+        /// <param name="maxAttribute" type="String" optional="true">[Optional] The name of the HTML attribute that
303
+        /// contains the maximum value. The default is "max".</param>
304
+        /// <returns type="jQuery.validator.unobtrusive.adapters" />
305
+        return this.add(adapterName, [minAttribute || "min", maxAttribute || "max"], function (options) {
306
+            var min = options.params.min,
307
+                max = options.params.max;
308
+
309
+            if (min && max) {
310
+                setValidationValues(options, minMaxRuleName, [min, max]);
311
+            }
312
+            else if (min) {
313
+                setValidationValues(options, minRuleName, min);
314
+            }
315
+            else if (max) {
316
+                setValidationValues(options, maxRuleName, max);
317
+            }
318
+        });
319
+    };
320
+
321
+    adapters.addSingleVal = function (adapterName, attribute, ruleName) {
322
+        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where
323
+        /// the jQuery Validate validation rule has a single value.</summary>
324
+        /// <param name="adapterName" type="String">The name of the adapter to be added. This matches the name used
325
+        /// in the data-val-nnnn HTML attribute(where nnnn is the adapter name).</param>
326
+        /// <param name="attribute" type="String">[Optional] The name of the HTML attribute that contains the value.
327
+        /// The default is "val".</param>
328
+        /// <param name="ruleName" type="String" optional="true">[Optional] The name of the jQuery Validate rule. If not provided, the value
329
+        /// of adapterName will be used instead.</param>
330
+        /// <returns type="jQuery.validator.unobtrusive.adapters" />
331
+        return this.add(adapterName, [attribute || "val"], function (options) {
332
+            setValidationValues(options, ruleName || adapterName, options.params[attribute]);
333
+        });
334
+    };
335
+
336
+    $jQval.addMethod("__dummy__", function (value, element, params) {
337
+        return true;
338
+    });
339
+
340
+    $jQval.addMethod("regex", function (value, element, params) {
341
+        var match;
342
+        if (this.optional(element)) {
343
+            return true;
344
+        }
345
+
346
+        match = new RegExp(params).exec(value);
347
+        return (match && (match.index === 0) && (match[0].length === value.length));
348
+    });
349
+
350
+    $jQval.addMethod("nonalphamin", function (value, element, nonalphamin) {
351
+        var match;
352
+        if (nonalphamin) {
353
+            match = value.match(/\W/g);
354
+            match = match && match.length >= nonalphamin;
355
+        }
356
+        return match;
357
+    });
358
+
359
+    if ($jQval.methods.extension) {
360
+        adapters.addSingleVal("accept", "mimtype");
361
+        adapters.addSingleVal("extension", "extension");
362
+    } else {
363
+        // for backward compatibility, when the 'extension' validation method does not exist, such as with versions
364
+        // of JQuery Validation plugin prior to 1.10, we should use the 'accept' method for
365
+        // validating the extension, and ignore mime-type validations as they are not supported.
366
+        adapters.addSingleVal("extension", "extension", "accept");
367
+    }
368
+
369
+    adapters.addSingleVal("regex", "pattern");
370
+    adapters.addBool("creditcard").addBool("date").addBool("digits").addBool("email").addBool("number").addBool("url");
371
+    adapters.addMinMax("length", "minlength", "maxlength", "rangelength").addMinMax("range", "min", "max", "range");
372
+    adapters.addMinMax("minlength", "minlength").addMinMax("maxlength", "minlength", "maxlength");
373
+    adapters.add("equalto", ["other"], function (options) {
374
+        var prefix = getModelPrefix(options.element.name),
375
+            other = options.params.other,
376
+            fullOtherName = appendModelPrefix(other, prefix),
377
+            element = $(options.form).find(":input").filter("[name='" + escapeAttributeValue(fullOtherName) + "']")[0];
378
+
379
+        setValidationValues(options, "equalTo", element);
380
+    });
381
+    adapters.add("required", function (options) {
382
+        // jQuery Validate equates "required" with "mandatory" for checkbox elements
383
+        if (options.element.tagName.toUpperCase() !== "INPUT" || options.element.type.toUpperCase() !== "CHECKBOX") {
384
+            setValidationValues(options, "required", true);
385
+        }
386
+    });
387
+    adapters.add("remote", ["url", "type", "additionalfields"], function (options) {
388
+        var value = {
389
+            url: options.params.url,
390
+            type: options.params.type || "GET",
391
+            data: {}
392
+        },
393
+            prefix = getModelPrefix(options.element.name);
394
+
395
+        $.each(splitAndTrim(options.params.additionalfields || options.element.name), function (i, fieldName) {
396
+            var paramName = appendModelPrefix(fieldName, prefix);
397
+            value.data[paramName] = function () {
398
+                var field = $(options.form).find(":input").filter("[name='" + escapeAttributeValue(paramName) + "']");
399
+                // For checkboxes and radio buttons, only pick up values from checked fields.
400
+                if (field.is(":checkbox")) {
401
+                    return field.filter(":checked").val() || field.filter(":hidden").val() || '';
402
+                }
403
+                else if (field.is(":radio")) {
404
+                    return field.filter(":checked").val() || '';
405
+                }
406
+                return field.val();
407
+            };
408
+        });
409
+
410
+        setValidationValues(options, "remote", value);
411
+    });
412
+    adapters.add("password", ["min", "nonalphamin", "regex"], function (options) {
413
+        if (options.params.min) {
414
+            setValidationValues(options, "minlength", options.params.min);
415
+        }
416
+        if (options.params.nonalphamin) {
417
+            setValidationValues(options, "nonalphamin", options.params.nonalphamin);
418
+        }
419
+        if (options.params.regex) {
420
+            setValidationValues(options, "regex", options.params.regex);
421
+        }
422
+    });
423
+    adapters.add("fileextensions", ["extensions"], function (options) {
424
+        setValidationValues(options, "extension", options.params.extensions);
425
+    });
426
+
427
+    $(function () {
428
+        $jQval.unobtrusive.parse(document);
429
+    });
430
+
431
+    return $jQval.unobtrusive;
432
+}));

+ 5
- 0
wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js
File diff suppressed because it is too large
View File


+ 22
- 0
wwwroot/lib/jquery-validation/LICENSE.md View File

@@ -0,0 +1,22 @@
1
+The MIT License (MIT)
2
+=====================
3
+
4
+Copyright Jörn Zaefferer
5
+
6
+Permission is hereby granted, free of charge, to any person obtaining a copy
7
+of this software and associated documentation files (the "Software"), to deal
8
+in the Software without restriction, including without limitation the rights
9
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+copies of the Software, and to permit persons to whom the Software is
11
+furnished to do so, subject to the following conditions:
12
+
13
+The above copyright notice and this permission notice shall be included in
14
+all copies or substantial portions of the Software.
15
+
16
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
+THE SOFTWARE.

+ 1158
- 0
wwwroot/lib/jquery-validation/dist/additional-methods.js
File diff suppressed because it is too large
View File


+ 4
- 0
wwwroot/lib/jquery-validation/dist/additional-methods.min.js
File diff suppressed because it is too large
View File


+ 1601
- 0
wwwroot/lib/jquery-validation/dist/jquery.validate.js
File diff suppressed because it is too large
View File


+ 4
- 0
wwwroot/lib/jquery-validation/dist/jquery.validate.min.js
File diff suppressed because it is too large
View File


+ 36
- 0
wwwroot/lib/jquery/LICENSE.txt View File

@@ -0,0 +1,36 @@
1
+Copyright JS Foundation and other contributors, https://js.foundation/
2
+
3
+This software consists of voluntary contributions made by many
4
+individuals. For exact contribution history, see the revision history
5
+available at https://github.com/jquery/jquery
6
+
7
+The following license applies to all parts of this software except as
8
+documented below:
9
+
10
+====
11
+
12
+Permission is hereby granted, free of charge, to any person obtaining
13
+a copy of this software and associated documentation files (the
14
+"Software"), to deal in the Software without restriction, including
15
+without limitation the rights to use, copy, modify, merge, publish,
16
+distribute, sublicense, and/or sell copies of the Software, and to
17
+permit persons to whom the Software is furnished to do so, subject to
18
+the following conditions:
19
+
20
+The above copyright notice and this permission notice shall be
21
+included in all copies or substantial portions of the Software.
22
+
23
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
27
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
28
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
29
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30
+
31
+====
32
+
33
+All files located in the node_modules and external directories are
34
+externally maintained libraries used by this software which have their
35
+own licenses; we recommend you read them, as their terms may differ from
36
+the terms above.

+ 10872
- 0
wwwroot/lib/jquery/dist/jquery.js
File diff suppressed because it is too large
View File


+ 2
- 0
wwwroot/lib/jquery/dist/jquery.min.js
File diff suppressed because it is too large
View File


+ 1
- 0
wwwroot/lib/jquery/dist/jquery.min.map
File diff suppressed because it is too large
View File


Loading…
Cancel
Save