()
19 | .Build();
20 |
21 | host.Run();
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/Startup.cs:
--------------------------------------------------------------------------------
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.Extensions.Configuration;
8 | using Microsoft.Extensions.DependencyInjection;
9 | using Microsoft.Extensions.Logging;
10 |
11 | namespace MyProject.StarterWeb
12 | {
13 | public class Startup
14 | {
15 | public Startup(IHostingEnvironment env)
16 | {
17 | var builder = new ConfigurationBuilder()
18 | .SetBasePath(env.ContentRootPath)
19 | .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
20 | .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
21 | .AddEnvironmentVariables();
22 | Configuration = builder.Build();
23 | }
24 |
25 | public IConfigurationRoot Configuration { get; }
26 |
27 | // This method gets called by the runtime. Use this method to add services to the container.
28 | public void ConfigureServices(IServiceCollection services)
29 | {
30 | // Add framework services.
31 | services.AddMvc();
32 | }
33 |
34 | // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
35 | public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
36 | {
37 | loggerFactory.AddConsole(Configuration.GetSection("Logging"));
38 | loggerFactory.AddDebug();
39 |
40 | if (env.IsDevelopment())
41 | {
42 | app.UseDeveloperExceptionPage();
43 | app.UseBrowserLink();
44 | }
45 | else
46 | {
47 | app.UseExceptionHandler("/Home/Error");
48 | }
49 |
50 | app.UseStaticFiles();
51 |
52 | app.UseMvc(routes =>
53 | {
54 | routes.MapRoute(
55 | name: "default",
56 | template: "{controller=Home}/{action=Index}/{id?}");
57 | });
58 | }
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/Views/Home/About.cshtml:
--------------------------------------------------------------------------------
1 | @{
2 | ViewData["Title"] = "About";
3 | }
4 | @ViewData["Title"].
5 | @ViewData["Message"]
6 |
7 | Use this area to provide additional information.
8 |
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/Views/Home/Contact.cshtml:
--------------------------------------------------------------------------------
1 | @{
2 | ViewData["Title"] = "Contact";
3 | }
4 | @ViewData["Title"].
5 | @ViewData["Message"]
6 |
7 |
8 | One Microsoft Way
9 | Redmond, WA 98052-6399
10 | P:
11 | 425.555.0100
12 |
13 |
14 |
15 | Support: Support@example.com
16 | Marketing: Marketing@example.com
17 |
18 |
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/Views/Home/Index.cshtml:
--------------------------------------------------------------------------------
1 | @{
2 | ViewData["Title"] = "Home Page";
3 | }
4 |
5 | Hello World!
6 |
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/Views/Shared/Error.cshtml:
--------------------------------------------------------------------------------
1 | @{
2 | ViewData["Title"] = "Error";
3 | }
4 |
5 | Error.
6 | An error occurred while processing your request.
7 |
8 | Development Mode
9 |
10 | Swapping to Development environment will display more detailed information about the error that occurred.
11 |
12 |
13 | Development environment should not be enabled in deployed applications , as it can result in sensitive information from exceptions being displayed to end users. For local debugging, development environment can be enabled by setting the ASPNETCORE_ENVIRONMENT environment variable to Development , and restarting the application.
14 |
15 |
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/Views/Shared/_Layout.cshtml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | @ViewData["Title"] - Contoso Web
7 |
8 |
9 |
10 |
11 |
12 |
13 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
31 |
32 |
33 | Home
34 | About
35 | @*#if (EnableContactPage)
36 | Contact
37 | #endif*@
38 |
39 |
40 |
41 |
42 |
43 | @RenderBody()
44 |
45 |
46 | © 2017 - Contoso
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
62 |
68 |
69 |
70 |
71 | @RenderSection("Scripts", required: false)
72 |
73 |
74 |
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/Views/_ViewImports.cshtml:
--------------------------------------------------------------------------------
1 | @using MyProject.StarterWeb
2 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
3 |
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/Views/_ViewStart.cshtml:
--------------------------------------------------------------------------------
1 | @{
2 | Layout = "_Layout";
3 | }
4 |
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/appsettings.Development.json:
--------------------------------------------------------------------------------
1 | {
2 | "Logging": {
3 | "IncludeScopes": false,
4 | "LogLevel": {
5 | "Default": "Debug",
6 | "System": "Information",
7 | "Microsoft": "Information"
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/appsettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "Logging": {
3 | "IncludeScopes": false,
4 | "LogLevel": {
5 | "Default": "Warning"
6 | }
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "asp.net",
3 | "private": true,
4 | "dependencies": {
5 | "bootstrap": "3.3.7",
6 | "jquery": "2.2.0",
7 | "jquery-validation": "1.14.0",
8 | "jquery-validation-unobtrusive": "3.2.6"
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/bundleconfig.json:
--------------------------------------------------------------------------------
1 | // Configure bundling and minification for the project.
2 | // More info at https://go.microsoft.com/fwlink/?LinkId=808241
3 | [
4 | {
5 | "outputFileName": "wwwroot/css/site.min.css",
6 | // An array of relative input file paths. Globbing patterns supported
7 | "inputFiles": [
8 | "wwwroot/css/site.css"
9 | ]
10 | },
11 | {
12 | "outputFileName": "wwwroot/js/site.min.js",
13 | "inputFiles": [
14 | "wwwroot/js/site.js"
15 | ],
16 | // Optionally specify minification options
17 | "minify": {
18 | "enabled": true,
19 | "renameLocals": true
20 | },
21 | // Optionally generate .map file
22 | "sourceMap": false
23 | }
24 | ]
25 |
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/wwwroot/css/site.css:
--------------------------------------------------------------------------------
1 | body {
2 | padding-top: 50px;
3 | padding-bottom: 20px;
4 | }
5 |
6 | /* Wrapping element */
7 | /* Set some basic padding to keep content from hitting the edges */
8 | .body-content {
9 | padding-left: 15px;
10 | padding-right: 15px;
11 | }
12 |
13 | /* Set widths on the form inputs since otherwise they're 100% wide */
14 | input,
15 | select,
16 | textarea {
17 | max-width: 280px;
18 | }
19 |
20 | /* Carousel */
21 | .carousel-caption p {
22 | font-size: 20px;
23 | line-height: 1.4;
24 | }
25 |
26 | /* Make .svg files in the carousel display properly in older browsers */
27 | .carousel-inner .item img[src$=".svg"] {
28 | width: 100%;
29 | }
30 |
31 | /* Hide/rearrange for smaller screens */
32 | @media screen and (max-width: 767px) {
33 | /* Hide captions */
34 | .carousel-caption {
35 | display: none;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/wwwroot/css/site.min.css:
--------------------------------------------------------------------------------
1 | body{padding-top:50px;padding-bottom:20px}.body-content{padding-left:15px;padding-right:15px}input,select,textarea{max-width:280px}.carousel-caption p{font-size:20px;line-height:1.4}.carousel-inner .item img[src$=".svg"]{width:100%}@media screen and (max-width:767px){.carousel-caption{display:none}}
2 |
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/wwwroot/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dotnet/dotnet-template-samples/4af2d4d475bcd9657c0c0cee1bc352bee8b7a595/03-optional-page/MyProject.StarterWeb/wwwroot/favicon.ico
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/wwwroot/images/banner1.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/wwwroot/images/banner2.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/wwwroot/images/banner3.svg:
--------------------------------------------------------------------------------
1 | banner3b
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/wwwroot/images/banner4.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/wwwroot/js/site.js:
--------------------------------------------------------------------------------
1 | // Write your Javascript code.
2 |
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/wwwroot/js/site.min.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dotnet/dotnet-template-samples/4af2d4d475bcd9657c0c0cee1bc352bee8b7a595/03-optional-page/MyProject.StarterWeb/wwwroot/js/site.min.js
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/wwwroot/lib/bootstrap/.bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "bootstrap",
3 | "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.",
4 | "keywords": [
5 | "css",
6 | "js",
7 | "less",
8 | "mobile-first",
9 | "responsive",
10 | "front-end",
11 | "framework",
12 | "web"
13 | ],
14 | "homepage": "http://getbootstrap.com",
15 | "license": "MIT",
16 | "moduleType": "globals",
17 | "main": [
18 | "less/bootstrap.less",
19 | "dist/js/bootstrap.js"
20 | ],
21 | "ignore": [
22 | "/.*",
23 | "_config.yml",
24 | "CNAME",
25 | "composer.json",
26 | "CONTRIBUTING.md",
27 | "docs",
28 | "js/tests",
29 | "test-infra"
30 | ],
31 | "dependencies": {
32 | "jquery": "1.9.1 - 3"
33 | },
34 | "version": "3.3.7",
35 | "_release": "3.3.7",
36 | "_resolution": {
37 | "type": "version",
38 | "tag": "v3.3.7",
39 | "commit": "0b9c4a4007c44201dce9a6cc1a38407005c26c86"
40 | },
41 | "_source": "https://github.com/twbs/bootstrap.git",
42 | "_target": "v3.3.7",
43 | "_originalSource": "bootstrap",
44 | "_direct": true
45 | }
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/wwwroot/lib/bootstrap/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2011-2016 Twitter, Inc.
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/wwwroot/lib/bootstrap/dist/css/bootstrap-theme.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v3.3.7 (http://getbootstrap.com)
3 | * Copyright 2011-2016 Twitter, Inc.
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 | */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}
6 | /*# sourceMappingURL=bootstrap-theme.min.css.map */
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dotnet/dotnet-template-samples/4af2d4d475bcd9657c0c0cee1bc352bee8b7a595/03-optional-page/MyProject.StarterWeb/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dotnet/dotnet-template-samples/4af2d4d475bcd9657c0c0cee1bc352bee8b7a595/03-optional-page/MyProject.StarterWeb/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dotnet/dotnet-template-samples/4af2d4d475bcd9657c0c0cee1bc352bee8b7a595/03-optional-page/MyProject.StarterWeb/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dotnet/dotnet-template-samples/4af2d4d475bcd9657c0c0cee1bc352bee8b7a595/03-optional-page/MyProject.StarterWeb/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/wwwroot/lib/bootstrap/dist/js/npm.js:
--------------------------------------------------------------------------------
1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
2 | require('../../js/transition.js')
3 | require('../../js/alert.js')
4 | require('../../js/button.js')
5 | require('../../js/carousel.js')
6 | require('../../js/collapse.js')
7 | require('../../js/dropdown.js')
8 | require('../../js/modal.js')
9 | require('../../js/tooltip.js')
10 | require('../../js/popover.js')
11 | require('../../js/scrollspy.js')
12 | require('../../js/tab.js')
13 | require('../../js/affix.js')
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/wwwroot/lib/jquery-validation-unobtrusive/.bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "jquery-validation-unobtrusive",
3 | "version": "3.2.6",
4 | "homepage": "https://github.com/aspnet/jquery-validation-unobtrusive",
5 | "description": "Add-on to jQuery Validation to enable unobtrusive validation options in data-* attributes.",
6 | "main": [
7 | "jquery.validate.unobtrusive.js"
8 | ],
9 | "ignore": [
10 | "**/.*",
11 | "*.json",
12 | "*.md",
13 | "*.txt",
14 | "gulpfile.js"
15 | ],
16 | "keywords": [
17 | "jquery",
18 | "asp.net",
19 | "mvc",
20 | "validation",
21 | "unobtrusive"
22 | ],
23 | "authors": [
24 | "Microsoft"
25 | ],
26 | "license": "http://www.microsoft.com/web/webpi/eula/net_library_eula_enu.htm",
27 | "repository": {
28 | "type": "git",
29 | "url": "git://github.com/aspnet/jquery-validation-unobtrusive.git"
30 | },
31 | "dependencies": {
32 | "jquery-validation": ">=1.8",
33 | "jquery": ">=1.8"
34 | },
35 | "_release": "3.2.6",
36 | "_resolution": {
37 | "type": "version",
38 | "tag": "v3.2.6",
39 | "commit": "13386cd1b5947d8a5d23a12b531ce3960be1eba7"
40 | },
41 | "_source": "git://github.com/aspnet/jquery-validation-unobtrusive.git",
42 | "_target": "3.2.6",
43 | "_originalSource": "jquery-validation-unobtrusive"
44 | }
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js:
--------------------------------------------------------------------------------
1 | /*!
2 | ** Unobtrusive validation support library for jQuery and jQuery Validate
3 | ** Copyright (C) Microsoft Corporation. All rights reserved.
4 | */
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 ($) {
10 | var $jQval = $.validator,
11 | adapters,
12 | data_validation = "unobtrusiveValidation";
13 |
14 | function setValidationValues(options, ruleName, value) {
15 | options.rules[ruleName] = value;
16 | if (options.message) {
17 | options.messages[ruleName] = options.message;
18 | }
19 | }
20 |
21 | function splitAndTrim(value) {
22 | return value.replace(/^\s+|\s+$/g, "").split(/\s*,\s*/g);
23 | }
24 |
25 | function escapeAttributeValue(value) {
26 | // As mentioned on http://api.jquery.com/category/selectors/
27 | return value.replace(/([!"#$%&'()*+,./:;<=>?@\[\\\]^`{|}~])/g, "\\$1");
28 | }
29 |
30 | function getModelPrefix(fieldName) {
31 | return fieldName.substr(0, fieldName.lastIndexOf(".") + 1);
32 | }
33 |
34 | function appendModelPrefix(value, prefix) {
35 | if (value.indexOf("*.") === 0) {
36 | value = value.replace("*.", prefix);
37 | }
38 | return value;
39 | }
40 |
41 | function onError(error, inputElement) { // 'this' is the form element
42 | var container = $(this).find("[data-valmsg-for='" + escapeAttributeValue(inputElement[0].name) + "']"),
43 | replaceAttrValue = container.attr("data-valmsg-replace"),
44 | replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) !== false : null;
45 |
46 | container.removeClass("field-validation-valid").addClass("field-validation-error");
47 | error.data("unobtrusiveContainer", container);
48 |
49 | if (replace) {
50 | container.empty();
51 | error.removeClass("input-validation-error").appendTo(container);
52 | }
53 | else {
54 | error.hide();
55 | }
56 | }
57 |
58 | function onErrors(event, validator) { // 'this' is the form element
59 | var container = $(this).find("[data-valmsg-summary=true]"),
60 | list = container.find("ul");
61 |
62 | if (list && list.length && validator.errorList.length) {
63 | list.empty();
64 | container.addClass("validation-summary-errors").removeClass("validation-summary-valid");
65 |
66 | $.each(validator.errorList, function () {
67 | $(" ").html(this.message).appendTo(list);
68 | });
69 | }
70 | }
71 |
72 | function onSuccess(error) { // 'this' is the form element
73 | var container = error.data("unobtrusiveContainer");
74 |
75 | if (container) {
76 | var replaceAttrValue = container.attr("data-valmsg-replace"),
77 | replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) : null;
78 |
79 | container.addClass("field-validation-valid").removeClass("field-validation-error");
80 | error.removeData("unobtrusiveContainer");
81 |
82 | if (replace) {
83 | container.empty();
84 | }
85 | }
86 | }
87 |
88 | function onReset(event) { // 'this' is the form element
89 | var $form = $(this),
90 | key = '__jquery_unobtrusive_validation_form_reset';
91 | if ($form.data(key)) {
92 | return;
93 | }
94 | // Set a flag that indicates we're currently resetting the form.
95 | $form.data(key, true);
96 | try {
97 | $form.data("validator").resetForm();
98 | } finally {
99 | $form.removeData(key);
100 | }
101 |
102 | $form.find(".validation-summary-errors")
103 | .addClass("validation-summary-valid")
104 | .removeClass("validation-summary-errors");
105 | $form.find(".field-validation-error")
106 | .addClass("field-validation-valid")
107 | .removeClass("field-validation-error")
108 | .removeData("unobtrusiveContainer")
109 | .find(">*") // If we were using valmsg-replace, get the underlying error
110 | .removeData("unobtrusiveContainer");
111 | }
112 |
113 | function validationInfo(form) {
114 | var $form = $(form),
115 | result = $form.data(data_validation),
116 | onResetProxy = $.proxy(onReset, form),
117 | defaultOptions = $jQval.unobtrusive.options || {},
118 | execInContext = function (name, args) {
119 | var func = defaultOptions[name];
120 | func && $.isFunction(func) && func.apply(form, args);
121 | }
122 |
123 | if (!result) {
124 | result = {
125 | options: { // options structure passed to jQuery Validate's validate() method
126 | errorClass: defaultOptions.errorClass || "input-validation-error",
127 | errorElement: defaultOptions.errorElement || "span",
128 | errorPlacement: function () {
129 | onError.apply(form, arguments);
130 | execInContext("errorPlacement", arguments);
131 | },
132 | invalidHandler: function () {
133 | onErrors.apply(form, arguments);
134 | execInContext("invalidHandler", arguments);
135 | },
136 | messages: {},
137 | rules: {},
138 | success: function () {
139 | onSuccess.apply(form, arguments);
140 | execInContext("success", arguments);
141 | }
142 | },
143 | attachValidation: function () {
144 | $form
145 | .off("reset." + data_validation, onResetProxy)
146 | .on("reset." + data_validation, onResetProxy)
147 | .validate(this.options);
148 | },
149 | validate: function () { // a validation function that is called by unobtrusive Ajax
150 | $form.validate();
151 | return $form.valid();
152 | }
153 | };
154 | $form.data(data_validation, result);
155 | }
156 |
157 | return result;
158 | }
159 |
160 | $jQval.unobtrusive = {
161 | adapters: [],
162 |
163 | parseElement: function (element, skipAttach) {
164 | ///
165 | /// Parses a single HTML element for unobtrusive validation attributes.
166 | ///
167 | /// The HTML element to be parsed.
168 | /// [Optional] true to skip attaching the
169 | /// validation to the form. If parsing just this single element, you should specify true.
170 | /// If parsing several elements, you should specify false, and manually attach the validation
171 | /// to the form when you are finished. The default is false.
172 | var $element = $(element),
173 | form = $element.parents("form")[0],
174 | valInfo, rules, messages;
175 |
176 | if (!form) { // Cannot do client-side validation without a form
177 | return;
178 | }
179 |
180 | valInfo = validationInfo(form);
181 | valInfo.options.rules[element.name] = rules = {};
182 | valInfo.options.messages[element.name] = messages = {};
183 |
184 | $.each(this.adapters, function () {
185 | var prefix = "data-val-" + this.name,
186 | message = $element.attr(prefix),
187 | paramValues = {};
188 |
189 | if (message !== undefined) { // Compare against undefined, because an empty message is legal (and falsy)
190 | prefix += "-";
191 |
192 | $.each(this.params, function () {
193 | paramValues[this] = $element.attr(prefix + this);
194 | });
195 |
196 | this.adapt({
197 | element: element,
198 | form: form,
199 | message: message,
200 | params: paramValues,
201 | rules: rules,
202 | messages: messages
203 | });
204 | }
205 | });
206 |
207 | $.extend(rules, { "__dummy__": true });
208 |
209 | if (!skipAttach) {
210 | valInfo.attachValidation();
211 | }
212 | },
213 |
214 | parse: function (selector) {
215 | ///
216 | /// Parses all the HTML elements in the specified selector. It looks for input elements decorated
217 | /// with the [data-val=true] attribute value and enables validation according to the data-val-*
218 | /// attribute values.
219 | ///
220 | /// Any valid jQuery selector.
221 |
222 | // $forms includes all forms in selector's DOM hierarchy (parent, children and self) that have at least one
223 | // element with data-val=true
224 | var $selector = $(selector),
225 | $forms = $selector.parents()
226 | .addBack()
227 | .filter("form")
228 | .add($selector.find("form"))
229 | .has("[data-val=true]");
230 |
231 | $selector.find("[data-val=true]").each(function () {
232 | $jQval.unobtrusive.parseElement(this, true);
233 | });
234 |
235 | $forms.each(function () {
236 | var info = validationInfo(this);
237 | if (info) {
238 | info.attachValidation();
239 | }
240 | });
241 | }
242 | };
243 |
244 | adapters = $jQval.unobtrusive.adapters;
245 |
246 | adapters.add = function (adapterName, params, fn) {
247 | /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation.
248 | /// The name of the adapter to be added. This matches the name used
249 | /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).
250 | /// [Optional] An array of parameter names (strings) that will
251 | /// be extracted from the data-val-nnnn-mmmm HTML attributes (where nnnn is the adapter name, and
252 | /// mmmm is the parameter name).
253 | /// The function to call, which adapts the values from the HTML
254 | /// attributes into jQuery Validate rules and/or messages.
255 | ///
256 | if (!fn) { // Called with no params, just a function
257 | fn = params;
258 | params = [];
259 | }
260 | this.push({ name: adapterName, params: params, adapt: fn });
261 | return this;
262 | };
263 |
264 | adapters.addBool = function (adapterName, ruleName) {
265 | /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where
266 | /// the jQuery Validate validation rule has no parameter values.
267 | /// The name of the adapter to be added. This matches the name used
268 | /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).
269 | /// [Optional] The name of the jQuery Validate rule. If not provided, the value
270 | /// of adapterName will be used instead.
271 | ///
272 | return this.add(adapterName, function (options) {
273 | setValidationValues(options, ruleName || adapterName, true);
274 | });
275 | };
276 |
277 | adapters.addMinMax = function (adapterName, minRuleName, maxRuleName, minMaxRuleName, minAttribute, maxAttribute) {
278 | /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where
279 | /// the jQuery Validate validation has three potential rules (one for min-only, one for max-only, and
280 | /// one for min-and-max). The HTML parameters are expected to be named -min and -max.
281 | /// The name of the adapter to be added. This matches the name used
282 | /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).
283 | /// The name of the jQuery Validate rule to be used when you only
284 | /// have a minimum value.
285 | /// The name of the jQuery Validate rule to be used when you only
286 | /// have a maximum value.
287 | /// The name of the jQuery Validate rule to be used when you
288 | /// have both a minimum and maximum value.
289 | /// [Optional] The name of the HTML attribute that
290 | /// contains the minimum value. The default is "min".
291 | /// [Optional] The name of the HTML attribute that
292 | /// contains the maximum value. The default is "max".
293 | ///
294 | return this.add(adapterName, [minAttribute || "min", maxAttribute || "max"], function (options) {
295 | var min = options.params.min,
296 | max = options.params.max;
297 |
298 | if (min && max) {
299 | setValidationValues(options, minMaxRuleName, [min, max]);
300 | }
301 | else if (min) {
302 | setValidationValues(options, minRuleName, min);
303 | }
304 | else if (max) {
305 | setValidationValues(options, maxRuleName, max);
306 | }
307 | });
308 | };
309 |
310 | adapters.addSingleVal = function (adapterName, attribute, ruleName) {
311 | /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where
312 | /// the jQuery Validate validation rule has a single value.
313 | /// The name of the adapter to be added. This matches the name used
314 | /// in the data-val-nnnn HTML attribute(where nnnn is the adapter name).
315 | /// [Optional] The name of the HTML attribute that contains the value.
316 | /// The default is "val".
317 | /// [Optional] The name of the jQuery Validate rule. If not provided, the value
318 | /// of adapterName will be used instead.
319 | ///
320 | return this.add(adapterName, [attribute || "val"], function (options) {
321 | setValidationValues(options, ruleName || adapterName, options.params[attribute]);
322 | });
323 | };
324 |
325 | $jQval.addMethod("__dummy__", function (value, element, params) {
326 | return true;
327 | });
328 |
329 | $jQval.addMethod("regex", function (value, element, params) {
330 | var match;
331 | if (this.optional(element)) {
332 | return true;
333 | }
334 |
335 | match = new RegExp(params).exec(value);
336 | return (match && (match.index === 0) && (match[0].length === value.length));
337 | });
338 |
339 | $jQval.addMethod("nonalphamin", function (value, element, nonalphamin) {
340 | var match;
341 | if (nonalphamin) {
342 | match = value.match(/\W/g);
343 | match = match && match.length >= nonalphamin;
344 | }
345 | return match;
346 | });
347 |
348 | if ($jQval.methods.extension) {
349 | adapters.addSingleVal("accept", "mimtype");
350 | adapters.addSingleVal("extension", "extension");
351 | } else {
352 | // for backward compatibility, when the 'extension' validation method does not exist, such as with versions
353 | // of JQuery Validation plugin prior to 1.10, we should use the 'accept' method for
354 | // validating the extension, and ignore mime-type validations as they are not supported.
355 | adapters.addSingleVal("extension", "extension", "accept");
356 | }
357 |
358 | adapters.addSingleVal("regex", "pattern");
359 | adapters.addBool("creditcard").addBool("date").addBool("digits").addBool("email").addBool("number").addBool("url");
360 | adapters.addMinMax("length", "minlength", "maxlength", "rangelength").addMinMax("range", "min", "max", "range");
361 | adapters.addMinMax("minlength", "minlength").addMinMax("maxlength", "minlength", "maxlength");
362 | adapters.add("equalto", ["other"], function (options) {
363 | var prefix = getModelPrefix(options.element.name),
364 | other = options.params.other,
365 | fullOtherName = appendModelPrefix(other, prefix),
366 | element = $(options.form).find(":input").filter("[name='" + escapeAttributeValue(fullOtherName) + "']")[0];
367 |
368 | setValidationValues(options, "equalTo", element);
369 | });
370 | adapters.add("required", function (options) {
371 | // jQuery Validate equates "required" with "mandatory" for checkbox elements
372 | if (options.element.tagName.toUpperCase() !== "INPUT" || options.element.type.toUpperCase() !== "CHECKBOX") {
373 | setValidationValues(options, "required", true);
374 | }
375 | });
376 | adapters.add("remote", ["url", "type", "additionalfields"], function (options) {
377 | var value = {
378 | url: options.params.url,
379 | type: options.params.type || "GET",
380 | data: {}
381 | },
382 | prefix = getModelPrefix(options.element.name);
383 |
384 | $.each(splitAndTrim(options.params.additionalfields || options.element.name), function (i, fieldName) {
385 | var paramName = appendModelPrefix(fieldName, prefix);
386 | value.data[paramName] = function () {
387 | var field = $(options.form).find(":input").filter("[name='" + escapeAttributeValue(paramName) + "']");
388 | // For checkboxes and radio buttons, only pick up values from checked fields.
389 | if (field.is(":checkbox")) {
390 | return field.filter(":checked").val() || field.filter(":hidden").val() || '';
391 | }
392 | else if (field.is(":radio")) {
393 | return field.filter(":checked").val() || '';
394 | }
395 | return field.val();
396 | };
397 | });
398 |
399 | setValidationValues(options, "remote", value);
400 | });
401 | adapters.add("password", ["min", "nonalphamin", "regex"], function (options) {
402 | if (options.params.min) {
403 | setValidationValues(options, "minlength", options.params.min);
404 | }
405 | if (options.params.nonalphamin) {
406 | setValidationValues(options, "nonalphamin", options.params.nonalphamin);
407 | }
408 | if (options.params.regex) {
409 | setValidationValues(options, "regex", options.params.regex);
410 | }
411 | });
412 |
413 | $(function () {
414 | $jQval.unobtrusive.parse(document);
415 | });
416 | }(jQuery));
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js:
--------------------------------------------------------------------------------
1 | /*
2 | ** Unobtrusive validation support library for jQuery and jQuery Validate
3 | ** Copyright (C) Microsoft Corporation. All rights reserved.
4 | */
5 | !function(a){function e(a,e,n){a.rules[e]=n,a.message&&(a.messages[e]=a.message)}function n(a){return a.replace(/^\s+|\s+$/g,"").split(/\s*,\s*/g)}function t(a){return a.replace(/([!"#$%&'()*+,./:;<=>?@\[\\\]^`{|}~])/g,"\\$1")}function r(a){return a.substr(0,a.lastIndexOf(".")+1)}function i(a,e){return 0===a.indexOf("*.")&&(a=a.replace("*.",e)),a}function o(e,n){var r=a(this).find("[data-valmsg-for='"+t(n[0].name)+"']"),i=r.attr("data-valmsg-replace"),o=i?a.parseJSON(i)!==!1:null;r.removeClass("field-validation-valid").addClass("field-validation-error"),e.data("unobtrusiveContainer",r),o?(r.empty(),e.removeClass("input-validation-error").appendTo(r)):e.hide()}function d(e,n){var t=a(this).find("[data-valmsg-summary=true]"),r=t.find("ul");r&&r.length&&n.errorList.length&&(r.empty(),t.addClass("validation-summary-errors").removeClass("validation-summary-valid"),a.each(n.errorList,function(){a(" ").html(this.message).appendTo(r)}))}function s(e){var n=e.data("unobtrusiveContainer");if(n){var t=n.attr("data-valmsg-replace"),r=t?a.parseJSON(t):null;n.addClass("field-validation-valid").removeClass("field-validation-error"),e.removeData("unobtrusiveContainer"),r&&n.empty()}}function l(e){var n=a(this),t="__jquery_unobtrusive_validation_form_reset";if(!n.data(t)){n.data(t,!0);try{n.data("validator").resetForm()}finally{n.removeData(t)}n.find(".validation-summary-errors").addClass("validation-summary-valid").removeClass("validation-summary-errors"),n.find(".field-validation-error").addClass("field-validation-valid").removeClass("field-validation-error").removeData("unobtrusiveContainer").find(">*").removeData("unobtrusiveContainer")}}function m(e){var n=a(e),t=n.data(v),r=a.proxy(l,e),i=p.unobtrusive.options||{},m=function(n,t){var r=i[n];r&&a.isFunction(r)&&r.apply(e,t)};return t||(t={options:{errorClass:i.errorClass||"input-validation-error",errorElement:i.errorElement||"span",errorPlacement:function(){o.apply(e,arguments),m("errorPlacement",arguments)},invalidHandler:function(){d.apply(e,arguments),m("invalidHandler",arguments)},messages:{},rules:{},success:function(){s.apply(e,arguments),m("success",arguments)}},attachValidation:function(){n.off("reset."+v,r).on("reset."+v,r).validate(this.options)},validate:function(){return n.validate(),n.valid()}},n.data(v,t)),t}var u,p=a.validator,v="unobtrusiveValidation";p.unobtrusive={adapters:[],parseElement:function(e,n){var t,r,i,o=a(e),d=o.parents("form")[0];d&&(t=m(d),t.options.rules[e.name]=r={},t.options.messages[e.name]=i={},a.each(this.adapters,function(){var n="data-val-"+this.name,t=o.attr(n),s={};void 0!==t&&(n+="-",a.each(this.params,function(){s[this]=o.attr(n+this)}),this.adapt({element:e,form:d,message:t,params:s,rules:r,messages:i}))}),a.extend(r,{__dummy__:!0}),n||t.attachValidation())},parse:function(e){var n=a(e),t=n.parents().addBack().filter("form").add(n.find("form")).has("[data-val=true]");n.find("[data-val=true]").each(function(){p.unobtrusive.parseElement(this,!0)}),t.each(function(){var a=m(this);a&&a.attachValidation()})}},u=p.unobtrusive.adapters,u.add=function(a,e,n){return n||(n=e,e=[]),this.push({name:a,params:e,adapt:n}),this},u.addBool=function(a,n){return this.add(a,function(t){e(t,n||a,!0)})},u.addMinMax=function(a,n,t,r,i,o){return this.add(a,[i||"min",o||"max"],function(a){var i=a.params.min,o=a.params.max;i&&o?e(a,r,[i,o]):i?e(a,n,i):o&&e(a,t,o)})},u.addSingleVal=function(a,n,t){return this.add(a,[n||"val"],function(r){e(r,t||a,r.params[n])})},p.addMethod("__dummy__",function(a,e,n){return!0}),p.addMethod("regex",function(a,e,n){var t;return this.optional(e)?!0:(t=new RegExp(n).exec(a),t&&0===t.index&&t[0].length===a.length)}),p.addMethod("nonalphamin",function(a,e,n){var t;return n&&(t=a.match(/\W/g),t=t&&t.length>=n),t}),p.methods.extension?(u.addSingleVal("accept","mimtype"),u.addSingleVal("extension","extension")):u.addSingleVal("extension","extension","accept"),u.addSingleVal("regex","pattern"),u.addBool("creditcard").addBool("date").addBool("digits").addBool("email").addBool("number").addBool("url"),u.addMinMax("length","minlength","maxlength","rangelength").addMinMax("range","min","max","range"),u.addMinMax("minlength","minlength").addMinMax("maxlength","minlength","maxlength"),u.add("equalto",["other"],function(n){var o=r(n.element.name),d=n.params.other,s=i(d,o),l=a(n.form).find(":input").filter("[name='"+t(s)+"']")[0];e(n,"equalTo",l)}),u.add("required",function(a){("INPUT"!==a.element.tagName.toUpperCase()||"CHECKBOX"!==a.element.type.toUpperCase())&&e(a,"required",!0)}),u.add("remote",["url","type","additionalfields"],function(o){var d={url:o.params.url,type:o.params.type||"GET",data:{}},s=r(o.element.name);a.each(n(o.params.additionalfields||o.element.name),function(e,n){var r=i(n,s);d.data[r]=function(){var e=a(o.form).find(":input").filter("[name='"+t(r)+"']");return e.is(":checkbox")?e.filter(":checked").val()||e.filter(":hidden").val()||"":e.is(":radio")?e.filter(":checked").val()||"":e.val()}}),e(o,"remote",d)}),u.add("password",["min","nonalphamin","regex"],function(a){a.params.min&&e(a,"minlength",a.params.min),a.params.nonalphamin&&e(a,"nonalphamin",a.params.nonalphamin),a.params.regex&&e(a,"regex",a.params.regex)}),a(function(){p.unobtrusive.parse(document)})}(jQuery);
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/wwwroot/lib/jquery-validation/.bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "jquery-validation",
3 | "homepage": "http://jqueryvalidation.org/",
4 | "repository": {
5 | "type": "git",
6 | "url": "git://github.com/jzaefferer/jquery-validation.git"
7 | },
8 | "authors": [
9 | "Jörn Zaefferer "
10 | ],
11 | "description": "Form validation made easy",
12 | "main": "dist/jquery.validate.js",
13 | "keywords": [
14 | "forms",
15 | "validation",
16 | "validate"
17 | ],
18 | "license": "MIT",
19 | "ignore": [
20 | "**/.*",
21 | "node_modules",
22 | "bower_components",
23 | "test",
24 | "demo",
25 | "lib"
26 | ],
27 | "dependencies": {
28 | "jquery": ">= 1.7.2"
29 | },
30 | "version": "1.14.0",
31 | "_release": "1.14.0",
32 | "_resolution": {
33 | "type": "version",
34 | "tag": "1.14.0",
35 | "commit": "c1343fb9823392aa9acbe1c3ffd337b8c92fed48"
36 | },
37 | "_source": "git://github.com/jzaefferer/jquery-validation.git",
38 | "_target": ">=1.8",
39 | "_originalSource": "jquery-validation"
40 | }
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/wwwroot/lib/jquery-validation/LICENSE.md:
--------------------------------------------------------------------------------
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.
23 |
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/wwwroot/lib/jquery-validation/dist/additional-methods.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery Validation Plugin - v1.14.0 - 6/30/2015
2 | * http://jqueryvalidation.org/
3 | * Copyright (c) 2015 Jörn Zaefferer; Licensed MIT */
4 | !function(a){"function"==typeof define&&define.amd?define(["jquery","./jquery.validate.min"],a):a(jQuery)}(function(a){!function(){function b(a){return a.replace(/<.[^<>]*?>/g," ").replace(/ | /gi," ").replace(/[.(),;:!?%#$'\"_+=\/\-“”’]*/g,"")}a.validator.addMethod("maxWords",function(a,c,d){return this.optional(c)||b(a).match(/\b\w+\b/g).length<=d},a.validator.format("Please enter {0} words or less.")),a.validator.addMethod("minWords",function(a,c,d){return this.optional(c)||b(a).match(/\b\w+\b/g).length>=d},a.validator.format("Please enter at least {0} words.")),a.validator.addMethod("rangeWords",function(a,c,d){var e=b(a),f=/\b\w+\b/g;return this.optional(c)||e.match(f).length>=d[0]&&e.match(f).length<=d[1]},a.validator.format("Please enter between {0} and {1} words."))}(),a.validator.addMethod("accept",function(b,c,d){var e,f,g="string"==typeof d?d.replace(/\s/g,"").replace(/,/g,"|"):"image/*",h=this.optional(c);if(h)return h;if("file"===a(c).attr("type")&&(g=g.replace(/\*/g,".*"),c.files&&c.files.length))for(e=0;ec;c++)d=h-c,e=f.substring(c,c+1),g+=d*e;return g%11===0},"Please specify a valid bank account number"),a.validator.addMethod("bankorgiroaccountNL",function(b,c){return this.optional(c)||a.validator.methods.bankaccountNL.call(this,b,c)||a.validator.methods.giroaccountNL.call(this,b,c)},"Please specify a valid bank or giro account number"),a.validator.addMethod("bic",function(a,b){return this.optional(b)||/^([A-Z]{6}[A-Z2-9][A-NP-Z1-2])(X{3}|[A-WY-Z0-9][A-Z0-9]{2})?$/.test(a)},"Please specify a valid BIC code"),a.validator.addMethod("cifES",function(a){"use strict";var b,c,d,e,f,g,h=[];if(a=a.toUpperCase(),!a.match("((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)"))return!1;for(d=0;9>d;d++)h[d]=parseInt(a.charAt(d),10);for(c=h[2]+h[4]+h[6],e=1;8>e;e+=2)f=(2*h[e]).toString(),g=f.charAt(1),c+=parseInt(f.charAt(0),10)+(""===g?0:parseInt(g,10));return/^[ABCDEFGHJNPQRSUVW]{1}/.test(a)?(c+="",b=10-parseInt(c.charAt(c.length-1),10),a+=b,h[8].toString()===String.fromCharCode(64+b)||h[8].toString()===a.charAt(a.length-1)):!1},"Please specify a valid CIF number."),a.validator.addMethod("cpfBR",function(a){if(a=a.replace(/([~!@#$%^&*()_+=`{}\[\]\-|\\:;'<>,.\/? ])+/g,""),11!==a.length)return!1;var b,c,d,e,f=0;if(b=parseInt(a.substring(9,10),10),c=parseInt(a.substring(10,11),10),d=function(a,b){var c=10*a%11;return(10===c||11===c)&&(c=0),c===b},""===a||"00000000000"===a||"11111111111"===a||"22222222222"===a||"33333333333"===a||"44444444444"===a||"55555555555"===a||"66666666666"===a||"77777777777"===a||"88888888888"===a||"99999999999"===a)return!1;for(e=1;9>=e;e++)f+=parseInt(a.substring(e-1,e),10)*(11-e);if(d(f,b)){for(f=0,e=1;10>=e;e++)f+=parseInt(a.substring(e-1,e),10)*(12-e);return d(f,c)}return!1},"Please specify a valid CPF number"),a.validator.addMethod("creditcardtypes",function(a,b,c){if(/[^0-9\-]+/.test(a))return!1;a=a.replace(/\D/g,"");var d=0;return c.mastercard&&(d|=1),c.visa&&(d|=2),c.amex&&(d|=4),c.dinersclub&&(d|=8),c.enroute&&(d|=16),c.discover&&(d|=32),c.jcb&&(d|=64),c.unknown&&(d|=128),c.all&&(d=255),1&d&&/^(5[12345])/.test(a)?16===a.length:2&d&&/^(4)/.test(a)?16===a.length:4&d&&/^(3[47])/.test(a)?15===a.length:8&d&&/^(3(0[012345]|[68]))/.test(a)?14===a.length:16&d&&/^(2(014|149))/.test(a)?15===a.length:32&d&&/^(6011)/.test(a)?16===a.length:64&d&&/^(3)/.test(a)?16===a.length:64&d&&/^(2131|1800)/.test(a)?15===a.length:128&d?!0:!1},"Please enter a valid credit card number."),a.validator.addMethod("currency",function(a,b,c){var d,e="string"==typeof c,f=e?c:c[0],g=e?!0:c[1];return f=f.replace(/,/g,""),f=g?f+"]":f+"]?",d="^["+f+"([1-9]{1}[0-9]{0,2}(\\,[0-9]{3})*(\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\.[0-9]{0,2})?|0(\\.[0-9]{0,2})?|(\\.[0-9]{1,2})?)$",d=new RegExp(d),this.optional(b)||d.test(a)},"Please specify a valid currency"),a.validator.addMethod("dateFA",function(a,b){return this.optional(b)||/^[1-4]\d{3}\/((0?[1-6]\/((3[0-1])|([1-2][0-9])|(0?[1-9])))|((1[0-2]|(0?[7-9]))\/(30|([1-2][0-9])|(0?[1-9]))))$/.test(a)},a.validator.messages.date),a.validator.addMethod("dateITA",function(a,b){var c,d,e,f,g,h=!1,i=/^\d{1,2}\/\d{1,2}\/\d{4}$/;return i.test(a)?(c=a.split("/"),d=parseInt(c[0],10),e=parseInt(c[1],10),f=parseInt(c[2],10),g=new Date(Date.UTC(f,e-1,d,12,0,0,0)),h=g.getUTCFullYear()===f&&g.getUTCMonth()===e-1&&g.getUTCDate()===d?!0:!1):h=!1,this.optional(b)||h},a.validator.messages.date),a.validator.addMethod("dateNL",function(a,b){return this.optional(b)||/^(0?[1-9]|[12]\d|3[01])[\.\/\-](0?[1-9]|1[012])[\.\/\-]([12]\d)?(\d\d)$/.test(a)},a.validator.messages.date),a.validator.addMethod("extension",function(a,b,c){return c="string"==typeof c?c.replace(/,/g,"|"):"png|jpe?g|gif",this.optional(b)||a.match(new RegExp("\\.("+c+")$","i"))},a.validator.format("Please enter a value with a valid extension.")),a.validator.addMethod("giroaccountNL",function(a,b){return this.optional(b)||/^[0-9]{1,7}$/.test(a)},"Please specify a valid giro account number"),a.validator.addMethod("iban",function(a,b){if(this.optional(b))return!0;var c,d,e,f,g,h,i,j,k,l=a.replace(/ /g,"").toUpperCase(),m="",n=!0,o="",p="";if(c=l.substring(0,2),h={AL:"\\d{8}[\\dA-Z]{16}",AD:"\\d{8}[\\dA-Z]{12}",AT:"\\d{16}",AZ:"[\\dA-Z]{4}\\d{20}",BE:"\\d{12}",BH:"[A-Z]{4}[\\dA-Z]{14}",BA:"\\d{16}",BR:"\\d{23}[A-Z][\\dA-Z]",BG:"[A-Z]{4}\\d{6}[\\dA-Z]{8}",CR:"\\d{17}",HR:"\\d{17}",CY:"\\d{8}[\\dA-Z]{16}",CZ:"\\d{20}",DK:"\\d{14}",DO:"[A-Z]{4}\\d{20}",EE:"\\d{16}",FO:"\\d{14}",FI:"\\d{14}",FR:"\\d{10}[\\dA-Z]{11}\\d{2}",GE:"[\\dA-Z]{2}\\d{16}",DE:"\\d{18}",GI:"[A-Z]{4}[\\dA-Z]{15}",GR:"\\d{7}[\\dA-Z]{16}",GL:"\\d{14}",GT:"[\\dA-Z]{4}[\\dA-Z]{20}",HU:"\\d{24}",IS:"\\d{22}",IE:"[\\dA-Z]{4}\\d{14}",IL:"\\d{19}",IT:"[A-Z]\\d{10}[\\dA-Z]{12}",KZ:"\\d{3}[\\dA-Z]{13}",KW:"[A-Z]{4}[\\dA-Z]{22}",LV:"[A-Z]{4}[\\dA-Z]{13}",LB:"\\d{4}[\\dA-Z]{20}",LI:"\\d{5}[\\dA-Z]{12}",LT:"\\d{16}",LU:"\\d{3}[\\dA-Z]{13}",MK:"\\d{3}[\\dA-Z]{10}\\d{2}",MT:"[A-Z]{4}\\d{5}[\\dA-Z]{18}",MR:"\\d{23}",MU:"[A-Z]{4}\\d{19}[A-Z]{3}",MC:"\\d{10}[\\dA-Z]{11}\\d{2}",MD:"[\\dA-Z]{2}\\d{18}",ME:"\\d{18}",NL:"[A-Z]{4}\\d{10}",NO:"\\d{11}",PK:"[\\dA-Z]{4}\\d{16}",PS:"[\\dA-Z]{4}\\d{21}",PL:"\\d{24}",PT:"\\d{21}",RO:"[A-Z]{4}[\\dA-Z]{16}",SM:"[A-Z]\\d{10}[\\dA-Z]{12}",SA:"\\d{2}[\\dA-Z]{18}",RS:"\\d{18}",SK:"\\d{20}",SI:"\\d{15}",ES:"\\d{20}",SE:"\\d{20}",CH:"\\d{5}[\\dA-Z]{12}",TN:"\\d{20}",TR:"\\d{5}[\\dA-Z]{17}",AE:"\\d{3}\\d{16}",GB:"[A-Z]{4}\\d{14}",VG:"[\\dA-Z]{4}\\d{16}"},g=h[c],"undefined"!=typeof g&&(i=new RegExp("^[A-Z]{2}\\d{2}"+g+"$",""),!i.test(l)))return!1;for(d=l.substring(4,l.length)+l.substring(0,4),j=0;j9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?|0)7(?:[1345789]\d{2}|624)\s?\d{3}\s?\d{3})$/)},"Please specify a valid mobile number"),a.validator.addMethod("nieES",function(a){"use strict";return a=a.toUpperCase(),a.match("((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)")?/^[T]{1}/.test(a)?a[8]===/^[T]{1}[A-Z0-9]{8}$/.test(a):/^[XYZ]{1}/.test(a)?a[8]==="TRWAGMYFPDXBNJZSQVHLCKE".charAt(a.replace("X","0").replace("Y","1").replace("Z","2").substring(0,8)%23):!1:!1},"Please specify a valid NIE number."),a.validator.addMethod("nifES",function(a){"use strict";return a=a.toUpperCase(),a.match("((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)")?/^[0-9]{8}[A-Z]{1}$/.test(a)?"TRWAGMYFPDXBNJZSQVHLCKE".charAt(a.substring(8,0)%23)===a.charAt(8):/^[KLM]{1}/.test(a)?a[8]===String.fromCharCode(64):!1:!1},"Please specify a valid NIF number."),jQuery.validator.addMethod("notEqualTo",function(b,c,d){return this.optional(c)||!a.validator.methods.equalTo.call(this,b,c,d)},"Please enter a different value, values must not be the same."),a.validator.addMethod("nowhitespace",function(a,b){return this.optional(b)||/^\S+$/i.test(a)},"No white space please"),a.validator.addMethod("pattern",function(a,b,c){return this.optional(b)?!0:("string"==typeof c&&(c=new RegExp("^(?:"+c+")$")),c.test(a))},"Invalid format."),a.validator.addMethod("phoneNL",function(a,b){return this.optional(b)||/^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)[1-9]((\s|\s?\-\s?)?[0-9]){8}$/.test(a)},"Please specify a valid phone number."),a.validator.addMethod("phoneUK",function(a,b){return a=a.replace(/\(|\)|\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?)|(?:\(?0))(?:\d{2}\)?\s?\d{4}\s?\d{4}|\d{3}\)?\s?\d{3}\s?\d{3,4}|\d{4}\)?\s?(?:\d{5}|\d{3}\s?\d{3})|\d{5}\)?\s?\d{4,5})$/)},"Please specify a valid phone number"),a.validator.addMethod("phoneUS",function(a,b){return a=a.replace(/\s+/g,""),this.optional(b)||a.length>9&&a.match(/^(\+?1-?)?(\([2-9]([02-9]\d|1[02-9])\)|[2-9]([02-9]\d|1[02-9]))-?[2-9]([02-9]\d|1[02-9])-?\d{4}$/)},"Please specify a valid phone number"),a.validator.addMethod("phonesUK",function(a,b){return a=a.replace(/\(|\)|\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?|0)(?:1\d{8,9}|[23]\d{9}|7(?:[1345789]\d{8}|624\d{6})))$/)},"Please specify a valid uk phone number"),a.validator.addMethod("postalCodeCA",function(a,b){return this.optional(b)||/^[ABCEGHJKLMNPRSTVXY]\d[A-Z] \d[A-Z]\d$/.test(a)},"Please specify a valid postal code"),a.validator.addMethod("postalcodeBR",function(a,b){return this.optional(b)||/^\d{2}.\d{3}-\d{3}?$|^\d{5}-?\d{3}?$/.test(a)},"Informe um CEP válido."),a.validator.addMethod("postalcodeIT",function(a,b){return this.optional(b)||/^\d{5}$/.test(a)},"Please specify a valid postal code"),a.validator.addMethod("postalcodeNL",function(a,b){return this.optional(b)||/^[1-9][0-9]{3}\s?[a-zA-Z]{2}$/.test(a)},"Please specify a valid postal code"),a.validator.addMethod("postcodeUK",function(a,b){return this.optional(b)||/^((([A-PR-UWYZ][0-9])|([A-PR-UWYZ][0-9][0-9])|([A-PR-UWYZ][A-HK-Y][0-9])|([A-PR-UWYZ][A-HK-Y][0-9][0-9])|([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY]))\s?([0-9][ABD-HJLNP-UW-Z]{2})|(GIR)\s?(0AA))$/i.test(a)},"Please specify a valid UK postcode"),a.validator.addMethod("require_from_group",function(b,c,d){var e=a(d[1],c.form),f=e.eq(0),g=f.data("valid_req_grp")?f.data("valid_req_grp"):a.extend({},this),h=e.filter(function(){return g.elementValue(this)}).length>=d[0];return f.data("valid_req_grp",g),a(c).data("being_validated")||(e.data("being_validated",!0),e.each(function(){g.element(this)}),e.data("being_validated",!1)),h},a.validator.format("Please fill at least {0} of these fields.")),a.validator.addMethod("skip_or_fill_minimum",function(b,c,d){var e=a(d[1],c.form),f=e.eq(0),g=f.data("valid_skip")?f.data("valid_skip"):a.extend({},this),h=e.filter(function(){return g.elementValue(this)}).length,i=0===h||h>=d[0];return f.data("valid_skip",g),a(c).data("being_validated")||(e.data("being_validated",!0),e.each(function(){g.element(this)}),e.data("being_validated",!1)),i},a.validator.format("Please either skip these fields or fill at least {0} of them.")),a.validator.addMethod("stateUS",function(a,b,c){var d,e="undefined"==typeof c,f=e||"undefined"==typeof c.caseSensitive?!1:c.caseSensitive,g=e||"undefined"==typeof c.includeTerritories?!1:c.includeTerritories,h=e||"undefined"==typeof c.includeMilitary?!1:c.includeMilitary;return d=g||h?g&&h?"^(A[AEKLPRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$":g?"^(A[KLRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$":"^(A[AEKLPRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$":"^(A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$",d=f?new RegExp(d):new RegExp(d,"i"),this.optional(b)||d.test(a)},"Please specify a valid state"),a.validator.addMethod("strippedminlength",function(b,c,d){return a(b).text().length>=d},a.validator.format("Please enter at least {0} characters")),a.validator.addMethod("time",function(a,b){return this.optional(b)||/^([01]\d|2[0-3]|[0-9])(:[0-5]\d){1,2}$/.test(a)},"Please enter a valid time, between 00:00 and 23:59"),a.validator.addMethod("time12h",function(a,b){return this.optional(b)||/^((0?[1-9]|1[012])(:[0-5]\d){1,2}(\ ?[AP]M))$/i.test(a)},"Please enter a valid time in 12-hour am/pm format"),a.validator.addMethod("url2",function(a,b){return this.optional(b)||/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(a)},a.validator.messages.url),a.validator.addMethod("vinUS",function(a){if(17!==a.length)return!1;var b,c,d,e,f,g,h=["A","B","C","D","E","F","G","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y","Z"],i=[1,2,3,4,5,6,7,8,1,2,3,4,5,7,9,2,3,4,5,6,7,8,9],j=[8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2],k=0;for(b=0;17>b;b++){if(e=j[b],d=a.slice(b,b+1),8===b&&(g=d),isNaN(d)){for(c=0;c ").attr("name",c.submitButton.name).val(a(c.submitButton).val()).appendTo(c.currentForm)),e=c.settings.submitHandler.call(c,c.currentForm,b),c.submitButton&&d.remove(),void 0!==e?e:!1):!0}return c.settings.debug&&b.preventDefault(),c.cancelSubmit?(c.cancelSubmit=!1,d()):c.form()?c.pendingRequest?(c.formSubmitted=!0,!1):d():(c.focusInvalid(),!1)})),c)},valid:function(){var b,c,d;return a(this[0]).is("form")?b=this.validate().form():(d=[],b=!0,c=a(this[0].form).validate(),this.each(function(){b=c.element(this)&&b,d=d.concat(c.errorList)}),c.errorList=d),b},rules:function(b,c){var d,e,f,g,h,i,j=this[0];if(b)switch(d=a.data(j.form,"validator").settings,e=d.rules,f=a.validator.staticRules(j),b){case"add":a.extend(f,a.validator.normalizeRule(c)),delete f.messages,e[j.name]=f,c.messages&&(d.messages[j.name]=a.extend(d.messages[j.name],c.messages));break;case"remove":return c?(i={},a.each(c.split(/\s/),function(b,c){i[c]=f[c],delete f[c],"required"===c&&a(j).removeAttr("aria-required")}),i):(delete e[j.name],f)}return g=a.validator.normalizeRules(a.extend({},a.validator.classRules(j),a.validator.attributeRules(j),a.validator.dataRules(j),a.validator.staticRules(j)),j),g.required&&(h=g.required,delete g.required,g=a.extend({required:h},g),a(j).attr("aria-required","true")),g.remote&&(h=g.remote,delete g.remote,g=a.extend(g,{remote:h})),g}}),a.extend(a.expr[":"],{blank:function(b){return!a.trim(""+a(b).val())},filled:function(b){return!!a.trim(""+a(b).val())},unchecked:function(b){return!a(b).prop("checked")}}),a.validator=function(b,c){this.settings=a.extend(!0,{},a.validator.defaults,b),this.currentForm=c,this.init()},a.validator.format=function(b,c){return 1===arguments.length?function(){var c=a.makeArray(arguments);return c.unshift(b),a.validator.format.apply(this,c)}:(arguments.length>2&&c.constructor!==Array&&(c=a.makeArray(arguments).slice(1)),c.constructor!==Array&&(c=[c]),a.each(c,function(a,c){b=b.replace(new RegExp("\\{"+a+"\\}","g"),function(){return c})}),b)},a.extend(a.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",validClass:"valid",errorElement:"label",focusCleanup:!1,focusInvalid:!0,errorContainer:a([]),errorLabelContainer:a([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(a){this.lastActive=a,this.settings.focusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(a)))},onfocusout:function(a){this.checkable(a)||!(a.name in this.submitted)&&this.optional(a)||this.element(a)},onkeyup:function(b,c){var d=[16,17,18,20,35,36,37,38,39,40,45,144,225];9===c.which&&""===this.elementValue(b)||-1!==a.inArray(c.keyCode,d)||(b.name in this.submitted||b===this.lastElement)&&this.element(b)},onclick:function(a){a.name in this.submitted?this.element(a):a.parentNode.name in this.submitted&&this.element(a.parentNode)},highlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).addClass(c).removeClass(d):a(b).addClass(c).removeClass(d)},unhighlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).removeClass(c).addClass(d):a(b).removeClass(c).addClass(d)}},setDefaults:function(b){a.extend(a.validator.defaults,b)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date ( ISO ).",number:"Please enter a valid number.",digits:"Please enter only digits.",creditcard:"Please enter a valid credit card number.",equalTo:"Please enter the same value again.",maxlength:a.validator.format("Please enter no more than {0} characters."),minlength:a.validator.format("Please enter at least {0} characters."),rangelength:a.validator.format("Please enter a value between {0} and {1} characters long."),range:a.validator.format("Please enter a value between {0} and {1}."),max:a.validator.format("Please enter a value less than or equal to {0}."),min:a.validator.format("Please enter a value greater than or equal to {0}.")},autoCreateRanges:!1,prototype:{init:function(){function b(b){var c=a.data(this.form,"validator"),d="on"+b.type.replace(/^validate/,""),e=c.settings;e[d]&&!a(this).is(e.ignore)&&e[d].call(c,this,b)}this.labelContainer=a(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||a(this.currentForm),this.containers=a(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var c,d=this.groups={};a.each(this.settings.groups,function(b,c){"string"==typeof c&&(c=c.split(/\s/)),a.each(c,function(a,c){d[c]=b})}),c=this.settings.rules,a.each(c,function(b,d){c[b]=a.validator.normalizeRule(d)}),a(this.currentForm).on("focusin.validate focusout.validate keyup.validate",":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], [type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox']",b).on("click.validate","select, option, [type='radio'], [type='checkbox']",b),this.settings.invalidHandler&&a(this.currentForm).on("invalid-form.validate",this.settings.invalidHandler),a(this.currentForm).find("[required], [data-rule-required], .required").attr("aria-required","true")},form:function(){return this.checkForm(),a.extend(this.submitted,this.errorMap),this.invalid=a.extend({},this.errorMap),this.valid()||a(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);return this.valid()},element:function(b){var c=this.clean(b),d=this.validationTargetFor(c),e=!0;return this.lastElement=d,void 0===d?delete this.invalid[c.name]:(this.prepareElement(d),this.currentElements=a(d),e=this.check(d)!==!1,e?delete this.invalid[d.name]:this.invalid[d.name]=!0),a(b).attr("aria-invalid",!e),this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),e},showErrors:function(b){if(b){a.extend(this.errorMap,b),this.errorList=[];for(var c in b)this.errorList.push({message:b[c],element:this.findByName(c)[0]});this.successList=a.grep(this.successList,function(a){return!(a.name in b)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){a.fn.resetForm&&a(this.currentForm).resetForm(),this.submitted={},this.lastElement=null,this.prepareForm(),this.hideErrors();var b,c=this.elements().removeData("previousValue").removeAttr("aria-invalid");if(this.settings.unhighlight)for(b=0;c[b];b++)this.settings.unhighlight.call(this,c[b],this.settings.errorClass,"");else c.removeClass(this.settings.errorClass)},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b,c=0;for(b in a)c++;return c},hideErrors:function(){this.hideThese(this.toHide)},hideThese:function(a){a.not(this.containers).text(""),this.addWrapper(a).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{a(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(b){}},findLastActive:function(){var b=this.lastActive;return b&&1===a.grep(this.errorList,function(a){return a.element.name===b.name}).length&&b},elements:function(){var b=this,c={};return a(this.currentForm).find("input, select, textarea").not(":submit, :reset, :image, :disabled").not(this.settings.ignore).filter(function(){return!this.name&&b.settings.debug&&window.console&&console.error("%o has no name assigned",this),this.name in c||!b.objectLength(a(this).rules())?!1:(c[this.name]=!0,!0)})},clean:function(b){return a(b)[0]},errors:function(){var b=this.settings.errorClass.split(" ").join(".");return a(this.settings.errorElement+"."+b,this.errorContext)},reset:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=a([]),this.toHide=a([]),this.currentElements=a([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(a){this.reset(),this.toHide=this.errorsFor(a)},elementValue:function(b){var c,d=a(b),e=b.type;return"radio"===e||"checkbox"===e?this.findByName(b.name).filter(":checked").val():"number"===e&&"undefined"!=typeof b.validity?b.validity.badInput?!1:d.val():(c=d.val(),"string"==typeof c?c.replace(/\r/g,""):c)},check:function(b){b=this.validationTargetFor(this.clean(b));var c,d,e,f=a(b).rules(),g=a.map(f,function(a,b){return b}).length,h=!1,i=this.elementValue(b);for(d in f){e={method:d,parameters:f[d]};try{if(c=a.validator.methods[d].call(this,i,b,e.parameters),"dependency-mismatch"===c&&1===g){h=!0;continue}if(h=!1,"pending"===c)return void(this.toHide=this.toHide.not(this.errorsFor(b)));if(!c)return this.formatAndAdd(b,e),!1}catch(j){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+b.id+", check the '"+e.method+"' method.",j),j instanceof TypeError&&(j.message+=". Exception occurred when checking element "+b.id+", check the '"+e.method+"' method."),j}}if(!h)return this.objectLength(f)&&this.successList.push(b),!0},customDataMessage:function(b,c){return a(b).data("msg"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase())||a(b).data("msg")},customMessage:function(a,b){var c=this.settings.messages[a];return c&&(c.constructor===String?c:c[b])},findDefined:function(){for(var a=0;aWarning: No message defined for "+b.name+"")},formatAndAdd:function(b,c){var d=this.defaultMessage(b,c.method),e=/\$?\{(\d+)\}/g;"function"==typeof d?d=d.call(this,c.parameters,b):e.test(d)&&(d=a.validator.format(d.replace(e,"{$1}"),c.parameters)),this.errorList.push({message:d,element:b,method:c.method}),this.errorMap[b.name]=d,this.submitted[b.name]=d},addWrapper:function(a){return this.settings.wrapper&&(a=a.add(a.parent(this.settings.wrapper))),a},defaultShowErrors:function(){var a,b,c;for(a=0;this.errorList[a];a++)c=this.errorList[a],this.settings.highlight&&this.settings.highlight.call(this,c.element,this.settings.errorClass,this.settings.validClass),this.showLabel(c.element,c.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a=0,b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return a(this.errorList).map(function(){return this.element})},showLabel:function(b,c){var d,e,f,g=this.errorsFor(b),h=this.idOrName(b),i=a(b).attr("aria-describedby");g.length?(g.removeClass(this.settings.validClass).addClass(this.settings.errorClass),g.html(c)):(g=a("<"+this.settings.errorElement+">").attr("id",h+"-error").addClass(this.settings.errorClass).html(c||""),d=g,this.settings.wrapper&&(d=g.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(d):this.settings.errorPlacement?this.settings.errorPlacement(d,a(b)):d.insertAfter(b),g.is("label")?g.attr("for",h):0===g.parents("label[for='"+h+"']").length&&(f=g.attr("id").replace(/(:|\.|\[|\]|\$)/g,"\\$1"),i?i.match(new RegExp("\\b"+f+"\\b"))||(i+=" "+f):i=f,a(b).attr("aria-describedby",i),e=this.groups[b.name],e&&a.each(this.groups,function(b,c){c===e&&a("[name='"+b+"']",this.currentForm).attr("aria-describedby",g.attr("id"))}))),!c&&this.settings.success&&(g.text(""),"string"==typeof this.settings.success?g.addClass(this.settings.success):this.settings.success(g,b)),this.toShow=this.toShow.add(g)},errorsFor:function(b){var c=this.idOrName(b),d=a(b).attr("aria-describedby"),e="label[for='"+c+"'], label[for='"+c+"'] *";return d&&(e=e+", #"+d.replace(/\s+/g,", #")),this.errors().filter(e)},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(b){return this.checkable(b)&&(b=this.findByName(b.name)),a(b).not(this.settings.ignore)[0]},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(b){return a(this.currentForm).find("[name='"+b+"']")},getLength:function(b,c){switch(c.nodeName.toLowerCase()){case"select":return a("option:selected",c).length;case"input":if(this.checkable(c))return this.findByName(c.name).filter(":checked").length}return b.length},depend:function(a,b){return this.dependTypes[typeof a]?this.dependTypes[typeof a](a,b):!0},dependTypes:{"boolean":function(a){return a},string:function(b,c){return!!a(b,c.form).length},"function":function(a,b){return a(b)}},optional:function(b){var c=this.elementValue(b);return!a.validator.methods.required.call(this,c,b)&&"dependency-mismatch"},startRequest:function(a){this.pending[a.name]||(this.pendingRequest++,this.pending[a.name]=!0)},stopRequest:function(b,c){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[b.name],c&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(a(this.currentForm).submit(),this.formSubmitted=!1):!c&&0===this.pendingRequest&&this.formSubmitted&&(a(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(b){return a.data(b,"previousValue")||a.data(b,"previousValue",{old:null,valid:!0,message:this.defaultMessage(b,"remote")})},destroy:function(){this.resetForm(),a(this.currentForm).off(".validate").removeData("validator")}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(b,c){b.constructor===String?this.classRuleSettings[b]=c:a.extend(this.classRuleSettings,b)},classRules:function(b){var c={},d=a(b).attr("class");return d&&a.each(d.split(" "),function(){this in a.validator.classRuleSettings&&a.extend(c,a.validator.classRuleSettings[this])}),c},normalizeAttributeRule:function(a,b,c,d){/min|max/.test(c)&&(null===b||/number|range|text/.test(b))&&(d=Number(d),isNaN(d)&&(d=void 0)),d||0===d?a[c]=d:b===c&&"range"!==b&&(a[c]=!0)},attributeRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)"required"===c?(d=b.getAttribute(c),""===d&&(d=!0),d=!!d):d=f.attr(c),this.normalizeAttributeRule(e,g,c,d);return e.maxlength&&/-1|2147483647|524288/.test(e.maxlength)&&delete e.maxlength,e},dataRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)d=f.data("rule"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase()),this.normalizeAttributeRule(e,g,c,d);return e},staticRules:function(b){var c={},d=a.data(b.form,"validator");return d.settings.rules&&(c=a.validator.normalizeRule(d.settings.rules[b.name])||{}),c},normalizeRules:function(b,c){return a.each(b,function(d,e){if(e===!1)return void delete b[d];if(e.param||e.depends){var f=!0;switch(typeof e.depends){case"string":f=!!a(e.depends,c.form).length;break;case"function":f=e.depends.call(c,c)}f?b[d]=void 0!==e.param?e.param:!0:delete b[d]}}),a.each(b,function(d,e){b[d]=a.isFunction(e)?e(c):e}),a.each(["minlength","maxlength"],function(){b[this]&&(b[this]=Number(b[this]))}),a.each(["rangelength","range"],function(){var c;b[this]&&(a.isArray(b[this])?b[this]=[Number(b[this][0]),Number(b[this][1])]:"string"==typeof b[this]&&(c=b[this].replace(/[\[\]]/g,"").split(/[\s,]+/),b[this]=[Number(c[0]),Number(c[1])]))}),a.validator.autoCreateRanges&&(null!=b.min&&null!=b.max&&(b.range=[b.min,b.max],delete b.min,delete b.max),null!=b.minlength&&null!=b.maxlength&&(b.rangelength=[b.minlength,b.maxlength],delete b.minlength,delete b.maxlength)),b},normalizeRule:function(b){if("string"==typeof b){var c={};a.each(b.split(/\s/),function(){c[this]=!0}),b=c}return b},addMethod:function(b,c,d){a.validator.methods[b]=c,a.validator.messages[b]=void 0!==d?d:a.validator.messages[b],c.length<3&&a.validator.addClassRules(b,a.validator.normalizeRule(b))},methods:{required:function(b,c,d){if(!this.depend(d,c))return"dependency-mismatch";if("select"===c.nodeName.toLowerCase()){var e=a(c).val();return e&&e.length>0}return this.checkable(c)?this.getLength(b,c)>0:b.length>0},email:function(a,b){return this.optional(b)||/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(a)},url:function(a,b){return this.optional(b)||/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/i.test(a)},date:function(a,b){return this.optional(b)||!/Invalid|NaN/.test(new Date(a).toString())},dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(a)},number:function(a,b){return this.optional(b)||/^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d+$/.test(a)},creditcard:function(a,b){if(this.optional(b))return"dependency-mismatch";if(/[^0-9 \-]+/.test(a))return!1;var c,d,e=0,f=0,g=!1;if(a=a.replace(/\D/g,""),a.length<13||a.length>19)return!1;for(c=a.length-1;c>=0;c--)d=a.charAt(c),f=parseInt(d,10),g&&(f*=2)>9&&(f-=9),e+=f,g=!g;return e%10===0},minlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d},maxlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||d>=e},rangelength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d[0]&&e<=d[1]},min:function(a,b,c){return this.optional(b)||a>=c},max:function(a,b,c){return this.optional(b)||c>=a},range:function(a,b,c){return this.optional(b)||a>=c[0]&&a<=c[1]},equalTo:function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.off(".validate-equalTo").on("blur.validate-equalTo",function(){a(c).valid()}),b===e.val()},remote:function(b,c,d){if(this.optional(c))return"dependency-mismatch";var e,f,g=this.previousValue(c);return this.settings.messages[c.name]||(this.settings.messages[c.name]={}),g.originalMessage=this.settings.messages[c.name].remote,this.settings.messages[c.name].remote=g.message,d="string"==typeof d&&{url:d}||d,g.old===b?g.valid:(g.old=b,e=this,this.startRequest(c),f={},f[c.name]=b,a.ajax(a.extend(!0,{mode:"abort",port:"validate"+c.name,dataType:"json",data:f,context:e.currentForm,success:function(d){var f,h,i,j=d===!0||"true"===d;e.settings.messages[c.name].remote=g.originalMessage,j?(i=e.formSubmitted,e.prepareElement(c),e.formSubmitted=i,e.successList.push(c),delete e.invalid[c.name],e.showErrors()):(f={},h=d||e.defaultMessage(c,"remote"),f[c.name]=g.message=a.isFunction(h)?h(b):h,e.invalid[c.name]=!0,e.showErrors(f)),g.valid=j,e.stopRequest(c,j)}},d)),"pending")}}});var b,c={};a.ajaxPrefilter?a.ajaxPrefilter(function(a,b,d){var e=a.port;"abort"===a.mode&&(c[e]&&c[e].abort(),c[e]=d)}):(b=a.ajax,a.ajax=function(d){var e=("mode"in d?d:a.ajaxSettings).mode,f=("port"in d?d:a.ajaxSettings).port;return"abort"===e?(c[f]&&c[f].abort(),c[f]=b.apply(this,arguments),c[f]):b.apply(this,arguments)})});
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/wwwroot/lib/jquery/.bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "jquery",
3 | "main": "dist/jquery.js",
4 | "license": "MIT",
5 | "ignore": [
6 | "package.json"
7 | ],
8 | "keywords": [
9 | "jquery",
10 | "javascript",
11 | "browser",
12 | "library"
13 | ],
14 | "homepage": "https://github.com/jquery/jquery-dist",
15 | "version": "2.2.0",
16 | "_release": "2.2.0",
17 | "_resolution": {
18 | "type": "version",
19 | "tag": "2.2.0",
20 | "commit": "6fc01e29bdad0964f62ef56d01297039cdcadbe5"
21 | },
22 | "_source": "git://github.com/jquery/jquery-dist.git",
23 | "_target": "2.2.0",
24 | "_originalSource": "jquery"
25 | }
--------------------------------------------------------------------------------
/03-optional-page/MyProject.StarterWeb/wwwroot/lib/jquery/LICENSE.txt:
--------------------------------------------------------------------------------
1 | Copyright jQuery Foundation and other contributors, https://jquery.org/
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.
37 |
--------------------------------------------------------------------------------
/03-optional-page/README.md:
--------------------------------------------------------------------------------
1 | The sample in this folder demonstrates:
2 |
3 | - **How to have optional content** - The contact page is optional
4 |
5 | See [`template.json`](./MyProject.StarterWeb/.template.config/template.json)
6 |
7 |
--------------------------------------------------------------------------------
/04-parameter-from-list/MyProject.Con/.template.config/template.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json.schemastore.org/template",
3 | "author": "Contoso",
4 | "classifications": [ "Console" ],
5 | "name": "Contoso Sample 04",
6 | "identity": "MyProject.04.Sample.CSharp",
7 | "groupIdentity":"MyProject.04.Sample",
8 | "shortName": "sample04",
9 | "tags": {
10 | "language": "C#",
11 | "type":"project"
12 | },
13 | "preferNameDirectory": true,
14 | "sourceName": "MyProject.Con",
15 | "symbols":{
16 | "CopyrightName": {
17 | "type": "parameter",
18 | "defaultValue": "(c) Contoso",
19 | "replaces":"(copyright)"
20 | },
21 | "Title": {
22 | "type": "parameter",
23 | "defaultValue": "Contoso Sample",
24 | "replaces":"My App Title"
25 | },
26 | "EnableContactPage":{
27 | "type": "parameter",
28 | "dataType":"bool",
29 | "defaultValue": "false"
30 | },
31 | "BackgroundColor":{
32 | "type":"parameter",
33 | "datatype": "choice",
34 | "defaultValue":"aliceblue",
35 | "choices": [
36 | {
37 | "choice": "aliceblue",
38 | "description": "Alice Blue"
39 | },
40 | {
41 | "choice": "dimgray",
42 | "description":"dimgray"
43 | },
44 | {
45 | "choice":"skyblue",
46 | "description":"skyblue"
47 | }
48 | ],
49 | "replaces":"skyblue"
50 | }
51 | },
52 | "sources": [
53 | {
54 | "modifiers": [
55 | {
56 | "condition": "(!EnableContactPage)",
57 | "exclude": [
58 | "contact.txt"
59 | ]
60 | }
61 | ]
62 | }
63 | ]
64 | }
--------------------------------------------------------------------------------
/04-parameter-from-list/MyProject.Con/MyProject.Con.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Exe
5 | netcoreapp2.0
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/04-parameter-from-list/MyProject.Con/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace MyProject.Con
4 | {
5 | class Program
6 | {
7 | static void Main(string[] args)
8 | {
9 | Console.WriteLine(@"
10 | Copyright: (copyright)
11 | Title: My App Title
12 | Background color: skyblue
13 | ");
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/04-parameter-from-list/MyProject.Con/contact.txt:
--------------------------------------------------------------------------------
1 | Sample file
--------------------------------------------------------------------------------
/04-parameter-from-list/README.md:
--------------------------------------------------------------------------------
1 | The sample in this folder demonstrates:
2 |
3 | - **Creating a parameter based on a list of options** - The parameter is used to set the background color of the website
4 |
5 | See [`template.json`](./MyProject.Con/.template.config/template.json)
6 |
7 |
--------------------------------------------------------------------------------
/05-multi-project/.template.config/template.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json.schemastore.org/template",
3 | "author": "Sayed I. Hashimi",
4 | "classifications": [ "Console" ],
5 | "name": "Console Sample 05",
6 | "identity": "MyProject.05.Sample.CSharp",
7 | "groupIdentity":"MyProject.05.Sample",
8 | "shortName": "sample05",
9 | "tags": {
10 | "language": "C#",
11 | "type":"project"
12 | },
13 | "sourceName": "MyProject.Console",
14 | "preferNameDirectory": true,
15 | "symbols":{
16 | "includetest": {
17 | "type": "parameter",
18 | "datatype": "bool",
19 | "defaultValue": "true"
20 | }
21 | },
22 | "sources":[{
23 | "modifiers": [{
24 | "condition": "(!includetest)",
25 | "exclude": [ "MyProject.Console.Test/**/*"]
26 | }
27 | ]
28 | }]
29 | }
--------------------------------------------------------------------------------
/05-multi-project/MyProject.Console.Test/MyProject.Console.Test.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netcoreapp1.1
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/05-multi-project/MyProject.Console.Test/MyTest.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Xunit;
3 | using MyProject.Console;
4 |
5 | namespace MyProject.Console.Test
6 | {
7 | public class MyProject_Console_UnitTest
8 | {
9 | [Fact]
10 | public void MyProject_Console_Test()
11 | {
12 | var name = Sample.GetName();
13 | Assert.Equal("Console and unit test demo",name);
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/05-multi-project/MyProject.Console/MyProject.Console.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netstandard1.4
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/05-multi-project/MyProject.Console/Sample.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace MyProject.Console
4 | {
5 | public static class Sample
6 | {
7 | public static string GetName()
8 | {
9 | return "Console and unit test demo";
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/05-multi-project/README.md:
--------------------------------------------------------------------------------
1 | The sample in this folder demonstrates:
2 |
3 | - **Multi-project template** - Console with an optional unit test project
4 |
5 | See [`template.json`](./.template.config/template.json)
6 |
--------------------------------------------------------------------------------
/06-console-csharp-fsharp/MyProject.Con.CSharp/.template.config/template.json:
--------------------------------------------------------------------------------
1 | {
2 | "author": "Sayed I. Hashimi",
3 | "classifications": [ "Console" ],
4 | "name": "Contoso Sample 06",
5 | "identity": "MyProject.06.Sample.CSharp",
6 | "groupIdentity":"MyProject.06.Sample",
7 | "shortName": "sample06",
8 | "tags": {
9 | "language": "C#",
10 | "type":"project"
11 | },
12 | "sourceName": "MyProject.Console",
13 | "preferNameDirectory": true
14 | }
--------------------------------------------------------------------------------
/06-console-csharp-fsharp/MyProject.Con.CSharp/MyProject.Con.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Exe
5 | netcoreapp1.1
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/06-console-csharp-fsharp/MyProject.Con.CSharp/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace MyProject.Con
4 | {
5 | class Program
6 | {
7 | static void Main(string[] args)
8 | {
9 | Console.WriteLine("Hello World!");
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/06-console-csharp-fsharp/MyProject.Con.FSharp/.template.config/template.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json.schemastore.org/template",
3 | "author": "Sayed I. Hashimi",
4 | "classifications": [ "Console" ],
5 | "name": "Contoso Sample 06",
6 | "identity": "MyProject.06.Sample.FSharp",
7 | "groupIdentity":"MyProject.06.Sample",
8 | "shortName": "sample06",
9 | "tags": {
10 | "language": "F#",
11 | "type":"project"
12 | },
13 | "sourceName": "MyProject.Console",
14 | "preferNameDirectory": true
15 | }
--------------------------------------------------------------------------------
/06-console-csharp-fsharp/MyProject.Con.FSharp/MyProject.Con.fsproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Exe
5 | netcoreapp1.1
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/06-console-csharp-fsharp/MyProject.Con.FSharp/Program.fs:
--------------------------------------------------------------------------------
1 | // Learn more about F# at http://fsharp.org
2 |
3 | open System
4 |
5 | []
6 | let main argv =
7 | printfn "Hello World from F#!"
8 | 0 // return an integer exit code
9 |
--------------------------------------------------------------------------------
/06-console-csharp-fsharp/README.md:
--------------------------------------------------------------------------------
1 | The sample in this folder demonstrates:
2 |
3 | - **Creating a template that supports multiple languages** - Using `groupIdentity` to create a console project in `C#` and `F#`
4 |
5 | In this sample there are two project templates, one using C# and the other F#.
6 | By using `groupIdentiy` these templates will appear as the same template in the output of `dotnet new --list`.
7 |
8 | To make more than one template appear as the same in `dotnet new --list` ensure the following:
9 |
10 | - Each has a unique value for `identity`
11 | - Each has the **same** value for `groupIdentity`
12 | - Each has the **same** value for `name`
13 | - Each has a `language` tag specifying the language supported
14 |
15 | See
16 | - [`template.json` (c#)](./MyProject.Con.CSharp/.template.config/template.json)
17 | - [`template.json` (f#)](./MyProject.Con.FSharp/.template.config/template.json)
18 |
--------------------------------------------------------------------------------
/07-param-with-custom-short-name/MyProject.Con/.template.config/dotnetcli.host.json:
--------------------------------------------------------------------------------
1 | {
2 | "symbolInfo": {
3 | "copyrightName": {
4 | "longName": "copyright-name",
5 | "shortName": "copy"
6 | }
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/07-param-with-custom-short-name/MyProject.Con/.template.config/template.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json.schemastore.org/template",
3 | "author": "Contoso",
4 | "classifications": [ "Console" ],
5 | "name": "Contoso Sample 07",
6 | "identity": "MyProject.07.Sample.CSharp",
7 | "groupIdentity":"MyProject.07.Sample",
8 | "shortName": "sample07",
9 | "tags": {
10 | "language": "C#",
11 | "type":"project"
12 | },
13 | "sourceName": "MyProject.Con",
14 | "preferNameDirectory": true,
15 | "symbols":{
16 | "copyrightName": {
17 | "type": "parameter",
18 | "defaultValue": "John Smith",
19 | "replaces":"(copyright)"
20 | },
21 | "title": {
22 | "type": "parameter",
23 | "defaultValue": "Your title",
24 | "replaces":"My App Title"
25 | }
26 | }
27 | }
--------------------------------------------------------------------------------
/07-param-with-custom-short-name/MyProject.Con/MyProject.Con.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Exe
5 | netcoreapp2.0
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/07-param-with-custom-short-name/MyProject.Con/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace MyProject.Con
4 | {
5 | class Program
6 | {
7 | static void Main(string[] args)
8 | {
9 | Console.WriteLine(@"
10 | Copyright: (copyright)
11 | Title: My App Title
12 | ");
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/07-param-with-custom-short-name/MyProject.Con/contact.txt:
--------------------------------------------------------------------------------
1 | Sample file
--------------------------------------------------------------------------------
/07-param-with-custom-short-name/README.md:
--------------------------------------------------------------------------------
1 | The sample in this folder demonstrates:
2 |
3 | - Customizing parameter names on the CLI
4 |
5 | To customize parameter names for the command line (`dotnet new`), you will create a new file named `dotnetcli.host.json`.
6 | In that file you can define the long and short name of the parameters, as well as other settings.
7 |
8 | See
9 | - [`dotnetcli.host.json`](./MyProject.Con/.template.config/dotnetcli.host.json)
10 | - [`template.json`](./MyProject.Con/.template.config/template.json)
11 |
12 | Note: This sample is the same as [`02-add-parameters`](https://github.com/dotnet/dotnet-template-samples/tree/master/02-add-parameters) plus a `dotnetcli.host.json` file.
--------------------------------------------------------------------------------
/08-restore-on-create/MyProject.Con.CSharp/.template.config/dotnetcli.host.json:
--------------------------------------------------------------------------------
1 | {
2 | "symbolInfo": {
3 | "skipRestore": {
4 | "longName": "no-restore",
5 | "shortName": ""
6 | }
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/08-restore-on-create/MyProject.Con.CSharp/.template.config/template.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json.schemastore.org/template",
3 | "author": "Sayed I. Hashimi",
4 | "classifications": [ "Console" ],
5 | "name": "Contoso Sample 08",
6 | "identity": "MyProject.08.Sample.CSharp",
7 | "groupIdentity":"MyProject.Sample",
8 | "shortName": "sample08",
9 | "tags": {
10 | "language": "C#",
11 | "type":"project"
12 | },
13 | "sourceName": "MyProject.Con",
14 | "preferNameDirectory": true,
15 | "symbols":{
16 | "skipRestore": {
17 | "type": "parameter",
18 | "datatype": "bool",
19 | "description": "If specified, skips the automatic restore of the project on create.",
20 | "defaultValue": "false"
21 | }
22 | },
23 | "postActions": [
24 | {
25 | "condition": "(!skipRestore)",
26 | "description": "Restore NuGet packages required by this project.",
27 | "manualInstructions": [
28 | { "text": "Run 'dotnet restore'" }
29 | ],
30 | "actionId": "210D431B-A78B-4D2F-B762-4ED3E3EA9025",
31 | "continueOnError": true
32 | }]
33 | }
--------------------------------------------------------------------------------
/08-restore-on-create/MyProject.Con.CSharp/MyProject.Con.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Exe
5 | netcoreapp1.1
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/08-restore-on-create/MyProject.Con.CSharp/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace MyProject.Con
4 | {
5 | class Program
6 | {
7 | static void Main(string[] args)
8 | {
9 | Console.WriteLine("Hello World!");
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/08-restore-on-create/README.md:
--------------------------------------------------------------------------------
1 | The sample in this folder demonstrates:
2 |
3 | - Run `dotnet restore` after create
4 |
5 | Using a *post action* you can run `dotnet restore` after the project is created.
6 | In this sample a parameter is configured so the user can skip the restore step if desired.
7 |
8 | See
9 |
10 | - [`template.json`](./MyProject.Con.CSharp/.template.config/template.json)
11 | - [`dotnetcli.host.json`](./MyProject.Con.CSharp/.template.config/dotnetcli.host.json)
12 |
13 | Related
14 |
15 | For more info on *post actions*, including the list of available ones, see https://github.com/dotnet/templating/wiki/Post-Action-Registry.
--------------------------------------------------------------------------------
/09-replace-onlyif-after/MyProject.Con/.template.config/template.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json.schemastore.org/template",
3 | "author": "Contoso",
4 | "classifications": [ "Console" ],
5 | "name": "Contoso Sample 09",
6 | "identity": "MyProject.09.Sample.CSharp",
7 | "groupIdentity":"MyProject.09.Sample",
8 | "shortName": "sample09",
9 | "tags": {
10 | "language": "C#",
11 | "type":"project"
12 | },
13 | "sourceName": "MyProject.Con",
14 | "preferNameDirectory":true,
15 | "symbols": {
16 | "backgroundColor":{
17 | "type": "parameter",
18 | "defaultValue": "grey",
19 | "datatype":"text",
20 | "replaces": "black",
21 | "onlyIf": [
22 | {
23 | "after": "background-color: "
24 | }
25 | ]
26 | }
27 | }
28 | }
--------------------------------------------------------------------------------
/09-replace-onlyif-after/MyProject.Con/MyProject.Con.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Exe
5 | netcoreapp2.0
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/09-replace-onlyif-after/MyProject.Con/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace MyProject.Con
4 | {
5 | class Program
6 | {
7 | static void Main(string[] args)
8 | {
9 | Console.WriteLine(@"see replacement in site.css");
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/09-replace-onlyif-after/MyProject.Con/contact.txt:
--------------------------------------------------------------------------------
1 | Sample file
--------------------------------------------------------------------------------
/09-replace-onlyif-after/MyProject.Con/site.css:
--------------------------------------------------------------------------------
1 | body {
2 | padding-top: 50px;
3 | padding-bottom: 20px;
4 | background-color: black;
5 | }
6 |
7 | /* Set widths on the form inputs since otherwise they're 100% wide */
8 | input,
9 | select,
10 | textarea {
11 | max-width: 280px;
12 | color: black;
13 | }
14 |
15 | /* Carousel */
16 | .carousel-caption p {
17 | font-size: 20px;
18 | line-height: 1.4;
19 | color: black
20 | }
21 |
22 | /* Wrapping element */
23 | /* Set some basic padding to keep content from hitting the edges */
24 | .body-content {
25 | padding-left: 15px;
26 | padding-right: 15px;
27 | }
28 |
29 |
30 |
31 | /* Make .svg files in the carousel display properly in older browsers */
32 | .carousel-inner .item img[src$=".svg"] {
33 | width: 100%;
34 | }
35 |
36 | /* Hide/rearrange for smaller screens */
37 | @media screen and (max-width: 767px) {
38 | /* Hide captions */
39 | .carousel-caption {
40 | display: none;
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/09-replace-onlyif-after/README.md:
--------------------------------------------------------------------------------
1 | The sample in this folder demonstrates:
2 |
3 | - **`onlyIf`** - Shows how you can replace some text on the condition it's preceded by a specified string.
4 |
5 | In this sample, we show how you can replace a
6 |
7 | From [`site.css`](./MyProject.Con/wwwroot/css/site.css)
8 |
9 | ```
10 | body {
11 | padding-top: 50px;
12 | padding-bottom: 20px;
13 | background-color: black;
14 | }
15 |
16 | /* Set widths on the form inputs since otherwise they're 100% wide */
17 | input,
18 | select,
19 | textarea {
20 | max-width: 280px;
21 | color: black;
22 | }
23 |
24 | /* Carousel */
25 | .carousel-caption p {
26 | font-size: 20px;
27 | line-height: 1.4;
28 | color: black
29 | }
30 | ```
31 |
32 | The sample shows how you can update the `black` for background-color without impacting the values for color in the following elements.
33 |
34 |
35 | See [`template.json`](./MyProject.Con/.template.config/template.json)
36 |
37 |
--------------------------------------------------------------------------------
/10-symbol-from-date/MyProject.Con/.template.config/template.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json.schemastore.org/template",
3 | "author": "Sayed I. Hashimi",
4 | "classifications": [ "Console" ],
5 | "name": "Contoso Sample 10",
6 | "identity": "MyProject.10.Sample.CSharp",
7 | "groupIdentity":"MyProject.10.Sample",
8 | "shortName": "sample10",
9 | "tags": {
10 | "language": "C#",
11 | "type":"project"
12 | },
13 | "sourceName": "MyProject.Con",
14 | "preferNameDirectory": true,
15 | "symbols":{
16 | "createdate": {
17 | "type": "generated",
18 | "generator": "now",
19 | "parameters": {
20 | "format": "MM/dd/yyyy"
21 | },
22 | "replaces":"01/01/1999"
23 | }
24 | }
25 | }
--------------------------------------------------------------------------------
/10-symbol-from-date/MyProject.Con/MyProject.Con.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Exe
5 | netcoreapp2.0
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/10-symbol-from-date/MyProject.Con/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace MyProject.Con
4 | {
5 | class Program
6 | {
7 | static void Main(string[] args)
8 | {
9 | Console.WriteLine(@"
10 | Date created: 01/01/1999");
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/10-symbol-from-date/README.md:
--------------------------------------------------------------------------------
1 | The sample in this folder demonstrates:
2 |
3 | - Creating a parameter from the current date/time.
4 |
5 | See
6 |
7 | - [`template.json`](./MyProject.Con/.template.config/template.json)
8 | - [`Program.cs`](./MyProject.Con/Program.cs)
9 |
10 | Related
11 | - [Available parameter generators](https://github.com/dotnet/templating/wiki/Available-Parameter-Generators)
12 |
--------------------------------------------------------------------------------
/11-change-string-casing/MyProject.Con/.template.config/template.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json.schemastore.org/template",
3 | "author": "Sayed I. Hashimi",
4 | "classifications": [ "Console" ],
5 | "name": "Contoso Sample 11",
6 | "identity": "MyProject.11.Sample.CSharp",
7 | "groupIdentity":"MyProject.11.Sample",
8 | "shortName": "sample11",
9 | "tags": {
10 | "language": "C#",
11 | "type":"project"
12 | },
13 | "sourceName": "MyProject.Con",
14 | "preferNameDirectory": true,
15 | "symbols":{
16 | "ownername":{
17 | "type": "parameter",
18 | "datatype":"text",
19 | "replaces": "John Smith (a)",
20 | "defaultValue": "John Doe"
21 | },
22 |
23 | "nameUpper":{
24 | "type": "generated",
25 | "generator": "casing",
26 | "parameters": {
27 | "source":"ownername",
28 | "toLower": false
29 | },
30 | "replaces":"John Smith (U)"
31 | },
32 |
33 | "nameLower":{
34 | "type": "generated",
35 | "generator": "casing",
36 | "parameters": {
37 | "source":"ownername",
38 | "toLower": true
39 | },
40 | "replaces":"John Smith (l)"
41 | }
42 | }
43 | }
--------------------------------------------------------------------------------
/11-change-string-casing/MyProject.Con/MyProject.Con.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Exe
5 | netcoreapp2.0
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/11-change-string-casing/MyProject.Con/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace MyProject.Con
4 | {
5 | class Program
6 | {
7 | static void Main(string[] args)
8 | {
9 | Console.WriteLine(@"
10 | Name: John Smith (a)
11 | Name upper: John Smith (U)
12 | Name lower: John Smith (l)");
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/11-change-string-casing/README.md:
--------------------------------------------------------------------------------
1 | The sample in this folder demonstrates:
2 |
3 | - Uppercasing a parameter value.
4 | - Lowercasing a parameter value.
5 |
6 | See
7 |
8 | - [`template.json`](./MyProject.Con/.template.config/template.json)
9 | - [`Program.cs`](./MyProject.Con/Program.cs)
10 |
11 | Related
12 | - [Available parameter generators](https://github.com/dotnet/templating/wiki/Available-Parameter-Generators)
13 |
14 |
--------------------------------------------------------------------------------
/12-random-number/MyProject.Con/.template.config/template.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json.schemastore.org/template",
3 | "author": "Sayed I. Hashimi",
4 | "classifications": [ "Console" ],
5 | "name": "Contoso Sample 12",
6 | "identity": "MyProject.12.Sample.CSharp",
7 | "groupIdentity":"MyProject.12.Sample",
8 | "shortName": "sample12",
9 | "tags": {
10 | "language": "C#",
11 | "type":"project"
12 | },
13 | "sourceName": "MyProject.Con",
14 | "preferNameDirectory": true,
15 | "symbols":{
16 | "myRandomNumber":{
17 | "type": "generated",
18 | "generator": "random",
19 | "parameters": {
20 | "low": 0,
21 | "high": 10000
22 | },
23 | "replaces": "4321"
24 | }
25 | }
26 | }
--------------------------------------------------------------------------------
/12-random-number/MyProject.Con/MyProject.Con.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Exe
5 | netcoreapp2.0
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/12-random-number/MyProject.Con/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace MyProject.Con
4 | {
5 | class Program
6 | {
7 | static void Main(string[] args)
8 | {
9 | Console.WriteLine(@"
10 | Random (0-10000): 4321");
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/12-random-number/README.md:
--------------------------------------------------------------------------------
1 | The sample in this folder demonstrates:
2 |
3 | - Creating a random int in a given range.
4 |
5 | See
6 |
7 | - [`template.json`](./MyProject.Con/.template.config/template.json)
8 | - [`Program.cs`](./MyProject.Con/Program.cs)
9 |
10 | Related
11 | - [Available parameter generators](https://github.com/dotnet/templating/wiki/Available-Parameter-Generators)
12 |
13 |
--------------------------------------------------------------------------------
/13-constant-value/MyProject.Con/.template.config/template.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json.schemastore.org/template",
3 | "author": "Sayed I. Hashimi",
4 | "classifications": [ "Console" ],
5 | "name": "Contoso Sample 13",
6 | "identity": "MyProject.13.Con.CSharp",
7 | "groupIdentity":"MyProject.13.Con",
8 | "shortName": "sample13",
9 | "tags": {
10 | "language": "C#",
11 | "type":"project"
12 | },
13 | "sourceName": "MyProject.Con",
14 | "preferNameDirectory": true,
15 | "symbols":{
16 | "myconstant": {
17 | "type": "generated",
18 | "generator": "constant",
19 | "parameters": {
20 | "value":"5001"
21 | },
22 | "replaces":"1234"
23 | }
24 | }
25 | }
--------------------------------------------------------------------------------
/13-constant-value/MyProject.Con/MyProject.Con.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Exe
5 | netcoreapp2.0
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/13-constant-value/MyProject.Con/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace MyProject.Con
4 | {
5 | class Program
6 | {
7 | static void Main(string[] args)
8 | {
9 | Console.WriteLine(@"
10 | From const: 1234");
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/13-constant-value/README.md:
--------------------------------------------------------------------------------
1 | The sample in this folder demonstrates:
2 |
3 | - Creating a value based on a constant.
4 |
5 | See
6 |
7 | - [`template.json`](./MyProject.Con/.template.config/template.json)
8 | - [`Program.cs`](./MyProject.Con/Program.cs)
9 |
10 | Related
11 | - [Available parameter generators](https://github.com/dotnet/templating/wiki/Available-Parameter-Generators)
12 |
--------------------------------------------------------------------------------
/14-guid/MyProject.Con/.template.config/template.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json.schemastore.org/template",
3 | "author": "Sayed I. Hashimi",
4 | "classifications": [ "Console" ],
5 | "name": "Contoso Sample 14",
6 | "identity": "MyProject.14.Con.CSharp",
7 | "groupIdentity":"MyProject.14.Con",
8 | "shortName": "sample14",
9 | "tags": {
10 | "language": "C#",
11 | "type":"project"
12 | },
13 | "sourceName": "MyProject.Con",
14 | "preferNameDirectory": true,
15 | "guids": [
16 | "4BC5DF1F-B155-4A69-9719-0AB349B1ACB2",
17 | "12aa8f4e-a4aa-4ac1-927c-94cb99485ef1"
18 | ],
19 | "symbols":{
20 | "id01":{
21 | "type": "generated",
22 | "generator": "guid",
23 | "replaces": "myid01",
24 | "parameters": {
25 | "format":"N"
26 | }
27 | },
28 | "id02":{
29 | "type": "generated",
30 | "generator": "guid",
31 | "replaces": "myid02",
32 | "parameters": {
33 | "format":"D"
34 | }
35 | },
36 | "id03":{
37 | "type": "generated",
38 | "generator": "guid",
39 | "replaces": "myid03",
40 | "parameters": {
41 | "format":"B"
42 | }
43 | },
44 | "id04":{
45 | "type": "generated",
46 | "generator": "guid",
47 | "replaces": "myid04",
48 | "parameters": {
49 | "format":"P"
50 | }
51 | },
52 | "id05":{
53 | "type": "generated",
54 | "generator": "guid",
55 | "replaces": "myid05",
56 | "parameters": {
57 | "format":"X"
58 | }
59 | }
60 | }
61 | }
--------------------------------------------------------------------------------
/14-guid/MyProject.Con/MyProject.Con.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Exe
5 | netcoreapp2.0
6 | 4BC5DF1F-B155-4A69-9719-0AB349B1ACB2
7 |
8 |
9 |
--------------------------------------------------------------------------------
/14-guid/MyProject.Con/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace MyProject.Con
4 | {
5 | class Program
6 | {
7 | static void Main(string[] args)
8 | {
9 | Console.WriteLine(@"
10 | My ID (N): myid01
11 | My ID (D): myid02
12 | My ID (B): myid03
13 | My ID (P): myid04
14 | My ID (X): myid05
15 |
16 | // guids can have different formats. By default we will search for guids matching all formats and replacing them with the new guid value,
17 | // and match the format used. Below you'll see the same guid is replaced by a new guid, and the format is preserved.
18 | // More info on guid formats at https://msdn.microsoft.com/en-us/library/97af8hh4(v=vs.110).aspx
19 |
20 | N: 12aa8f4ea4aa4ac1927c94cb99485ef1
21 | D: 12aa8f4e-a4aa-4ac1-927c-94cb99485ef1
22 | B: {12aa8f4e-a4aa-4ac1-927c-94cb99485ef1}
23 | P: (12aa8f4e-a4aa-4ac1-927c-94cb99485ef1)
24 | X: {0x12aa8f4e,0xa4aa,0x4ac1,{0x92,0x7c,0x94,0xcb,0x99,0x48,0x5e,0xf1}}
25 | ");
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/14-guid/README.md:
--------------------------------------------------------------------------------
1 | The sample in this folder demonstrates:
2 |
3 | - Creating guids in different formats and using those for replacements.
4 | - Replacing guids using the `guids` element in `template.json`
5 |
6 | See
7 |
8 | - [`template.json`](./MyProject.Con/.template.config/template.json)
9 | - [`Program.cs`](./MyProject.Con/Program.cs)
10 | - [`MyProject.Con.csproj`](./MyProject.Con/MyProject.Con.csproj)
11 |
12 | Related
13 | - [Available parameter generators](https://github.com/dotnet/templating/wiki/Available-Parameter-Generators)
14 |
15 |
--------------------------------------------------------------------------------
/15-computed-symbol/MyProject.Con/.template.config/template.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json.schemastore.org/template",
3 | "author": "Contoso",
4 | "classifications": [ "Console" ],
5 | "name": "Contoso Sample 15",
6 | "identity": "MyProject.15.Sample.CSharp",
7 | "groupIdentity":"MyProject.15.Sample",
8 | "shortName": "sample15",
9 | "tags": {
10 | "language": "C#",
11 | "type":"project"
12 | },
13 | "preferNameDirectory": true,
14 | "sourceName": "MyProject.Con",
15 | "symbols":{
16 | "CopyrightName": {
17 | "type": "parameter",
18 | "defaultValue": "(c) Contoso",
19 | "replaces":"(copyright)"
20 | },
21 | "Title": {
22 | "type": "parameter",
23 | "defaultValue": "Contoso Sample",
24 | "replaces":"My App Title"
25 | },
26 | "BackgroundColor":{
27 | "type":"parameter",
28 | "datatype": "choice",
29 | "defaultValue":"aliceblue",
30 | "choices": [
31 | {
32 | "choice": "aliceblue",
33 | "description": "Alice Blue"
34 | },
35 | {
36 | "choice": "dimgray",
37 | "description":"dimgray"
38 | },
39 | {
40 | "choice":"skyblue",
41 | "description":"skyblue"
42 | }
43 | ],
44 | "replaces":"skyblue"
45 | },
46 | "DisplayCopywrite":{
47 | "type": "parameter",
48 | "datatype":"bool",
49 | "defaultValue": "true"
50 | },
51 | "DisplayTitle":{
52 | "type": "parameter",
53 | "datatype":"bool",
54 | "defaultValue": "true"
55 | },
56 | "BackgroundGreyAndDisplayCopyright":{
57 | "type": "computed",
58 | "value": "(BackgroundColor == \"aliceblue\" && DisplayCopywrite == \"true\")"
59 | }
60 | }
61 | }
--------------------------------------------------------------------------------
/15-computed-symbol/MyProject.Con/MyProject.Con.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Exe
5 | netcoreapp2.0
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/15-computed-symbol/MyProject.Con/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace MyProject.Con
4 | {
5 | class Program
6 | {
7 | static void Main(string[] args)
8 | {
9 | #if (DisplayCopywrite)
10 | string copyright = "(copyright)";
11 | #endif
12 | string title = "My App Title";
13 |
14 | #if (DisplayCopywrite)
15 | Console.WriteLine($"Copyright : {copyright}");
16 | #endif
17 | #if (DisplayTitle)
18 | Console.WriteLine($"Title : {title}");
19 | #endif
20 | #if (BackgroundGreyAndDisplayCopyright)
21 | Console.WriteLine($"BackgroundGreyAndDisplayCopyright evaulated to true");
22 | #endif
23 |
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/15-computed-symbol/README.md:
--------------------------------------------------------------------------------
1 | The sample in this folder demonstrates:
2 |
3 | - **How to create a computed symbol and use that for conditions**
4 |
5 | In this sample we define a few parameter in the [`template.json`](./MyProject.Con/.template.config/template.json) file. There is also
6 | a computed symbols `BackgroundGreyAndDisplayCopyright` which combines the value for two parameters. Then this symbol can be used
7 | as a conditional in source files.
8 |
9 | Try the sample with the following and compare the results.
10 | - `dotnet new sample15 -o Sam15 --DisplayCopywrite false`
11 | - `dotnet new sample15 -o Sam15 --DisplayCopywrite true --BackgroundColor aliceblue`
12 |
13 | ## See
14 | - [`template.json`](./MyProject.Con/.template.config/template.json)
15 | - [`Program.cs`](./MyProject.Con/Program.cs)
16 |
17 |
--------------------------------------------------------------------------------
/16-nuget-package/GarciaSoftware.ConsoleTemplate.CSharp/GarciaSoftware.ConsoleTemplate.CSharp.nuspec:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | GarciaSoftware.ConsoleTemplate.CSharp
5 | 1.0.0
6 |
7 | Creates the Garcia Software console app.
8 |
9 | Catalina Garcia
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/16-nuget-package/GarciaSoftware.ConsoleTemplate.CSharp/content/.template.config/template.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json.schemastore.org/template",
3 | "author": "Catalina Garcia",
4 | "classifications": [ "Common", "Console" ],
5 | "identity": "GarciaSoftware.ConsoleTemplate.CSharp",
6 | "name": "Garcia Software Console Application",
7 | "shortName": "garciaconsole"
8 | }
9 |
--------------------------------------------------------------------------------
/16-nuget-package/GarciaSoftware.ConsoleTemplate.CSharp/content/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace content
4 | {
5 | class Program
6 | {
7 | static void Main(string[] args)
8 | {
9 | Console.WriteLine("Hello World!");
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/16-nuget-package/GarciaSoftware.ConsoleTemplate.CSharp/content/content.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Exe
5 | netcoreapp2.0
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/16-nuget-package/README.md:
--------------------------------------------------------------------------------
1 | The sample in this folder demonstrates:
2 |
3 | - **How to create a NuGet-packaged template**
4 |
5 | See [`GarciaSoftware.ConsoleTemplate.CSharp.nuspec`](./GarciaSoftware.ConsoleTemplate.CSharp/GarciaSoftware.ConsoleTemplate.CSharp.nuspec) and [`template.json`](./GarciaSoftware.ConsoleTemplate.CSharp/content/.template.config/template.json)
6 |
7 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing
2 |
3 | See [Contributing](https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/contributing.md) for general information about coding styles, source structure, making pull requests, and more.
4 | If you are looking for ideas, look through the [issues](https://github.com/dotnet/dotnet-template-samples/issues) page with items marked as *Help Wanted*.
5 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) .NET Foundation and Contributors
4 |
5 | All rights reserved.
6 |
7 | Permission is hereby granted, free of charge, to any person obtaining a copy
8 | of this software and associated documentation files (the "Software"), to deal
9 | in the Software without restriction, including without limitation the rights
10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | copies of the Software, and to permit persons to whom the Software is
12 | furnished to do so, subject to the following conditions:
13 |
14 | The above copyright notice and this permission notice shall be included in all
15 | copies or substantial portions of the Software.
16 |
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 | SOFTWARE.
24 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # .NET Template Samples
2 |
3 | This repository contains samples of templates created using the [Template Engine](https://github.com/dotnet/templating/). Custom templates can be
4 | used from `dotnet new` today. We are working on integrating these templates into Visaul Studio as well.
5 |
6 | For more general info on `dotnet new`, and the Template Engine, see the following.
7 | - [Announcing .NET Core Tools 1.0](https://blogs.msdn.microsoft.com/dotnet/2017/03/07/announcing-net-core-tools-1-0/)
8 | - [How to create your own templates for dotnet new](https://blogs.msdn.microsoft.com/dotnet/2017/04/02/how-to-create-your-own-templates-for-dotnet-new/)
9 |
10 | ## Contributing
11 |
12 | We would love community contributions here.
13 |
14 | See [CONTRIBUTING.md](CONTRIBUTING.md) for information on contributing to this project.
15 |
16 | This project has adopted the code of conduct defined by the [Contributor Covenant](http://contributor-covenant.org/)
17 | to clarify expected behavior in our community. For more information, see the [.NET Foundation Code of Conduct](http://www.dotnetfoundation.org/code-of-conduct).
18 |
19 | ## License
20 |
21 | This project is licensed with the [MIT license](LICENSE).
22 |
23 | ## Related Projects
24 |
25 | You should take a look at these related projects:
26 |
27 | - [Template Engine](https://github.com/dotnet/templating/)
28 | - [.NET Core](https://github.com/dotnet/core)
29 | - [ASP.NET](https://github.com/aspnet)
30 | - [Mono](https://github.com/mono)
--------------------------------------------------------------------------------