├── .gitignore ├── LICENSE ├── WebApp.sln └── WebApp ├── Models └── RatingControlOptions.cs ├── Pages ├── About.cshtml ├── About.cshtml.cs ├── Components │ └── RatingControl │ │ ├── Default.cshtml │ │ └── RatingControlViewComponent.cs ├── Contact.cshtml ├── Contact.cshtml.cs ├── Error.cshtml ├── Error.cshtml.cs ├── Index.cshtml ├── Index.cshtml.cs ├── Privacy.cshtml ├── Privacy.cshtml.cs ├── RatingDemoComplete.cshtml ├── RatingDemoComplete.cshtml.cs ├── RatingDemoInvokeAsync.cshtml ├── RatingDemoInvokeAsync.cshtml.cs ├── RatingDemoRawHtml.cshtml ├── RatingDemoRawHtml.cshtml.cs ├── RatingDemoTagHelper.cshtml ├── RatingDemoTagHelper.cshtml.cs ├── Shared │ ├── _CookieConsentPartial.cshtml │ ├── _Layout.cshtml │ └── _ValidationScriptsPartial.cshtml ├── _ViewImports.cshtml └── _ViewStart.cshtml ├── Program.cs ├── Properties └── launchSettings.json ├── Startup.cs ├── WebApp.csproj ├── appsettings.Development.json ├── appsettings.json └── wwwroot ├── css ├── FontFace.css ├── examples.css ├── main.css ├── normalize.css ├── normalize.min.css ├── site.css ├── site.min.css └── themes │ ├── bars-1to10.css │ ├── bars-horizontal.css │ ├── bars-movie.css │ ├── bars-pill.css │ ├── bars-reversed.css │ ├── bars-square.css │ ├── bootstrap-stars.css │ ├── css-stars.css │ ├── fontawesome-stars-o.css │ └── fontawesome-stars.css ├── demo ├── css │ ├── examples.css │ ├── main.css │ ├── normalize.css │ └── normalize.min.css ├── img │ ├── antenna.png │ ├── antenna@2x.png │ ├── bars.png │ ├── bars@2x.png │ ├── github.png │ ├── github@2x.png │ ├── star.png │ └── star@2x.png ├── index.html ├── js │ ├── examples.js │ └── vendor │ │ ├── html5shiv.js │ │ └── jquery-1.11.2.min.js └── less │ ├── examples.less │ ├── main.less │ ├── mixins.less │ └── variables.less ├── favicon.ico ├── images ├── banner1.svg ├── banner2.svg └── banner3.svg ├── js ├── examples.js ├── jquery.barrating.js ├── site.js └── site.min.js └── lib ├── bootstrap ├── .bower.json ├── LICENSE └── dist │ ├── css │ ├── bootstrap-theme.css │ ├── bootstrap-theme.css.map │ ├── bootstrap-theme.min.css │ ├── bootstrap-theme.min.css.map │ ├── bootstrap.css │ ├── bootstrap.css.map │ ├── bootstrap.min.css │ └── bootstrap.min.css.map │ ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ ├── glyphicons-halflings-regular.woff │ └── glyphicons-halflings-regular.woff2 │ └── js │ ├── bootstrap.js │ ├── bootstrap.min.js │ └── npm.js ├── jquery-validation-unobtrusive ├── .bower.json ├── LICENSE.txt ├── jquery.validate.unobtrusive.js └── jquery.validate.unobtrusive.min.js ├── jquery-validation ├── .bower.json ├── LICENSE.md └── dist │ ├── additional-methods.js │ ├── additional-methods.min.js │ ├── jquery.validate.js │ └── jquery.validate.min.js └── jquery ├── .bower.json ├── LICENSE.txt └── dist ├── jquery.js ├── jquery.min.js └── jquery.min.map /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.userosscache 8 | *.sln.docstates 9 | 10 | # User-specific files (MonoDevelop/Xamarin Studio) 11 | *.userprefs 12 | .vs 13 | 14 | m5FinalWithEFBefore 15 | 16 | # Build results 17 | [Dd]ebug/ 18 | [Dd]ebugPublic/ 19 | [Rr]elease/ 20 | [Rr]eleases/ 21 | x64/ 22 | x86/ 23 | bld/ 24 | [Bb]in/ 25 | [Oo]bj/ 26 | [Ll]og/ 27 | 28 | .next 29 | 30 | # Visual Studio 2015 cache/options directory 31 | .vs/ 32 | # Uncomment if you have tasks that create the project's static files in wwwroot 33 | #wwwroot/ 34 | 35 | # MSTest test Results 36 | [Tt]est[Rr]esult*/ 37 | [Bb]uild[Ll]og.* 38 | 39 | # NUNIT 40 | *.VisualState.xml 41 | TestResult.xml 42 | 43 | # Build Results of an ATL Project 44 | [Dd]ebugPS/ 45 | [Rr]eleasePS/ 46 | dlldata.c 47 | 48 | # DNX 49 | project.lock.json 50 | project.fragment.lock.json 51 | artifacts/ 52 | 53 | *_i.c 54 | *_p.c 55 | *_i.h 56 | *.ilk 57 | *.meta 58 | *.obj 59 | *.pch 60 | *.pdb 61 | *.pgc 62 | *.pgd 63 | *.rsp 64 | *.sbr 65 | *.tlb 66 | *.tli 67 | *.tlh 68 | *.tmp 69 | *.tmp_proj 70 | *.log 71 | *.vspscc 72 | *.vssscc 73 | .builds 74 | *.pidb 75 | *.svclog 76 | *.scc 77 | 78 | # Chutzpah Test files 79 | _Chutzpah* 80 | 81 | # Visual C++ cache files 82 | ipch/ 83 | *.aps 84 | *.ncb 85 | *.opendb 86 | *.opensdf 87 | *.sdf 88 | *.cachefile 89 | *.VC.db 90 | *.VC.VC.opendb 91 | 92 | # Visual Studio profiler 93 | *.psess 94 | *.vsp 95 | *.vspx 96 | *.sap 97 | 98 | # TFS 2012 Local Workspace 99 | $tf/ 100 | 101 | # Guidance Automation Toolkit 102 | *.gpState 103 | 104 | # ReSharper is a .NET coding add-in 105 | _ReSharper*/ 106 | *.[Rr]e[Ss]harper 107 | *.DotSettings.user 108 | 109 | # JustCode is a .NET coding add-in 110 | .JustCode 111 | 112 | # TeamCity is a build add-in 113 | _TeamCity* 114 | 115 | # DotCover is a Code Coverage Tool 116 | *.dotCover 117 | 118 | # NCrunch 119 | _NCrunch_* 120 | .*crunch*.local.xml 121 | nCrunchTemp_* 122 | 123 | # MightyMoose 124 | *.mm.* 125 | AutoTest.Net/ 126 | 127 | # Web workbench (sass) 128 | .sass-cache/ 129 | 130 | # Installshield output folder 131 | [Ee]xpress/ 132 | 133 | # DocProject is a documentation generator add-in 134 | DocProject/buildhelp/ 135 | DocProject/Help/*.HxT 136 | DocProject/Help/*.HxC 137 | DocProject/Help/*.hhc 138 | DocProject/Help/*.hhk 139 | DocProject/Help/*.hhp 140 | DocProject/Help/Html2 141 | DocProject/Help/html 142 | 143 | # Click-Once directory 144 | publish/ 145 | 146 | # Publish Web Output 147 | *.[Pp]ublish.xml 148 | *.azurePubxml 149 | # TODO: Comment the next line if you want to checkin your web deploy settings 150 | # but database connection strings (with potential passwords) will be unencrypted 151 | #*.pubxml 152 | *.publishproj 153 | 154 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 155 | # checkin your Azure Web App publish settings, but sensitive information contained 156 | # in these scripts will be unencrypted 157 | PublishScripts/ 158 | 159 | # NuGet Packages 160 | *.nupkg 161 | # The packages folder can be ignored because of Package Restore 162 | **/packages/* 163 | # except build/, which is used as an MSBuild target. 164 | !**/packages/build/ 165 | # Uncomment if necessary however generally it will be regenerated when needed 166 | #!**/packages/repositories.config 167 | # NuGet v3's project.json files produces more ignoreable files 168 | *.nuget.props 169 | *.nuget.targets 170 | 171 | # Microsoft Azure Build Output 172 | csx/ 173 | *.build.csdef 174 | 175 | # Microsoft Azure Emulator 176 | ecf/ 177 | rcf/ 178 | 179 | # Windows Store app package directories and files 180 | AppPackages/ 181 | BundleArtifacts/ 182 | Package.StoreAssociation.xml 183 | _pkginfo.txt 184 | 185 | # Visual Studio cache files 186 | # files ending in .cache can be ignored 187 | *.[Cc]ache 188 | # but keep track of directories ending in .cache 189 | !*.[Cc]ache/ 190 | 191 | # Others 192 | ClientBin/ 193 | ~$* 194 | *~ 195 | *.dbmdl 196 | *.dbproj.schemaview 197 | *.jfm 198 | *.pfx 199 | *.publishsettings 200 | node_modules/ 201 | orleans.codegen.cs 202 | 203 | # Since there are multiple workflows, uncomment next line to ignore bower_components 204 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 205 | #bower_components/ 206 | 207 | # RIA/Silverlight projects 208 | Generated_Code/ 209 | 210 | # Backup & report files from converting an old project file 211 | # to a newer Visual Studio version. Backup files are not needed, 212 | # because we have git ;-) 213 | _UpgradeReport_Files/ 214 | Backup*/ 215 | UpgradeLog*.XML 216 | UpgradeLog*.htm 217 | 218 | # SQL Server files 219 | *.mdf 220 | *.ldf 221 | 222 | # Business Intelligence projects 223 | *.rdl.data 224 | *.bim.layout 225 | *.bim_*.settings 226 | 227 | # Microsoft Fakes 228 | FakesAssemblies/ 229 | 230 | # GhostDoc plugin setting file 231 | *.GhostDoc.xml 232 | 233 | # Node.js Tools for Visual Studio 234 | .ntvs_analysis.dat 235 | 236 | # Visual Studio 6 build log 237 | *.plg 238 | 239 | # Visual Studio 6 workspace options file 240 | *.opt 241 | 242 | # Visual Studio LightSwitch build output 243 | **/*.HTMLClient/GeneratedArtifacts 244 | **/*.DesktopClient/GeneratedArtifacts 245 | **/*.DesktopClient/ModelManifest.xml 246 | **/*.Server/GeneratedArtifacts 247 | **/*.Server/ModelManifest.xml 248 | _Pvt_Extensions 249 | 250 | # Paket dependency manager 251 | .paket/paket.exe 252 | paket-files/ 253 | 254 | # FAKE - F# Make 255 | .fake/ 256 | 257 | # JetBrains Rider 258 | .idea/ 259 | *.sln.iml 260 | 261 | # CodeRush 262 | .cr/ 263 | 264 | # Python Tools for Visual Studio (PTVS) 265 | __pycache__/ 266 | *.pyc 267 | 268 | # Mac OS 269 | .DS_Store 270 | 271 | m3/reactcra/build 272 | *.js.map 273 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Peter Kellner 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 all 13 | 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 THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /WebApp.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.27703.2042 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebApp", "WebApp\WebApp.csproj", "{D5CD8BB6-0AE0-4E2A-99E9-A88FD095FFC4}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {D5CD8BB6-0AE0-4E2A-99E9-A88FD095FFC4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {D5CD8BB6-0AE0-4E2A-99E9-A88FD095FFC4}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {D5CD8BB6-0AE0-4E2A-99E9-A88FD095FFC4}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {D5CD8BB6-0AE0-4E2A-99E9-A88FD095FFC4}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {2F7BFEFD-10BD-44AA-92A8-A26874853CF1} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /WebApp/Models/RatingControlOptions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | 6 | namespace WebApp.Models 7 | { 8 | public class RatingControlOptions 9 | { 10 | public RatingControlOptions() 11 | { 12 | // Set default values. 13 | RatingControlType = "movie"; // default, other options: 1to10;movie;pill 14 | 15 | RatingControlValuesMovie = new List { "Bad", "Mediocre", "Good", "Awesome" }; 16 | RatingControlInitialValueMovie = "Awesome"; 17 | 18 | RatingControlValues1to10 = new List {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"}; 19 | RatingControlInitialValue1to10 = "10"; 20 | 21 | 22 | RatingControlValuesPill = new List { "A", "B", "C", "D", "E", "F" }; 23 | RatingControlInitialValuePill = "A"; 24 | } 25 | 26 | public string RatingControlType { get; set; } 27 | 28 | public List RatingControlValuesMovie { get; set; } 29 | public string RatingControlInitialValueMovie { get; set; } 30 | 31 | public List RatingControlValues1to10 { get; set; } 32 | public string RatingControlInitialValue1to10 { get; set; } 33 | 34 | 35 | public List RatingControlValuesPill { get; set; } 36 | public string RatingControlInitialValuePill { get; set; } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /WebApp/Pages/About.cshtml: -------------------------------------------------------------------------------- 1 | @page 2 | @model AboutModel 3 | @{ 4 | ViewData["Title"] = "About"; 5 | } 6 |

@ViewData["Title"]

7 |

@Model.Message

8 | 9 |

Use this area to provide additional information.

10 | 11 |
12 |
13 |
14 |
15 | 16 |

More stars

17 |
18 |
<div class="more-stars"></div>
19 | 20 |
$(".more-stars").stars({ stars:20 });
 21 | 
22 | 23 |

Font size

24 |
25 |
<div class="font-size"></div>
26 | 27 |
.font-size i { font-size:9px; }
 28 | 
29 | 30 |
$(".font-size").stars();
 31 | 
32 | 33 |

Init with values

34 |
35 |
<div class="value-set"></div>
36 | 37 |
$(".value-set").stars({ value:4 });
 38 | 
39 | 40 |

Color change

41 |
42 |
<div class="green-color"></div>
43 | 44 |
$(".green-color").stars({ color:'#73AD21' });
 45 | 
46 | 47 |

Icon change

48 |
49 |
<div class="icon-change"></div>
50 | 51 |
$(".icon-change").stars({
 52 |         emptyIcon: 'fa-thumbs-o-up',
 53 |         filledIcon: 'fa-thumbs-up'
 54 | });
 55 | 
56 | 57 |

With text

58 |
59 |
<div class="text"></div>
60 | 61 |
$(".text").stars({ 
 62 |         text: ["1 star", "2 star", "3 star", "4 star", "5 star"]
 63 | });
 64 | 
65 | 66 |

Callback

67 |
68 |
<div class="click-callback"></div>
69 | 70 |
$(".click-callback").stars({ 
 71 |         click: function(i) {
 72 |     alert("Star " + i + " selected.");
 73 |     }
 74 | });
 75 | 
76 |
77 | 78 | 79 | 80 | 81 | 101 | -------------------------------------------------------------------------------- /WebApp/Pages/About.cshtml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using Microsoft.AspNetCore.Mvc.RazorPages; 6 | using Microsoft.Extensions.Configuration; 7 | 8 | namespace WebApp.Pages 9 | { 10 | public class AboutModel : PageModel 11 | { 12 | private string _ratingControlColor; 13 | private string _ratingControlType; 14 | 15 | public AboutModel(IConfiguration config) 16 | { 17 | _ratingControlColor = config["RatingControlColor"]; 18 | _ratingControlType = config["RatingControlType"]; 19 | } 20 | public string Message { get; set; } 21 | 22 | public void OnGet() 23 | { 24 | Message = "RatingControlColor:" + _ratingControlColor + 25 | " RatingControlType:" + _ratingControlType; 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /WebApp/Pages/Components/RatingControl/Default.cshtml: -------------------------------------------------------------------------------- 1 | @model RingControlModel 2 | @{ 3 | var uniqueId = Guid.NewGuid().ToString("N"); 4 | } 5 | 6 | 10 | 11 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /WebApp/Pages/Components/RatingControl/RatingControlViewComponent.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Mvc; 2 | using Microsoft.AspNetCore.Mvc.Rendering; 3 | using Microsoft.Extensions.Configuration; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using WebApp.Models; 7 | 8 | namespace WebApp.Pages.Components.RatingControl 9 | { 10 | public class RingControlModel 11 | { 12 | public List SelectedListItems { get; set; } 13 | public string RatingControlType { get; set; } 14 | public string RatingControlValue { get; set; } 15 | public int RatingControlIdValue { get; internal set; } 16 | } 17 | 18 | 19 | public class RatingControlViewComponent : ViewComponent 20 | { 21 | private readonly RatingControlOptions _ratingControlOptions; 22 | 23 | public RatingControlViewComponent(IConfiguration config) 24 | { 25 | _ratingControlOptions = new RatingControlOptions 26 | { 27 | RatingControlType = config["RatingControlType"], 28 | RatingControlInitialValue1to10 = config["RatingControlInitialValue1to10"], 29 | RatingControlInitialValuePill = config["RatingControlInitialValuePill"], 30 | RatingControlInitialValueMovie = config["RatingControlInitialValueMovie"] 31 | }; 32 | } 33 | 34 | public IViewComponentResult Invoke(string ratingControlType,int ratingControlIdValue) 35 | { 36 | var ratingControlValues = new List(); 37 | var ratingControlInitialValue = ""; 38 | 39 | if (ratingControlType == "pill") 40 | { 41 | _ratingControlOptions.RatingControlValuesPill.ForEach(a => ratingControlValues.Add(a)); 42 | ratingControlInitialValue = _ratingControlOptions.RatingControlInitialValuePill; 43 | } 44 | else if (ratingControlType == "1to10") 45 | { 46 | _ratingControlOptions.RatingControlValues1to10.ForEach(a => ratingControlValues.Add(a)); 47 | ratingControlInitialValue = _ratingControlOptions.RatingControlInitialValue1to10; 48 | 49 | } 50 | else if (ratingControlType == "movie") 51 | { 52 | _ratingControlOptions.RatingControlValuesMovie.ForEach(a => ratingControlValues.Add(a)); 53 | ratingControlInitialValue = _ratingControlOptions.RatingControlInitialValueMovie; 54 | } 55 | 56 | List ratings = ratingControlValues 57 | .Select(myValue => new SelectListItem 58 | { 59 | Value = myValue, 60 | Text = myValue, 61 | Selected = myValue.Equals(ratingControlInitialValue) 62 | }).ToList(); 63 | 64 | RingControlModel ringControlModel = new RingControlModel 65 | { 66 | SelectedListItems = ratings, 67 | RatingControlType = ratingControlType, 68 | RatingControlValue = ratingControlInitialValue, 69 | RatingControlIdValue = ratingControlIdValue 70 | }; 71 | 72 | return View(ringControlModel); 73 | } 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /WebApp/Pages/Contact.cshtml: -------------------------------------------------------------------------------- 1 | @page 2 | @model ContactModel 3 | @{ 4 | ViewData["Title"] = "Contact"; 5 | } 6 |

@ViewData["Title"]

7 |

@Model.Message

8 | 9 |
10 | One Microsoft Way
11 | Redmond, WA 98052-6399
12 | P: 13 | 425.555.0100 14 |
15 | 16 |
17 | Support: Support@example.com
18 | Marketing: Marketing@example.com 19 |
20 | -------------------------------------------------------------------------------- /WebApp/Pages/Contact.cshtml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using Microsoft.AspNetCore.Mvc.RazorPages; 6 | 7 | namespace WebApp.Pages 8 | { 9 | public class ContactModel : PageModel 10 | { 11 | public string Message { get; set; } 12 | 13 | public void OnGet() 14 | { 15 | Message = "Your contact page."; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /WebApp/Pages/Error.cshtml: -------------------------------------------------------------------------------- 1 | @page 2 | @model ErrorModel 3 | @{ 4 | ViewData["Title"] = "Error"; 5 | } 6 | 7 |

Error.

8 |

An error occurred while processing your request.

9 | 10 | @if (Model.ShowRequestId) 11 | { 12 |

13 | Request ID: @Model.RequestId 14 |

15 | } 16 | 17 |

Development Mode

18 |

19 | Swapping to Development environment will display more detailed information about the error that occurred. 20 |

21 |

22 | 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. 23 |

24 | -------------------------------------------------------------------------------- /WebApp/Pages/Error.cshtml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | using Microsoft.AspNetCore.Mvc; 7 | using Microsoft.AspNetCore.Mvc.RazorPages; 8 | 9 | namespace WebApp.Pages 10 | { 11 | public class ErrorModel : PageModel 12 | { 13 | public string RequestId { get; set; } 14 | 15 | public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); 16 | 17 | [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] 18 | public void OnGet() 19 | { 20 | RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WebApp/Pages/Index.cshtml: -------------------------------------------------------------------------------- 1 | @page 2 | @model IndexModel 3 | @{ 4 | ViewData["Title"] = "Home page"; 5 | } 6 | 7 | 57 | 58 | 97 | -------------------------------------------------------------------------------- /WebApp/Pages/Index.cshtml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using Microsoft.AspNetCore.Mvc; 6 | using Microsoft.AspNetCore.Mvc.RazorPages; 7 | 8 | namespace WebApp.Pages 9 | { 10 | public class IndexModel : PageModel 11 | { 12 | public void OnGet() 13 | { 14 | 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /WebApp/Pages/Privacy.cshtml: -------------------------------------------------------------------------------- 1 | @page 2 | @model PrivacyModel 3 | @{ 4 | ViewData["Title"] = "Privacy Policy"; 5 | } 6 |

@ViewData["Title"]

7 | 8 |

Use this page to detail your site's privacy policy.

-------------------------------------------------------------------------------- /WebApp/Pages/Privacy.cshtml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using Microsoft.AspNetCore.Mvc; 6 | using Microsoft.AspNetCore.Mvc.RazorPages; 7 | 8 | namespace WebApp.Pages 9 | { 10 | public class PrivacyModel : PageModel 11 | { 12 | public void OnGet() 13 | { 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /WebApp/Pages/RatingDemoComplete.cshtml: -------------------------------------------------------------------------------- 1 | @page 2 | @{ 3 | Layout = null; 4 | } 5 | @addTagHelper *, WebApp 6 | 7 | 8 | 9 | 10 | Rating Demo Complete 11 | 12 | 13 | 14 | jQuery Bar Rating - Minimal, light-weight jQuery ratings 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | Rating Demo Complete 52 | 53 | 54 | 55 | 56 |
57 | 58 |
59 |
60 | 61 |
62 |
1/10 Rating
63 |
64 | 66 | 67 |
68 |
69 | 70 |
71 |
72 |
Movie Rating
73 |
74 | 76 | 77 |
78 |
79 |
80 | 81 |
82 |
83 |
Pill Rating
84 |
85 | 87 | 88 |
89 |
90 |
91 | 92 |
93 |
94 |
95 | 96 | 97 | 98 | -------------------------------------------------------------------------------- /WebApp/Pages/RatingDemoComplete.cshtml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using Microsoft.AspNetCore.Mvc; 6 | using Microsoft.AspNetCore.Mvc.RazorPages; 7 | 8 | namespace WebApp.Pages 9 | { 10 | public class RatingDemoCompleteModel : PageModel 11 | { 12 | public void OnGet() 13 | { 14 | 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /WebApp/Pages/RatingDemoInvokeAsync.cshtml: -------------------------------------------------------------------------------- 1 | @page 2 | @model WebApp.Pages.RatingDemoInvokeAsyncModel 3 | @{ 4 | Layout = null; 5 | } 6 | 7 | 8 | 9 | 10 | starsdemo1 11 | 12 | 13 |

RatingDemoInvokeAsync

14 | @await Component.InvokeAsync("RatingControl", 15 | new { 16 | ratingControlType = "1to10" 17 | }) 18 | 19 | 20 | -------------------------------------------------------------------------------- /WebApp/Pages/RatingDemoInvokeAsync.cshtml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using Microsoft.AspNetCore.Mvc; 6 | using Microsoft.AspNetCore.Mvc.RazorPages; 7 | 8 | namespace WebApp.Pages 9 | { 10 | public class RatingDemoInvokeAsyncModel : PageModel 11 | { 12 | public void OnGet() 13 | { 14 | 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /WebApp/Pages/RatingDemoRawHtml.cshtml: -------------------------------------------------------------------------------- 1 | @page 2 | @model WebApp.Pages.RatingDemoRawHtmlModel 3 | @{ 4 | Layout = null; 5 | } 6 | 7 | 8 | 9 | Stars 10 | 11 | 12 | 13 | jQuery Bar Rating - Minimal, light-weight jQuery ratings 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | starsdemo 52 | 53 | 54 | 55 | 56 |
57 | 58 |
59 |
60 |
61 |
62 |
1/10 Rating
63 |
64 | 76 |
77 |
78 |
79 |
80 |
81 |
Movie Rating
82 |
83 | 89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
Square Rating
97 |
98 | 106 |
107 |
108 |
109 |
110 |
111 |
Pill Rating
112 |
113 | 121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
Reversed Rating
129 |
130 | 137 |
138 |
139 |
140 |
141 |
142 |
Horizontal Rating
143 |
144 | 156 |
157 |
158 |
159 |
160 | 161 |
162 |
163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | -------------------------------------------------------------------------------- /WebApp/Pages/RatingDemoRawHtml.cshtml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using Microsoft.AspNetCore.Mvc; 6 | using Microsoft.AspNetCore.Mvc.RazorPages; 7 | 8 | namespace WebApp.Pages 9 | { 10 | public class RatingDemoRawHtmlModel : PageModel 11 | { 12 | public void OnGet() 13 | { 14 | 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /WebApp/Pages/RatingDemoTagHelper.cshtml: -------------------------------------------------------------------------------- 1 | @page 2 | @model WebApp.Pages.RatingDemoTagHelperModel 3 | @{ 4 | Layout = null; 5 | } 6 | @addTagHelper *, WebApp 7 | 8 | 9 | 10 | 11 | 12 | RatingDemoTagHelper 13 | 14 | 15 |

RatingDemoTagHelper

16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /WebApp/Pages/RatingDemoTagHelper.cshtml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using Microsoft.AspNetCore.Mvc; 6 | using Microsoft.AspNetCore.Mvc.RazorPages; 7 | 8 | namespace WebApp.Pages 9 | { 10 | public class RatingDemoTagHelperModel : PageModel 11 | { 12 | public void OnGet() 13 | { 14 | 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /WebApp/Pages/Shared/_CookieConsentPartial.cshtml: -------------------------------------------------------------------------------- 1 | @using Microsoft.AspNetCore.Http.Features 2 | 3 | @{ 4 | var consentFeature = Context.Features.Get(); 5 | var showBanner = !consentFeature?.CanTrack ?? false; 6 | var cookieString = consentFeature?.CreateConsentCookie(); 7 | } 8 | 9 | @if (showBanner) 10 | { 11 | 33 | 41 | } -------------------------------------------------------------------------------- /WebApp/Pages/Shared/_Layout.cshtml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | @ViewData["Title"] - WebApp 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 17 | 18 | 19 | 20 | 21 | 41 | 42 | 43 | 44 |
45 | @RenderBody() 46 |
47 |
48 |

© 2018 - WebApp

49 |
50 |
51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 65 | 71 | 72 | 73 | 74 | @RenderSection("Scripts", required: false) 75 | 76 | 77 | -------------------------------------------------------------------------------- /WebApp/Pages/Shared/_ValidationScriptsPartial.cshtml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 12 | 18 | 19 | -------------------------------------------------------------------------------- /WebApp/Pages/_ViewImports.cshtml: -------------------------------------------------------------------------------- 1 | @using WebApp 2 | @namespace WebApp.Pages 3 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 4 | -------------------------------------------------------------------------------- /WebApp/Pages/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "_Layout"; 3 | } 4 | -------------------------------------------------------------------------------- /WebApp/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | using Microsoft.AspNetCore; 7 | using Microsoft.AspNetCore.Hosting; 8 | using Microsoft.Extensions.Configuration; 9 | using Microsoft.Extensions.Logging; 10 | 11 | namespace WebApp 12 | { 13 | public class Program 14 | { 15 | public static void Main(string[] args) 16 | { 17 | CreateWebHostBuilder(args).Build().Run(); 18 | } 19 | 20 | public static IWebHostBuilder CreateWebHostBuilder(string[] args) => 21 | WebHost.CreateDefaultBuilder(args) 22 | .UseStartup(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /WebApp/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "iisSettings": { 3 | "windowsAuthentication": false, 4 | "anonymousAuthentication": true, 5 | "iisExpress": { 6 | "applicationUrl": "http://localhost:12956", 7 | "sslPort": 0 8 | } 9 | }, 10 | "profiles": { 11 | "IIS Express": { 12 | "commandName": "IISExpress", 13 | "launchBrowser": true, 14 | "launchUrl": "starsdemoviewcomponent", 15 | "environmentVariables": { 16 | "ASPNETCORE_ENVIRONMENT": "Development" 17 | } 18 | }, 19 | "WebApp": { 20 | "commandName": "Project", 21 | "launchBrowser": true, 22 | "environmentVariables": { 23 | "ASPNETCORE_ENVIRONMENT": "Development" 24 | }, 25 | "applicationUrl": "http://localhost:5000" 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /WebApp/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.AspNetCore.Http; 8 | using Microsoft.AspNetCore.Mvc; 9 | using Microsoft.Extensions.Configuration; 10 | using Microsoft.Extensions.DependencyInjection; 11 | using WebApp.Models; 12 | 13 | namespace WebApp 14 | { 15 | public class Startup 16 | { 17 | public Startup(IConfiguration configuration) 18 | { 19 | Configuration = configuration; 20 | } 21 | 22 | public IConfiguration Configuration { get; } 23 | 24 | // This method gets called by the runtime. Use this method to add services to the container. 25 | public void ConfigureServices(IServiceCollection services) 26 | { 27 | services.Configure(options => 28 | { 29 | // This lambda determines whether user consent for non-essential cookies is needed for a given request. 30 | options.CheckConsentNeeded = context => true; 31 | options.MinimumSameSitePolicy = SameSiteMode.None; 32 | }); 33 | 34 | services.Configure(Configuration); 35 | 36 | services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); 37 | } 38 | 39 | // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 40 | public void Configure(IApplicationBuilder app, IHostingEnvironment env) 41 | { 42 | if (env.IsDevelopment()) 43 | { 44 | app.UseDeveloperExceptionPage(); 45 | } 46 | else 47 | { 48 | app.UseExceptionHandler("/Error"); 49 | } 50 | 51 | 52 | app.UseStaticFiles(); 53 | app.UseCookiePolicy(); 54 | 55 | app.UseMvc(); 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /WebApp/WebApp.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netcoreapp2.1 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | $(IncludeRazorContentInPack) 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /WebApp/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Debug", 5 | "System": "Information", 6 | "Microsoft": "Information" 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /WebApp/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "RatingControlType": "1to10", // Default Type 3 | "RatingControlInitialValue1to10": "6", 4 | "RatingControlInitialValueMovie": "Good", 5 | "RatingControlInitialValuePill": "C", 6 | "Logging": { 7 | "LogLevel": { 8 | "Default": "Warning" 9 | } 10 | }, 11 | "AllowedHosts": "*" 12 | } 13 | -------------------------------------------------------------------------------- /WebApp/wwwroot/css/FontFace.css: -------------------------------------------------------------------------------- 1 |  2 | @font-face { 3 | font-family: 'Glyphicons Halflings'; 4 | src: url('https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/fonts/glyphicons-halflings-regular.eot'); 5 | src: url('https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/fonts/glyphicons-halflings-regular.woff') format('woff'), url('https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg'); 6 | } 7 | 8 | 9 | -------------------------------------------------------------------------------- /WebApp/wwwroot/css/examples.css: -------------------------------------------------------------------------------- 1 | /* Center ratings in container */ 2 | .box-example-1to10 .br-wrapper { 3 | width: 210px; 4 | position: absolute; 5 | margin: 0px 0 0 -105px; 6 | left: 50%; 7 | } 8 | .box-example-movie .br-wrapper { 9 | width: 250px; 10 | position: absolute; 11 | margin: 0px 0 0 -125px; 12 | left: 50%; 13 | } 14 | .box-example-square .br-wrapper { 15 | width: 190px; 16 | position: absolute; 17 | margin: 0px 0 0 -95px; 18 | left: 50%; 19 | } 20 | .box-example-pill .br-wrapper { 21 | width: 232px; 22 | position: absolute; 23 | margin: 0px 0 0 -116px; 24 | left: 50%; 25 | } 26 | .box-example-reversed .br-wrapper { 27 | padding-top: 1.3em; 28 | width: 356px; 29 | position: absolute; 30 | margin: 0px 0 0 -178px; 31 | left: 50%; 32 | } 33 | .box-example-horizontal .br-wrapper { 34 | width: 120px; 35 | position: absolute; 36 | margin: 0px 0 0 -60px; 37 | left: 50%; 38 | } 39 | /* Display star ratings */ 40 | .star-ratings h1 { 41 | font-size: 1.5em; 42 | line-height: 2; 43 | margin-top: 3em; 44 | color: #757575; 45 | } 46 | .star-ratings p { 47 | margin-bottom: 3em; 48 | line-height: 1.2; 49 | } 50 | .star-ratings h1, 51 | .star-ratings p { 52 | text-align: center; 53 | } 54 | .star-ratings .stars { 55 | width: 120px; 56 | text-align: center; 57 | margin: auto; 58 | padding: 0 95px; 59 | } 60 | .star-ratings .stars .title { 61 | font-size: 14px; 62 | color: #cccccc; 63 | line-height: 3; 64 | } 65 | .star-ratings .stars select { 66 | width: 120px; 67 | font-size: 16px; 68 | } 69 | .star-ratings .stars-example-fontawesome, 70 | .star-ratings .stars-example-css, 71 | .star-ratings .stars-example-bootstrap { 72 | float: left; 73 | } 74 | .star-ratings .stars-example-fontawesome-o { 75 | width: 200px; 76 | } 77 | .star-ratings .stars-example-fontawesome-o select { 78 | width: 200px; 79 | } 80 | .start-ratings-main { 81 | margin-bottom: 3em; 82 | } 83 | /* Boxes */ 84 | .box { 85 | width: 100%; 86 | float: left; 87 | margin: 1em 0; 88 | } 89 | .box .box-header { 90 | text-align: center; 91 | font-weight: 400; 92 | padding: .5em 0; 93 | } 94 | .box .box-body { 95 | padding-top: 2em; 96 | height: 85px; 97 | /* rating widgets will be absolutely centered relative to box body */ 98 | position: relative; 99 | } 100 | .box select { 101 | width: 120px; 102 | margin: 10px auto 0 auto; 103 | display: block; 104 | font-size: 16px; 105 | } 106 | .box-large .box-body { 107 | padding-top: 2em; 108 | height: 120px; 109 | } 110 | .box-orange .box-header { 111 | background-color: #edb867; 112 | color: white; 113 | } 114 | .box-orange .box-body { 115 | background-color: white; 116 | border: 2px solid #f5d8ab; 117 | border-top: 0; 118 | } 119 | .box-green .box-header { 120 | background-color: #50e3c2; 121 | color: white; 122 | } 123 | .box-green .box-body { 124 | background-color: white; 125 | border: 2px solid #92eed9; 126 | border-top: 0; 127 | } 128 | .box-blue .box-header { 129 | background-color: #4278f5; 130 | color: white; 131 | } 132 | .box-blue .box-body { 133 | background-color: white; 134 | border: 2px solid #8bacf9; 135 | border-top: 0; 136 | } 137 | @media print { 138 | .star-ratings h1 { 139 | color: black; 140 | } 141 | .star-ratings .stars .title { 142 | color: black; 143 | } 144 | .box-orange .box-header, 145 | .box-green .box-header, 146 | .box-blue .box-header { 147 | background-color: transparent; 148 | color: black; 149 | } 150 | .box-orange .box-body, 151 | .box-green .box-body, 152 | .box-blue .box-body { 153 | background-color: transparent; 154 | border: none; 155 | } 156 | } 157 | -------------------------------------------------------------------------------- /WebApp/wwwroot/css/main.css: -------------------------------------------------------------------------------- 1 | /*! HTML5 Boilerplate v5.0 | MIT License | http://h5bp.com/ */ 2 | html { 3 | color: #222; 4 | font-size: 1em; 5 | line-height: 1.4; 6 | } 7 | ::-moz-selection { 8 | background: #b3d4fc; 9 | text-shadow: none; 10 | } 11 | ::selection { 12 | background: #b3d4fc; 13 | text-shadow: none; 14 | } 15 | hr { 16 | display: block; 17 | height: 1px; 18 | border: 0; 19 | border-top: 1px solid #ccc; 20 | margin: 1em 0; 21 | padding: 0; 22 | } 23 | audio, 24 | canvas, 25 | iframe, 26 | img, 27 | svg, 28 | video { 29 | vertical-align: middle; 30 | } 31 | fieldset { 32 | border: 0; 33 | margin: 0; 34 | padding: 0; 35 | } 36 | textarea { 37 | resize: vertical; 38 | } 39 | b, 40 | strong { 41 | font-weight: 400; 42 | } 43 | .browserupgrade { 44 | margin: 0; 45 | background: #ccc; 46 | color: #000; 47 | padding: 1em 2em; 48 | text-align: center; 49 | } 50 | .browserupgrade a { 51 | color: #000; 52 | text-decoration: underline; 53 | } 54 | .browserupgrade a:hover { 55 | color: #000; 56 | text-decoration: none; 57 | } 58 | /* Dead Simple Grid (c) 2012 Vladimir Agafonkin */ 59 | .col { 60 | padding: 0 1em; 61 | } 62 | .row .row { 63 | margin: 0 -1em; 64 | } 65 | .row:before, 66 | .row:after { 67 | content: ""; 68 | display: table; 69 | } 70 | .row:after { 71 | clear: both; 72 | } 73 | .col { 74 | float: left; 75 | width: 100%; 76 | -webkit-box-sizing: border-box; 77 | -moz-box-sizing: border-box; 78 | box-sizing: border-box; 79 | } 80 | /* ========================================================================== 81 | Author's custom styles 82 | ========================================================================== */ 83 | body { 84 | font-family: "Lato", sans-serif; 85 | color: #757575; 86 | font-weight: 300; 87 | font-size: 1.25em; 88 | /* 20px */ 89 | line-height: 1.6; 90 | } 91 | h1, 92 | h2, 93 | h3 { 94 | font-weight: 400; 95 | color: #2d2d2d; 96 | } 97 | h1 { 98 | font-size: 2.8em; 99 | /* 56px */ 100 | margin: 0; 101 | } 102 | a { 103 | color: #50e3c2; 104 | text-decoration: none; 105 | font-weight: 400; 106 | } 107 | a:hover, 108 | a:focus { 109 | color: #1cb18f; 110 | text-decoration: none; 111 | } 112 | p { 113 | margin: 0 0 1em 0; 114 | } 115 | .warning { 116 | color: red; 117 | } 118 | .github { 119 | background-image: url("../img/github.png"); 120 | position: fixed; 121 | right: 25px; 122 | top: 25px; 123 | width: 50px; 124 | height: 50px; 125 | display: block; 126 | z-index: 1; 127 | opacity: 0.3; 128 | -webkit-transition: opacity .2s; 129 | transition: opacity .2s; 130 | } 131 | @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) { 132 | .github { 133 | background-image: url("../img/github@2x.png"); 134 | background-size: 50px 50px; 135 | } 136 | } 137 | .github:hover { 138 | opacity: 1; 139 | } 140 | .antennaio { 141 | background-image: url("../img/antenna.png"); 142 | background-repeat: no-repeat; 143 | color: #cecece; 144 | width: 280px; 145 | height: 60px; 146 | display: block; 147 | margin: auto; 148 | font-weight: 400; 149 | font-size: 0.6em; 150 | /* 12px */ 151 | line-height: 5.5; 152 | letter-spacing: 2px; 153 | margin-bottom: 7em; 154 | -webkit-transition: color .2s; 155 | transition: color .2s; 156 | } 157 | @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) { 158 | .antennaio { 159 | background-image: url("../img/antenna@2x.png"); 160 | background-size: 60px 60px; 161 | } 162 | } 163 | .antennaio:hover { 164 | color: #757575; 165 | } 166 | .antennaio span { 167 | padding: 0 0 0 70px; 168 | } 169 | .bars { 170 | background-image: url("../img/bars.png"); 171 | width: 80px; 172 | height: 80px; 173 | display: block; 174 | margin: auto; 175 | } 176 | @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) { 177 | .bars { 178 | background-image: url("../img/bars@2x.png"); 179 | background-size: 80px 80px; 180 | } 181 | } 182 | .section { 183 | padding: 2em 0; 184 | } 185 | .section-intro { 186 | text-align: center; 187 | margin: 3em 0 4em 0; 188 | max-height: 9999px; 189 | /* no font boosting please */ 190 | } 191 | .section-intro h1 { 192 | line-height: 2.4; 193 | } 194 | .section-intro p { 195 | max-width: 560px; 196 | margin: auto; 197 | } 198 | .section-intro p.tagline { 199 | font-size: 0.8em; 200 | /* 16px */ 201 | color: #a8a8a8; 202 | margin-bottom: 3em; 203 | } 204 | .section-examples { 205 | position: relative; 206 | background: #f8f8f8; 207 | } 208 | .examples { 209 | margin: auto; 210 | width: 980px; 211 | padding: 3em 0; 212 | } 213 | .examples .col { 214 | width: 50%; 215 | } 216 | .examples .col-fullwidth { 217 | width: 100%; 218 | } 219 | .section-docs { 220 | margin: 3em 0; 221 | } 222 | .docs { 223 | width: 800px; 224 | margin: auto; 225 | max-height: 9999px; 226 | /* no font boosting please */ 227 | } 228 | .docs header { 229 | text-align: center; 230 | padding: 1em 0; 231 | letter-spacing: 3px; 232 | text-transform: uppercase; 233 | font-weight: 400; 234 | color: white; 235 | width: 100%; 236 | font-size: .9em; 237 | } 238 | .docs .how-to-use header, 239 | .docs .callbacks header, 240 | .docs .download header { 241 | background: #4278f5; 242 | } 243 | .docs .how-to-use strong, 244 | .docs .callbacks strong, 245 | .docs .download strong { 246 | color: #4278f5; 247 | } 248 | .docs .how-to-use a, 249 | .docs .callbacks a, 250 | .docs .download a { 251 | color: #4278f5; 252 | } 253 | .docs .how-to-use a:hover, 254 | .docs .callbacks a:hover, 255 | .docs .download a:hover { 256 | color: #0b43c6; 257 | } 258 | .docs .how-to-use pre, 259 | .docs .callbacks pre, 260 | .docs .download pre { 261 | background: white; 262 | border-left: 2px solid #4278f5; 263 | padding: 0 2em; 264 | } 265 | .docs .how-to-use code, 266 | .docs .callbacks code, 267 | .docs .download code { 268 | font-family: "Source Code Pro", sans-serif; 269 | font-size: 0.9em; 270 | /* 18px */ 271 | color: #4278f5; 272 | } 273 | .docs .configuration header, 274 | .docs .faq header { 275 | background: #50e3c2; 276 | } 277 | .docs .configuration strong, 278 | .docs .faq strong { 279 | color: #50e3c2; 280 | } 281 | .docs .configuration a, 282 | .docs .faq a { 283 | color: #50e3c2; 284 | } 285 | .docs .configuration a:hover, 286 | .docs .faq a:hover { 287 | color: #1cb18f; 288 | } 289 | .docs .configuration pre, 290 | .docs .faq pre { 291 | background: white; 292 | border-left: 2px solid #50e3c2; 293 | padding: 0 2em; 294 | } 295 | .docs .configuration code, 296 | .docs .faq code { 297 | font-family: "Source Code Pro", sans-serif; 298 | font-size: 0.9em; 299 | /* 18px */ 300 | color: #50e3c2; 301 | } 302 | .docs .license header, 303 | .docs .methods header { 304 | background: #edb867; 305 | } 306 | .docs .license strong, 307 | .docs .methods strong { 308 | color: #edb867; 309 | } 310 | .docs .license a, 311 | .docs .methods a { 312 | color: #edb867; 313 | } 314 | .docs .license a:hover, 315 | .docs .methods a:hover { 316 | color: #d58b19; 317 | } 318 | .docs .license pre, 319 | .docs .methods pre { 320 | background: white; 321 | border-left: 2px solid #edb867; 322 | padding: 0 2em; 323 | } 324 | .docs .license code, 325 | .docs .methods code { 326 | font-family: "Source Code Pro", sans-serif; 327 | font-size: 0.9em; 328 | /* 18px */ 329 | color: #edb867; 330 | } 331 | .docs .instructions { 332 | padding: 2em 3em; 333 | background: #f8f8f8; 334 | } 335 | .docs .faq p { 336 | margin: 0 0 .5em 0; 337 | } 338 | .docs .faq .question { 339 | margin-bottom: 2em; 340 | } 341 | .docs .faq .question:last-child { 342 | margin-bottom: 0; 343 | } 344 | .controls { 345 | position: absolute; 346 | top: -23px; 347 | left: 50%; 348 | margin-left: -190px; 349 | } 350 | .controls a { 351 | display: block; 352 | width: 150px; 353 | background-color: #50e3c2; 354 | color: white; 355 | float: left; 356 | padding: .3em 1em .5em 1em; 357 | text-decoration: none; 358 | text-align: center; 359 | font-weight: 400; 360 | -webkit-transition: background-color 0.2s; 361 | transition: background-color 0.2s; 362 | } 363 | .controls a:hover { 364 | background-color: #3adfba; 365 | } 366 | .controls a:focus { 367 | color: #d4f8f0; 368 | background-color: #199b7e; 369 | } 370 | .controls a.rating-enable { 371 | -webkit-border-top-left-radius: 999px; 372 | -webkit-border-bottom-left-radius: 999px; 373 | -moz-border-radius-topleft: 999px; 374 | -moz-border-radius-bottomleft: 999px; 375 | border-top-left-radius: 999px; 376 | border-bottom-left-radius: 999px; 377 | } 378 | .controls a.rating-disable { 379 | -webkit-border-top-right-radius: 999px; 380 | -webkit-border-bottom-right-radius: 999px; 381 | -moz-border-radius-topright: 999px; 382 | -moz-border-radius-bottomright: 999px; 383 | border-top-right-radius: 999px; 384 | border-bottom-right-radius: 999px; 385 | } 386 | .controls a:last-child { 387 | border-left: 0; 388 | } 389 | .controls a.deactivated { 390 | background: #20c7a1; 391 | color: white; 392 | } 393 | /* ========================================================================== 394 | Media Queries 395 | ========================================================================== */ 396 | @media print { 397 | body { 398 | color: black; 399 | } 400 | h1, 401 | h2, 402 | h3 { 403 | color: black; 404 | } 405 | .controls, 406 | .github, 407 | .antennaio { 408 | display: none; 409 | } 410 | .section-intro { 411 | margin: 1em 0 2em 0; 412 | } 413 | .section-intro p.tagline { 414 | color: black; 415 | } 416 | .section-examples { 417 | background: transparent; 418 | } 419 | .section-examples .examples { 420 | padding: 1em 0; 421 | } 422 | .section-docs { 423 | margin: 1em 0; 424 | } 425 | .docs .how-to-use a, 426 | .docs .callbacks a, 427 | .docs .download a, 428 | .docs .configuration a, 429 | .docs .faq a, 430 | .docs .license a, 431 | .docs .methods a { 432 | color: black; 433 | text-decoration: none; 434 | } 435 | .docs .how-to-use a:hover, 436 | .docs .callbacks a:hover, 437 | .docs .download a:hover, 438 | .docs .configuration a:hover, 439 | .docs .faq a:hover, 440 | .docs .license a:hover, 441 | .docs .methods a:hover { 442 | color: black; 443 | } 444 | .docs .how-to-use header, 445 | .docs .callbacks header, 446 | .docs .download header, 447 | .docs .configuration header, 448 | .docs .faq header, 449 | .docs .license header, 450 | .docs .methods header { 451 | background: transparent; 452 | color: black; 453 | } 454 | .docs .how-to-use code, 455 | .docs .callbacks code, 456 | .docs .download code, 457 | .docs .configuration code, 458 | .docs .faq code, 459 | .docs .license code, 460 | .docs .methods code, 461 | .docs .how-to-use strong, 462 | .docs .callbacks strong, 463 | .docs .download strong, 464 | .docs .configuration strong, 465 | .docs .faq strong, 466 | .docs .license strong, 467 | .docs .methods strong { 468 | color: black; 469 | } 470 | .docs .how-to-use pre, 471 | .docs .callbacks pre, 472 | .docs .download pre, 473 | .docs .configuration pre, 474 | .docs .faq pre, 475 | .docs .license pre, 476 | .docs .methods pre { 477 | border: none; 478 | padding: 0; 479 | } 480 | .docs .how-to-use .instructions, 481 | .docs .callbacks .instructions, 482 | .docs .download .instructions, 483 | .docs .configuration .instructions, 484 | .docs .faq .instructions, 485 | .docs .license .instructions, 486 | .docs .methods .instructions { 487 | background: transparent; 488 | } 489 | } 490 | /* ========================================================================== 491 | Helper classes 492 | ========================================================================== */ 493 | .hidden { 494 | display: none !important; 495 | visibility: hidden; 496 | } 497 | .visuallyhidden { 498 | border: 0; 499 | clip: rect(0 0 0 0); 500 | height: 1px; 501 | margin: -1px; 502 | overflow: hidden; 503 | padding: 0; 504 | position: absolute; 505 | width: 1px; 506 | } 507 | .visuallyhidden.focusable:active, 508 | .visuallyhidden.focusable:focus { 509 | clip: auto; 510 | height: auto; 511 | margin: 0; 512 | overflow: visible; 513 | position: static; 514 | width: auto; 515 | } 516 | .invisible { 517 | visibility: hidden; 518 | } 519 | .clearfix:before, 520 | .clearfix:after { 521 | content: " "; 522 | display: table; 523 | } 524 | .clearfix:after { 525 | clear: both; 526 | } 527 | .clearfix { 528 | *zoom: 1; 529 | } 530 | /* ========================================================================== 531 | Print styles 532 | ========================================================================== */ 533 | @media print { 534 | *, 535 | *:before, 536 | *:after { 537 | box-shadow: none !important; 538 | text-shadow: none !important; 539 | } 540 | a, 541 | a:visited { 542 | text-decoration: underline; 543 | } 544 | a[href]:after { 545 | content: " (" attr(href) ")"; 546 | } 547 | abbr[title]:after { 548 | content: " (" attr(title) ")"; 549 | } 550 | a[href^="#"]:after, 551 | a[href^="javascript:"]:after { 552 | content: ""; 553 | } 554 | pre, 555 | blockquote { 556 | page-break-inside: avoid; 557 | } 558 | thead { 559 | display: table-header-group; 560 | } 561 | tr, 562 | img { 563 | page-break-inside: avoid; 564 | } 565 | img { 566 | max-width: 100% !important; 567 | } 568 | p, 569 | h2, 570 | h3 { 571 | orphans: 3; 572 | widows: 3; 573 | } 574 | h2, 575 | h3 { 576 | page-break-after: avoid; 577 | } 578 | } 579 | -------------------------------------------------------------------------------- /WebApp/wwwroot/css/normalize.css: -------------------------------------------------------------------------------- 1 | /*! normalize.css v3.0.2 | MIT License | git.io/normalize */ 2 | 3 | /** 4 | * 1. Set default font family to sans-serif. 5 | * 2. Prevent iOS text size adjust after orientation change, without disabling 6 | * user zoom. 7 | */ 8 | 9 | html { 10 | font-family: sans-serif; /* 1 */ 11 | -ms-text-size-adjust: 100%; /* 2 */ 12 | -webkit-text-size-adjust: 100%; /* 2 */ 13 | } 14 | 15 | /** 16 | * Remove default margin. 17 | */ 18 | 19 | body { 20 | margin: 0; 21 | } 22 | 23 | /* HTML5 display definitions 24 | ========================================================================== */ 25 | 26 | /** 27 | * Correct `block` display not defined for any HTML5 element in IE 8/9. 28 | * Correct `block` display not defined for `details` or `summary` in IE 10/11 29 | * and Firefox. 30 | * Correct `block` display not defined for `main` in IE 11. 31 | */ 32 | 33 | article, 34 | aside, 35 | details, 36 | figcaption, 37 | figure, 38 | footer, 39 | header, 40 | hgroup, 41 | main, 42 | menu, 43 | nav, 44 | section, 45 | summary { 46 | display: block; 47 | } 48 | 49 | /** 50 | * 1. Correct `inline-block` display not defined in IE 8/9. 51 | * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. 52 | */ 53 | 54 | audio, 55 | canvas, 56 | progress, 57 | video { 58 | display: inline-block; /* 1 */ 59 | vertical-align: baseline; /* 2 */ 60 | } 61 | 62 | /** 63 | * Prevent modern browsers from displaying `audio` without controls. 64 | * Remove excess height in iOS 5 devices. 65 | */ 66 | 67 | audio:not([controls]) { 68 | display: none; 69 | height: 0; 70 | } 71 | 72 | /** 73 | * Address `[hidden]` styling not present in IE 8/9/10. 74 | * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. 75 | */ 76 | 77 | [hidden], 78 | template { 79 | display: none; 80 | } 81 | 82 | /* Links 83 | ========================================================================== */ 84 | 85 | /** 86 | * Remove the gray background color from active links in IE 10. 87 | */ 88 | 89 | a { 90 | background-color: transparent; 91 | } 92 | 93 | /** 94 | * Improve readability when focused and also mouse hovered in all browsers. 95 | */ 96 | 97 | a:active, 98 | a:hover { 99 | outline: 0; 100 | } 101 | 102 | /* Text-level semantics 103 | ========================================================================== */ 104 | 105 | /** 106 | * Address styling not present in IE 8/9/10/11, Safari, and Chrome. 107 | */ 108 | 109 | abbr[title] { 110 | border-bottom: 1px dotted; 111 | } 112 | 113 | /** 114 | * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. 115 | */ 116 | 117 | b, 118 | strong { 119 | font-weight: bold; 120 | } 121 | 122 | /** 123 | * Address styling not present in Safari and Chrome. 124 | */ 125 | 126 | dfn { 127 | font-style: italic; 128 | } 129 | 130 | /** 131 | * Address variable `h1` font-size and margin within `section` and `article` 132 | * contexts in Firefox 4+, Safari, and Chrome. 133 | */ 134 | 135 | h1 { 136 | font-size: 2em; 137 | margin: 0.67em 0; 138 | } 139 | 140 | /** 141 | * Address styling not present in IE 8/9. 142 | */ 143 | 144 | mark { 145 | background: #ff0; 146 | color: #000; 147 | } 148 | 149 | /** 150 | * Address inconsistent and variable font size in all browsers. 151 | */ 152 | 153 | small { 154 | font-size: 80%; 155 | } 156 | 157 | /** 158 | * Prevent `sub` and `sup` affecting `line-height` in all browsers. 159 | */ 160 | 161 | sub, 162 | sup { 163 | font-size: 75%; 164 | line-height: 0; 165 | position: relative; 166 | vertical-align: baseline; 167 | } 168 | 169 | sup { 170 | top: -0.5em; 171 | } 172 | 173 | sub { 174 | bottom: -0.25em; 175 | } 176 | 177 | /* Embedded content 178 | ========================================================================== */ 179 | 180 | /** 181 | * Remove border when inside `a` element in IE 8/9/10. 182 | */ 183 | 184 | img { 185 | border: 0; 186 | } 187 | 188 | /** 189 | * Correct overflow not hidden in IE 9/10/11. 190 | */ 191 | 192 | svg:not(:root) { 193 | overflow: hidden; 194 | } 195 | 196 | /* Grouping content 197 | ========================================================================== */ 198 | 199 | /** 200 | * Address margin not present in IE 8/9 and Safari. 201 | */ 202 | 203 | figure { 204 | margin: 1em 40px; 205 | } 206 | 207 | /** 208 | * Address differences between Firefox and other browsers. 209 | */ 210 | 211 | hr { 212 | -moz-box-sizing: content-box; 213 | box-sizing: content-box; 214 | height: 0; 215 | } 216 | 217 | /** 218 | * Contain overflow in all browsers. 219 | */ 220 | 221 | pre { 222 | overflow: auto; 223 | } 224 | 225 | /** 226 | * Address odd `em`-unit font size rendering in all browsers. 227 | */ 228 | 229 | code, 230 | kbd, 231 | pre, 232 | samp { 233 | font-family: monospace, monospace; 234 | font-size: 1em; 235 | } 236 | 237 | /* Forms 238 | ========================================================================== */ 239 | 240 | /** 241 | * Known limitation: by default, Chrome and Safari on OS X allow very limited 242 | * styling of `select`, unless a `border` property is set. 243 | */ 244 | 245 | /** 246 | * 1. Correct color not being inherited. 247 | * Known issue: affects color of disabled elements. 248 | * 2. Correct font properties not being inherited. 249 | * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. 250 | */ 251 | 252 | button, 253 | input, 254 | optgroup, 255 | select, 256 | textarea { 257 | color: inherit; /* 1 */ 258 | font: inherit; /* 2 */ 259 | margin: 0; /* 3 */ 260 | } 261 | 262 | /** 263 | * Address `overflow` set to `hidden` in IE 8/9/10/11. 264 | */ 265 | 266 | button { 267 | overflow: visible; 268 | } 269 | 270 | /** 271 | * Address inconsistent `text-transform` inheritance for `button` and `select`. 272 | * All other form control elements do not inherit `text-transform` values. 273 | * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. 274 | * Correct `select` style inheritance in Firefox. 275 | */ 276 | 277 | button, 278 | select { 279 | text-transform: none; 280 | } 281 | 282 | /** 283 | * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` 284 | * and `video` controls. 285 | * 2. Correct inability to style clickable `input` types in iOS. 286 | * 3. Improve usability and consistency of cursor style between image-type 287 | * `input` and others. 288 | */ 289 | 290 | button, 291 | html input[type="button"], /* 1 */ 292 | input[type="reset"], 293 | input[type="submit"] { 294 | -webkit-appearance: button; /* 2 */ 295 | cursor: pointer; /* 3 */ 296 | } 297 | 298 | /** 299 | * Re-set default cursor for disabled elements. 300 | */ 301 | 302 | button[disabled], 303 | html input[disabled] { 304 | cursor: default; 305 | } 306 | 307 | /** 308 | * Remove inner padding and border in Firefox 4+. 309 | */ 310 | 311 | button::-moz-focus-inner, 312 | input::-moz-focus-inner { 313 | border: 0; 314 | padding: 0; 315 | } 316 | 317 | /** 318 | * Address Firefox 4+ setting `line-height` on `input` using `!important` in 319 | * the UA stylesheet. 320 | */ 321 | 322 | input { 323 | line-height: normal; 324 | } 325 | 326 | /** 327 | * It's recommended that you don't attempt to style these elements. 328 | * Firefox's implementation doesn't respect box-sizing, padding, or width. 329 | * 330 | * 1. Address box sizing set to `content-box` in IE 8/9/10. 331 | * 2. Remove excess padding in IE 8/9/10. 332 | */ 333 | 334 | input[type="checkbox"], 335 | input[type="radio"] { 336 | box-sizing: border-box; /* 1 */ 337 | padding: 0; /* 2 */ 338 | } 339 | 340 | /** 341 | * Fix the cursor style for Chrome's increment/decrement buttons. For certain 342 | * `font-size` values of the `input`, it causes the cursor style of the 343 | * decrement button to change from `default` to `text`. 344 | */ 345 | 346 | input[type="number"]::-webkit-inner-spin-button, 347 | input[type="number"]::-webkit-outer-spin-button { 348 | height: auto; 349 | } 350 | 351 | /** 352 | * 1. Address `appearance` set to `searchfield` in Safari and Chrome. 353 | * 2. Address `box-sizing` set to `border-box` in Safari and Chrome 354 | * (include `-moz` to future-proof). 355 | */ 356 | 357 | input[type="search"] { 358 | -webkit-appearance: textfield; /* 1 */ 359 | -moz-box-sizing: content-box; 360 | -webkit-box-sizing: content-box; /* 2 */ 361 | box-sizing: content-box; 362 | } 363 | 364 | /** 365 | * Remove inner padding and search cancel button in Safari and Chrome on OS X. 366 | * Safari (but not Chrome) clips the cancel button when the search input has 367 | * padding (and `textfield` appearance). 368 | */ 369 | 370 | input[type="search"]::-webkit-search-cancel-button, 371 | input[type="search"]::-webkit-search-decoration { 372 | -webkit-appearance: none; 373 | } 374 | 375 | /** 376 | * Define consistent border, margin, and padding. 377 | */ 378 | 379 | fieldset { 380 | border: 1px solid #c0c0c0; 381 | margin: 0 2px; 382 | padding: 0.35em 0.625em 0.75em; 383 | } 384 | 385 | /** 386 | * 1. Correct `color` not being inherited in IE 8/9/10/11. 387 | * 2. Remove padding so people aren't caught out if they zero out fieldsets. 388 | */ 389 | 390 | legend { 391 | border: 0; /* 1 */ 392 | padding: 0; /* 2 */ 393 | } 394 | 395 | /** 396 | * Remove default vertical scrollbar in IE 8/9/10/11. 397 | */ 398 | 399 | textarea { 400 | overflow: auto; 401 | } 402 | 403 | /** 404 | * Don't inherit the `font-weight` (applied by a rule above). 405 | * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. 406 | */ 407 | 408 | optgroup { 409 | font-weight: bold; 410 | } 411 | 412 | /* Tables 413 | ========================================================================== */ 414 | 415 | /** 416 | * Remove most spacing between table cells. 417 | */ 418 | 419 | table { 420 | border-collapse: collapse; 421 | border-spacing: 0; 422 | } 423 | 424 | td, 425 | th { 426 | padding: 0; 427 | } 428 | -------------------------------------------------------------------------------- /WebApp/wwwroot/css/normalize.min.css: -------------------------------------------------------------------------------- 1 | /*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0} -------------------------------------------------------------------------------- /WebApp/wwwroot/css/site.css: -------------------------------------------------------------------------------- 1 | /* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification 2 | for details on configuring this project to bundle and minify static web assets. */ 3 | body { 4 | padding-top: 50px; 5 | padding-bottom: 20px; 6 | } 7 | 8 | /* Wrapping element */ 9 | /* Set some basic padding to keep content from hitting the edges */ 10 | .body-content { 11 | padding-left: 15px; 12 | padding-right: 15px; 13 | } 14 | 15 | /* Carousel */ 16 | .carousel-caption p { 17 | font-size: 20px; 18 | line-height: 1.4; 19 | } 20 | 21 | /* Make .svg files in the carousel display properly in older browsers */ 22 | .carousel-inner .item img[src$=".svg"] { 23 | width: 100%; 24 | } 25 | 26 | /* QR code generator */ 27 | #qrCode { 28 | margin: 15px; 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 | -------------------------------------------------------------------------------- /WebApp/wwwroot/css/site.min.css: -------------------------------------------------------------------------------- 1 | body{padding-top:50px;padding-bottom:20px}.body-content{padding-left:15px;padding-right:15px}.carousel-caption p{font-size:20px;line-height:1.4}.carousel-inner .item img[src$=".svg"]{width:100%}#qrCode{margin:15px}@media screen and (max-width:767px){.carousel-caption{display:none}} -------------------------------------------------------------------------------- /WebApp/wwwroot/css/themes/bars-1to10.css: -------------------------------------------------------------------------------- 1 | .br-theme-bars-1to10 .br-widget { 2 | height: 50px; 3 | white-space: nowrap; 4 | } 5 | .br-theme-bars-1to10 .br-widget a { 6 | display: block; 7 | width: 12px; 8 | padding: 5px 0; 9 | height: 28px; 10 | float: left; 11 | background-color: #fbedd9; 12 | margin: 1px; 13 | text-align: center; 14 | } 15 | .br-theme-bars-1to10 .br-widget a.br-active, 16 | .br-theme-bars-1to10 .br-widget a.br-selected { 17 | background-color: #EDB867; 18 | } 19 | .br-theme-bars-1to10 .br-widget .br-current-rating { 20 | font-size: 20px; 21 | line-height: 2; 22 | float: left; 23 | padding: 0 20px 0 20px; 24 | color: #EDB867; 25 | font-weight: 400; 26 | } 27 | .br-theme-bars-1to10 .br-readonly a { 28 | cursor: default; 29 | } 30 | .br-theme-bars-1to10 .br-readonly a.br-active, 31 | .br-theme-bars-1to10 .br-readonly a.br-selected { 32 | background-color: #f2cd95; 33 | } 34 | .br-theme-bars-1to10 .br-readonly .br-current-rating { 35 | color: #f2cd95; 36 | } 37 | @media print { 38 | .br-theme-bars-1to10 .br-widget a { 39 | border: 1px solid #b3b3b3; 40 | background: white; 41 | height: 38px; 42 | -webkit-box-sizing: border-box; 43 | -moz-box-sizing: border-box; 44 | box-sizing: border-box; 45 | } 46 | .br-theme-bars-1to10 .br-widget a.br-active, 47 | .br-theme-bars-1to10 .br-widget a.br-selected { 48 | border: 1px solid black; 49 | background: white; 50 | } 51 | .br-theme-bars-1to10 .br-widget .br-current-rating { 52 | color: black; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /WebApp/wwwroot/css/themes/bars-horizontal.css: -------------------------------------------------------------------------------- 1 | .br-theme-bars-horizontal .br-widget { 2 | width: 120px; 3 | white-space: nowrap; 4 | } 5 | .br-theme-bars-horizontal .br-widget a { 6 | display: block; 7 | width: 120px; 8 | height: 5px; 9 | background-color: #fbedd9; 10 | margin: 1px; 11 | } 12 | .br-theme-bars-horizontal .br-widget a.br-active, 13 | .br-theme-bars-horizontal .br-widget a.br-selected { 14 | background-color: #EDB867; 15 | } 16 | .br-theme-bars-horizontal .br-widget .br-current-rating { 17 | width: 120px; 18 | font-size: 18px; 19 | font-weight: 600; 20 | line-height: 2; 21 | text-align: center; 22 | color: #EDB867; 23 | } 24 | .br-theme-bars-horizontal .br-readonly a { 25 | cursor: default; 26 | } 27 | .br-theme-bars-horizontal .br-readonly a.br-active, 28 | .br-theme-bars-horizontal .br-readonly a.br-selected { 29 | background-color: #f2cd95; 30 | } 31 | .br-theme-bars-horizontal .br-readonly .br-current-rating { 32 | color: #f2cd95; 33 | } 34 | @media print { 35 | .br-theme-bars-horizontal .br-widget a { 36 | border: 1px solid #b3b3b3; 37 | background: white; 38 | -webkit-box-sizing: border-box; 39 | -moz-box-sizing: border-box; 40 | box-sizing: border-box; 41 | } 42 | .br-theme-bars-horizontal .br-widget a.br-active, 43 | .br-theme-bars-horizontal .br-widget a.br-selected { 44 | border: 1px solid black; 45 | background: white; 46 | } 47 | .br-theme-bars-horizontal .br-widget .br-current-rating { 48 | color: black; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /WebApp/wwwroot/css/themes/bars-movie.css: -------------------------------------------------------------------------------- 1 | .br-theme-bars-movie .br-widget { 2 | height: 10px; 3 | white-space: nowrap; 4 | } 5 | .br-theme-bars-movie .br-widget a { 6 | display: block; 7 | width: 60px; 8 | height: 8px; 9 | float: left; 10 | background-color: #bbcefb; 11 | margin: 1px; 12 | } 13 | .br-theme-bars-movie .br-widget a.br-active, 14 | .br-theme-bars-movie .br-widget a.br-selected { 15 | background-color: #4278F5; 16 | } 17 | .br-theme-bars-movie .br-widget .br-current-rating { 18 | clear: both; 19 | width: 240px; 20 | text-align: center; 21 | font-weight: 600; 22 | display: block; 23 | padding: .5em 0; 24 | color: #4278F5; 25 | font-weight: 400; 26 | } 27 | .br-theme-bars-movie .br-readonly a { 28 | cursor: default; 29 | } 30 | .br-theme-bars-movie .br-readonly a.br-active, 31 | .br-theme-bars-movie .br-readonly a.br-selected { 32 | background-color: #729bf8; 33 | } 34 | .br-theme-bars-movie .br-readonly .br-current-rating { 35 | color: #729bf8; 36 | } 37 | @media print { 38 | .br-theme-bars-movie .br-widget a { 39 | border: 1px solid #b3b3b3; 40 | background: white; 41 | -webkit-box-sizing: border-box; 42 | -moz-box-sizing: border-box; 43 | box-sizing: border-box; 44 | } 45 | .br-theme-bars-movie .br-widget a.br-active, 46 | .br-theme-bars-movie .br-widget a.br-selected { 47 | border: 1px solid black; 48 | background: white; 49 | } 50 | .br-theme-bars-movie .br-widget .br-current-rating { 51 | color: black; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /WebApp/wwwroot/css/themes/bars-pill.css: -------------------------------------------------------------------------------- 1 | .br-theme-bars-pill .br-widget { 2 | white-space: nowrap; 3 | } 4 | .br-theme-bars-pill .br-widget a { 5 | padding: 7px 15px; 6 | background-color: #bef5e8; 7 | color: #50E3C2; 8 | text-decoration: none; 9 | font-size: 13px; 10 | line-height: 3; 11 | text-align: center; 12 | font-weight: 400; 13 | } 14 | .br-theme-bars-pill .br-widget a:first-child { 15 | -webkit-border-top-left-radius: 999px; 16 | -webkit-border-bottom-left-radius: 999px; 17 | -moz-border-radius-topleft: 999px; 18 | -moz-border-radius-bottomleft: 999px; 19 | border-top-left-radius: 999px; 20 | border-bottom-left-radius: 999px; 21 | } 22 | .br-theme-bars-pill .br-widget a:last-child { 23 | -webkit-border-top-right-radius: 999px; 24 | -webkit-border-bottom-right-radius: 999px; 25 | -moz-border-radius-topright: 999px; 26 | -moz-border-radius-bottomright: 999px; 27 | border-top-right-radius: 999px; 28 | border-bottom-right-radius: 999px; 29 | } 30 | .br-theme-bars-pill .br-widget a.br-active, 31 | .br-theme-bars-pill .br-widget a.br-selected { 32 | background-color: #50E3C2; 33 | color: white; 34 | } 35 | .br-theme-bars-pill .br-readonly a { 36 | cursor: default; 37 | } 38 | .br-theme-bars-pill .br-readonly a.br-active, 39 | .br-theme-bars-pill .br-readonly a.br-selected { 40 | background-color: #7cead1; 41 | } 42 | @media print { 43 | .br-theme-bars-pill .br-widget a { 44 | border: 1px solid #b3b3b3; 45 | border-left: none; 46 | background: white; 47 | -webkit-box-sizing: border-box; 48 | -moz-box-sizing: border-box; 49 | box-sizing: border-box; 50 | } 51 | .br-theme-bars-pill .br-widget a.br-active, 52 | .br-theme-bars-pill .br-widget a.br-selected { 53 | border: 1px solid black; 54 | border-left: none; 55 | background: white; 56 | color: black; 57 | } 58 | .br-theme-bars-pill .br-widget a:first-child { 59 | border-left: 1px solid black; 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /WebApp/wwwroot/css/themes/bars-reversed.css: -------------------------------------------------------------------------------- 1 | .br-theme-bars-reversed .br-widget { 2 | height: 25px; 3 | white-space: nowrap; 4 | } 5 | .br-theme-bars-reversed .br-widget a { 6 | display: block; 7 | width: 22px; 8 | height: 22px; 9 | float: left; 10 | background-color: #bef5e8; 11 | margin: 1px; 12 | font-size: 15px; 13 | font-weight: 400; 14 | line-height: 1.4; 15 | color: #50E3C2; 16 | text-align: center; 17 | } 18 | .br-theme-bars-reversed .br-widget a.br-active, 19 | .br-theme-bars-reversed .br-widget a.br-selected { 20 | background-color: #50E3C2; 21 | color: white; 22 | } 23 | .br-theme-bars-reversed .br-widget .br-current-rating { 24 | line-height: 1.3; 25 | float: left; 26 | padding: 0 20px 0 20px; 27 | color: #50E3C2; 28 | font-size: 17px; 29 | font-weight: 400; 30 | } 31 | .br-theme-bars-reversed .br-readonly a { 32 | cursor: default; 33 | } 34 | .br-theme-bars-reversed .br-readonly a.br-active, 35 | .br-theme-bars-reversed .br-readonly a.br-selected { 36 | background-color: #7cead1; 37 | } 38 | .br-theme-bars-reversed .br-readonly .br-current-rating { 39 | color: #7cead1; 40 | } 41 | @media print { 42 | .br-theme-bars-reversed .br-widget a { 43 | border: 1px solid #b3b3b3; 44 | background: white; 45 | -webkit-box-sizing: border-box; 46 | -moz-box-sizing: border-box; 47 | box-sizing: border-box; 48 | } 49 | .br-theme-bars-reversed .br-widget a.br-active, 50 | .br-theme-bars-reversed .br-widget a.br-selected { 51 | border: 1px solid black; 52 | background: white; 53 | } 54 | .br-theme-bars-reversed .br-widget .br-current-rating { 55 | color: black; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /WebApp/wwwroot/css/themes/bars-square.css: -------------------------------------------------------------------------------- 1 | .br-theme-bars-square .br-widget { 2 | height: 15px; 3 | white-space: nowrap; 4 | } 5 | .br-theme-bars-square .br-widget a { 6 | display: block; 7 | width: 30px; 8 | height: 30px; 9 | float: left; 10 | border: 2px solid #bbcefb; 11 | background-color: white; 12 | margin: 2px; 13 | text-decoration: none; 14 | font-size: 14px; 15 | font-weight: 400; 16 | line-height: 2; 17 | text-align: center; 18 | color: #bbcefb; 19 | font-weight: 600; 20 | } 21 | .br-theme-bars-square .br-widget a.br-active, 22 | .br-theme-bars-square .br-widget a.br-selected { 23 | border: 2px solid #4278F5; 24 | color: #4278F5; 25 | } 26 | .br-theme-bars-square .br-widget .br-current-rating { 27 | clear: both; 28 | width: 330px; 29 | text-align: center; 30 | font-weight: 600; 31 | display: block; 32 | padding: .5em 0; 33 | color: #646464; 34 | } 35 | .br-theme-bars-square .br-readonly a { 36 | cursor: default; 37 | } 38 | .br-theme-bars-square .br-readonly a.br-active, 39 | .br-theme-bars-square .br-readonly a.br-selected { 40 | border: 2px solid #729bf8; 41 | color: #729bf8; 42 | } 43 | @media print { 44 | .br-theme-bars-square .br-widget a { 45 | border: 2px solid #b3b3b3; 46 | color: #b3b3b3; 47 | } 48 | .br-theme-bars-square .br-widget a.br-active, 49 | .br-theme-bars-square .br-widget a.br-selected { 50 | border: 2px solid black; 51 | color: black; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /WebApp/wwwroot/css/themes/bootstrap-stars.css: -------------------------------------------------------------------------------- 1 | .br-theme-bootstrap-stars .br-widget { 2 | height: 28px; 3 | white-space: nowrap; 4 | } 5 | .br-theme-bootstrap-stars .br-widget a { 6 | font: normal normal normal 18px/1 'Glyphicons Halflings'; 7 | text-rendering: auto; 8 | -webkit-font-smoothing: antialiased; 9 | text-decoration: none; 10 | margin-right: 2px; 11 | } 12 | .br-theme-bootstrap-stars .br-widget a:after { 13 | content: '\e006'; 14 | color: #d2d2d2; 15 | } 16 | .br-theme-bootstrap-stars .br-widget a.br-active:after { 17 | color: #EDB867; 18 | } 19 | .br-theme-bootstrap-stars .br-widget a.br-selected:after { 20 | color: #EDB867; 21 | } 22 | .br-theme-bootstrap-stars .br-widget .br-current-rating { 23 | display: none; 24 | } 25 | .br-theme-bootstrap-stars .br-readonly a { 26 | cursor: default; 27 | } 28 | @media print { 29 | .br-theme-bootstrap-stars .br-widget a:after { 30 | content: '\e007'; 31 | color: black; 32 | } 33 | .br-theme-bootstrap-stars .br-widget a.br-active:after, 34 | .br-theme-bootstrap-stars .br-widget a.br-selected:after { 35 | content: '\e006'; 36 | color: black; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /WebApp/wwwroot/css/themes/css-stars.css: -------------------------------------------------------------------------------- 1 | .br-theme-css-stars .br-widget { 2 | height: 28px; 3 | white-space: nowrap; 4 | } 5 | .br-theme-css-stars .br-widget a { 6 | text-decoration: none; 7 | height: 18px; 8 | width: 18px; 9 | float: left; 10 | font-size: 23px; 11 | margin-right: 5px; 12 | } 13 | .br-theme-css-stars .br-widget a:after { 14 | content: "\2605"; 15 | color: #d2d2d2; 16 | } 17 | .br-theme-css-stars .br-widget a.br-active:after { 18 | color: #EDB867; 19 | } 20 | .br-theme-css-stars .br-widget a.br-selected:after { 21 | color: #EDB867; 22 | } 23 | .br-theme-css-stars .br-widget .br-current-rating { 24 | display: none; 25 | } 26 | .br-theme-css-stars .br-readonly a { 27 | cursor: default; 28 | } 29 | @media print { 30 | .br-theme-css-stars .br-widget a:after { 31 | content: "\2606"; 32 | color: black; 33 | } 34 | .br-theme-css-stars .br-widget a.br-active:after, 35 | .br-theme-css-stars .br-widget a.br-selected:after { 36 | content: "\2605"; 37 | color: black; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /WebApp/wwwroot/css/themes/fontawesome-stars-o.css: -------------------------------------------------------------------------------- 1 | .br-theme-fontawesome-stars-o .br-widget { 2 | height: 28px; 3 | white-space: nowrap; 4 | } 5 | .br-theme-fontawesome-stars-o .br-widget a { 6 | font: normal normal normal 20px/1 FontAwesome; 7 | text-rendering: auto; 8 | -webkit-font-smoothing: antialiased; 9 | text-decoration: none; 10 | margin-right: 2px; 11 | } 12 | .br-theme-fontawesome-stars-o .br-widget a:after { 13 | content: '\f006'; 14 | color: #d2d2d2; 15 | } 16 | .br-theme-fontawesome-stars-o .br-widget a.br-active:after { 17 | content: '\f005'; 18 | color: #50E3C2; 19 | } 20 | .br-theme-fontawesome-stars-o .br-widget a.br-selected:after { 21 | content: '\f005'; 22 | color: #50E3C2; 23 | } 24 | .br-theme-fontawesome-stars-o .br-widget a.br-fractional:after { 25 | content: '\f123'; 26 | color: #50E3C2; 27 | } 28 | .br-theme-fontawesome-stars-o .br-widget .br-current-rating { 29 | display: none; 30 | } 31 | .br-theme-fontawesome-stars-o .br-readonly a { 32 | cursor: default; 33 | } 34 | .br-theme-fontawesome-stars-o .br-reverse a.br-fractional { 35 | display: inline-block; 36 | transform: scaleX(-1); 37 | -moz-transform: scaleX(-1); 38 | -webkit-transform: scaleX(-1); 39 | filter: FlipH; 40 | -ms-filter: "FlipH"; 41 | } 42 | @media print { 43 | .br-theme-fontawesome-stars-o .br-widget a:after { 44 | content: '\f006'; 45 | color: black; 46 | } 47 | .br-theme-fontawesome-stars-o .br-widget a.br-active:after, 48 | .br-theme-fontawesome-stars-o .br-widget a.br-selected:after { 49 | content: '\f005'; 50 | color: black; 51 | } 52 | .br-theme-fontawesome-stars-o .br-widget a.br-fractional:after { 53 | content: '\f123'; 54 | color: black; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /WebApp/wwwroot/css/themes/fontawesome-stars.css: -------------------------------------------------------------------------------- 1 | .br-theme-fontawesome-stars .br-widget { 2 | height: 28px; 3 | white-space: nowrap; 4 | } 5 | .br-theme-fontawesome-stars .br-widget a { 6 | font: normal normal normal 20px/1 FontAwesome; 7 | text-rendering: auto; 8 | -webkit-font-smoothing: antialiased; 9 | text-decoration: none; 10 | margin-right: 2px; 11 | } 12 | .br-theme-fontawesome-stars .br-widget a:after { 13 | content: '\f005'; 14 | color: #d2d2d2; 15 | } 16 | .br-theme-fontawesome-stars .br-widget a.br-active:after { 17 | color: #EDB867; 18 | } 19 | .br-theme-fontawesome-stars .br-widget a.br-selected:after { 20 | color: #EDB867; 21 | } 22 | .br-theme-fontawesome-stars .br-widget .br-current-rating { 23 | display: none; 24 | } 25 | .br-theme-fontawesome-stars .br-readonly a { 26 | cursor: default; 27 | } 28 | @media print { 29 | .br-theme-fontawesome-stars .br-widget a:after { 30 | content: '\f006'; 31 | color: black; 32 | } 33 | .br-theme-fontawesome-stars .br-widget a.br-active:after, 34 | .br-theme-fontawesome-stars .br-widget a.br-selected:after { 35 | content: '\f005'; 36 | color: black; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /WebApp/wwwroot/demo/css/examples.css: -------------------------------------------------------------------------------- 1 | /* Center ratings in container */ 2 | .box-example-1to10 .br-wrapper { 3 | width: 210px; 4 | position: absolute; 5 | margin: 0px 0 0 -105px; 6 | left: 50%; 7 | } 8 | .box-example-movie .br-wrapper { 9 | width: 250px; 10 | position: absolute; 11 | margin: 0px 0 0 -125px; 12 | left: 50%; 13 | } 14 | .box-example-square .br-wrapper { 15 | width: 190px; 16 | position: absolute; 17 | margin: 0px 0 0 -95px; 18 | left: 50%; 19 | } 20 | .box-example-pill .br-wrapper { 21 | width: 232px; 22 | position: absolute; 23 | margin: 0px 0 0 -116px; 24 | left: 50%; 25 | } 26 | .box-example-reversed .br-wrapper { 27 | padding-top: 1.3em; 28 | width: 356px; 29 | position: absolute; 30 | margin: 0px 0 0 -178px; 31 | left: 50%; 32 | } 33 | .box-example-horizontal .br-wrapper { 34 | width: 120px; 35 | position: absolute; 36 | margin: 0px 0 0 -60px; 37 | left: 50%; 38 | } 39 | /* Display star ratings */ 40 | .star-ratings h1 { 41 | font-size: 1.5em; 42 | line-height: 2; 43 | margin-top: 3em; 44 | color: #757575; 45 | } 46 | .star-ratings p { 47 | margin-bottom: 3em; 48 | line-height: 1.2; 49 | } 50 | .star-ratings h1, 51 | .star-ratings p { 52 | text-align: center; 53 | } 54 | .star-ratings .stars { 55 | width: 120px; 56 | text-align: center; 57 | margin: auto; 58 | padding: 0 95px; 59 | } 60 | .star-ratings .stars .title { 61 | font-size: 14px; 62 | color: #cccccc; 63 | line-height: 3; 64 | } 65 | .star-ratings .stars select { 66 | width: 120px; 67 | font-size: 16px; 68 | } 69 | .star-ratings .stars-example-fontawesome, 70 | .star-ratings .stars-example-css, 71 | .star-ratings .stars-example-bootstrap { 72 | float: left; 73 | } 74 | .star-ratings .stars-example-fontawesome-o { 75 | width: 200px; 76 | } 77 | .star-ratings .stars-example-fontawesome-o select { 78 | width: 200px; 79 | } 80 | .start-ratings-main { 81 | margin-bottom: 3em; 82 | } 83 | /* Boxes */ 84 | .box { 85 | width: 100%; 86 | float: left; 87 | margin: 1em 0; 88 | } 89 | .box .box-header { 90 | text-align: center; 91 | font-weight: 400; 92 | padding: .5em 0; 93 | } 94 | .box .box-body { 95 | padding-top: 2em; 96 | height: 85px; 97 | /* rating widgets will be absolutely centered relative to box body */ 98 | position: relative; 99 | } 100 | .box select { 101 | width: 120px; 102 | margin: 10px auto 0 auto; 103 | display: block; 104 | font-size: 16px; 105 | } 106 | .box-large .box-body { 107 | padding-top: 2em; 108 | height: 120px; 109 | } 110 | .box-orange .box-header { 111 | background-color: #edb867; 112 | color: white; 113 | } 114 | .box-orange .box-body { 115 | background-color: white; 116 | border: 2px solid #f5d8ab; 117 | border-top: 0; 118 | } 119 | .box-green .box-header { 120 | background-color: #50e3c2; 121 | color: white; 122 | } 123 | .box-green .box-body { 124 | background-color: white; 125 | border: 2px solid #92eed9; 126 | border-top: 0; 127 | } 128 | .box-blue .box-header { 129 | background-color: #4278f5; 130 | color: white; 131 | } 132 | .box-blue .box-body { 133 | background-color: white; 134 | border: 2px solid #8bacf9; 135 | border-top: 0; 136 | } 137 | @media print { 138 | .star-ratings h1 { 139 | color: black; 140 | } 141 | .star-ratings .stars .title { 142 | color: black; 143 | } 144 | .box-orange .box-header, 145 | .box-green .box-header, 146 | .box-blue .box-header { 147 | background-color: transparent; 148 | color: black; 149 | } 150 | .box-orange .box-body, 151 | .box-green .box-body, 152 | .box-blue .box-body { 153 | background-color: transparent; 154 | border: none; 155 | } 156 | } 157 | -------------------------------------------------------------------------------- /WebApp/wwwroot/demo/css/main.css: -------------------------------------------------------------------------------- 1 | /*! HTML5 Boilerplate v5.0 | MIT License | http://h5bp.com/ */ 2 | html { 3 | color: #222; 4 | font-size: 1em; 5 | line-height: 1.4; 6 | } 7 | ::-moz-selection { 8 | background: #b3d4fc; 9 | text-shadow: none; 10 | } 11 | ::selection { 12 | background: #b3d4fc; 13 | text-shadow: none; 14 | } 15 | hr { 16 | display: block; 17 | height: 1px; 18 | border: 0; 19 | border-top: 1px solid #ccc; 20 | margin: 1em 0; 21 | padding: 0; 22 | } 23 | audio, 24 | canvas, 25 | iframe, 26 | img, 27 | svg, 28 | video { 29 | vertical-align: middle; 30 | } 31 | fieldset { 32 | border: 0; 33 | margin: 0; 34 | padding: 0; 35 | } 36 | textarea { 37 | resize: vertical; 38 | } 39 | b, 40 | strong { 41 | font-weight: 400; 42 | } 43 | .browserupgrade { 44 | margin: 0; 45 | background: #ccc; 46 | color: #000; 47 | padding: 1em 2em; 48 | text-align: center; 49 | } 50 | .browserupgrade a { 51 | color: #000; 52 | text-decoration: underline; 53 | } 54 | .browserupgrade a:hover { 55 | color: #000; 56 | text-decoration: none; 57 | } 58 | /* Dead Simple Grid (c) 2012 Vladimir Agafonkin */ 59 | .col { 60 | padding: 0 1em; 61 | } 62 | .row .row { 63 | margin: 0 -1em; 64 | } 65 | .row:before, 66 | .row:after { 67 | content: ""; 68 | display: table; 69 | } 70 | .row:after { 71 | clear: both; 72 | } 73 | .col { 74 | float: left; 75 | width: 100%; 76 | -webkit-box-sizing: border-box; 77 | -moz-box-sizing: border-box; 78 | box-sizing: border-box; 79 | } 80 | /* ========================================================================== 81 | Author's custom styles 82 | ========================================================================== */ 83 | body { 84 | font-family: "Lato", sans-serif; 85 | color: #757575; 86 | font-weight: 300; 87 | font-size: 1.25em; 88 | /* 20px */ 89 | line-height: 1.6; 90 | } 91 | h1, 92 | h2, 93 | h3 { 94 | font-weight: 400; 95 | color: #2d2d2d; 96 | } 97 | h1 { 98 | font-size: 2.8em; 99 | /* 56px */ 100 | margin: 0; 101 | } 102 | a { 103 | color: #50e3c2; 104 | text-decoration: none; 105 | font-weight: 400; 106 | } 107 | a:hover, 108 | a:focus { 109 | color: #1cb18f; 110 | text-decoration: none; 111 | } 112 | p { 113 | margin: 0 0 1em 0; 114 | } 115 | .warning { 116 | color: red; 117 | } 118 | .github { 119 | background-image: url("../img/github.png"); 120 | position: fixed; 121 | right: 25px; 122 | top: 25px; 123 | width: 50px; 124 | height: 50px; 125 | display: block; 126 | z-index: 1; 127 | opacity: 0.3; 128 | -webkit-transition: opacity .2s; 129 | transition: opacity .2s; 130 | } 131 | @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) { 132 | .github { 133 | background-image: url("../img/github@2x.png"); 134 | background-size: 50px 50px; 135 | } 136 | } 137 | .github:hover { 138 | opacity: 1; 139 | } 140 | .antennaio { 141 | background-image: url("../img/antenna.png"); 142 | background-repeat: no-repeat; 143 | color: #cecece; 144 | width: 280px; 145 | height: 60px; 146 | display: block; 147 | margin: auto; 148 | font-weight: 400; 149 | font-size: 0.6em; 150 | /* 12px */ 151 | line-height: 5.5; 152 | letter-spacing: 2px; 153 | margin-bottom: 7em; 154 | -webkit-transition: color .2s; 155 | transition: color .2s; 156 | } 157 | @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) { 158 | .antennaio { 159 | background-image: url("../img/antenna@2x.png"); 160 | background-size: 60px 60px; 161 | } 162 | } 163 | .antennaio:hover { 164 | color: #757575; 165 | } 166 | .antennaio span { 167 | padding: 0 0 0 70px; 168 | } 169 | .bars { 170 | background-image: url("../img/bars.png"); 171 | width: 80px; 172 | height: 80px; 173 | display: block; 174 | margin: auto; 175 | } 176 | @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) { 177 | .bars { 178 | background-image: url("../img/bars@2x.png"); 179 | background-size: 80px 80px; 180 | } 181 | } 182 | .section { 183 | padding: 2em 0; 184 | } 185 | .section-intro { 186 | text-align: center; 187 | margin: 3em 0 4em 0; 188 | max-height: 9999px; 189 | /* no font boosting please */ 190 | } 191 | .section-intro h1 { 192 | line-height: 2.4; 193 | } 194 | .section-intro p { 195 | max-width: 560px; 196 | margin: auto; 197 | } 198 | .section-intro p.tagline { 199 | font-size: 0.8em; 200 | /* 16px */ 201 | color: #a8a8a8; 202 | margin-bottom: 3em; 203 | } 204 | .section-examples { 205 | position: relative; 206 | background: #f8f8f8; 207 | } 208 | .examples { 209 | margin: auto; 210 | width: 980px; 211 | padding: 3em 0; 212 | } 213 | .examples .col { 214 | width: 50%; 215 | } 216 | .examples .col-fullwidth { 217 | width: 100%; 218 | } 219 | .section-docs { 220 | margin: 3em 0; 221 | } 222 | .docs { 223 | width: 800px; 224 | margin: auto; 225 | max-height: 9999px; 226 | /* no font boosting please */ 227 | } 228 | .docs header { 229 | text-align: center; 230 | padding: 1em 0; 231 | letter-spacing: 3px; 232 | text-transform: uppercase; 233 | font-weight: 400; 234 | color: white; 235 | width: 100%; 236 | font-size: .9em; 237 | } 238 | .docs .how-to-use header, 239 | .docs .callbacks header, 240 | .docs .download header { 241 | background: #4278f5; 242 | } 243 | .docs .how-to-use strong, 244 | .docs .callbacks strong, 245 | .docs .download strong { 246 | color: #4278f5; 247 | } 248 | .docs .how-to-use a, 249 | .docs .callbacks a, 250 | .docs .download a { 251 | color: #4278f5; 252 | } 253 | .docs .how-to-use a:hover, 254 | .docs .callbacks a:hover, 255 | .docs .download a:hover { 256 | color: #0b43c6; 257 | } 258 | .docs .how-to-use pre, 259 | .docs .callbacks pre, 260 | .docs .download pre { 261 | background: white; 262 | border-left: 2px solid #4278f5; 263 | padding: 0 2em; 264 | } 265 | .docs .how-to-use code, 266 | .docs .callbacks code, 267 | .docs .download code { 268 | font-family: "Source Code Pro", sans-serif; 269 | font-size: 0.9em; 270 | /* 18px */ 271 | color: #4278f5; 272 | } 273 | .docs .configuration header, 274 | .docs .faq header { 275 | background: #50e3c2; 276 | } 277 | .docs .configuration strong, 278 | .docs .faq strong { 279 | color: #50e3c2; 280 | } 281 | .docs .configuration a, 282 | .docs .faq a { 283 | color: #50e3c2; 284 | } 285 | .docs .configuration a:hover, 286 | .docs .faq a:hover { 287 | color: #1cb18f; 288 | } 289 | .docs .configuration pre, 290 | .docs .faq pre { 291 | background: white; 292 | border-left: 2px solid #50e3c2; 293 | padding: 0 2em; 294 | } 295 | .docs .configuration code, 296 | .docs .faq code { 297 | font-family: "Source Code Pro", sans-serif; 298 | font-size: 0.9em; 299 | /* 18px */ 300 | color: #50e3c2; 301 | } 302 | .docs .license header, 303 | .docs .methods header { 304 | background: #edb867; 305 | } 306 | .docs .license strong, 307 | .docs .methods strong { 308 | color: #edb867; 309 | } 310 | .docs .license a, 311 | .docs .methods a { 312 | color: #edb867; 313 | } 314 | .docs .license a:hover, 315 | .docs .methods a:hover { 316 | color: #d58b19; 317 | } 318 | .docs .license pre, 319 | .docs .methods pre { 320 | background: white; 321 | border-left: 2px solid #edb867; 322 | padding: 0 2em; 323 | } 324 | .docs .license code, 325 | .docs .methods code { 326 | font-family: "Source Code Pro", sans-serif; 327 | font-size: 0.9em; 328 | /* 18px */ 329 | color: #edb867; 330 | } 331 | .docs .instructions { 332 | padding: 2em 3em; 333 | background: #f8f8f8; 334 | } 335 | .docs .faq p { 336 | margin: 0 0 .5em 0; 337 | } 338 | .docs .faq .question { 339 | margin-bottom: 2em; 340 | } 341 | .docs .faq .question:last-child { 342 | margin-bottom: 0; 343 | } 344 | .controls { 345 | position: absolute; 346 | top: -23px; 347 | left: 50%; 348 | margin-left: -190px; 349 | } 350 | .controls a { 351 | display: block; 352 | width: 150px; 353 | background-color: #50e3c2; 354 | color: white; 355 | float: left; 356 | padding: .3em 1em .5em 1em; 357 | text-decoration: none; 358 | text-align: center; 359 | font-weight: 400; 360 | -webkit-transition: background-color 0.2s; 361 | transition: background-color 0.2s; 362 | } 363 | .controls a:hover { 364 | background-color: #3adfba; 365 | } 366 | .controls a:focus { 367 | color: #d4f8f0; 368 | background-color: #199b7e; 369 | } 370 | .controls a.rating-enable { 371 | -webkit-border-top-left-radius: 999px; 372 | -webkit-border-bottom-left-radius: 999px; 373 | -moz-border-radius-topleft: 999px; 374 | -moz-border-radius-bottomleft: 999px; 375 | border-top-left-radius: 999px; 376 | border-bottom-left-radius: 999px; 377 | } 378 | .controls a.rating-disable { 379 | -webkit-border-top-right-radius: 999px; 380 | -webkit-border-bottom-right-radius: 999px; 381 | -moz-border-radius-topright: 999px; 382 | -moz-border-radius-bottomright: 999px; 383 | border-top-right-radius: 999px; 384 | border-bottom-right-radius: 999px; 385 | } 386 | .controls a:last-child { 387 | border-left: 0; 388 | } 389 | .controls a.deactivated { 390 | background: #20c7a1; 391 | color: white; 392 | } 393 | /* ========================================================================== 394 | Media Queries 395 | ========================================================================== */ 396 | @media print { 397 | body { 398 | color: black; 399 | } 400 | h1, 401 | h2, 402 | h3 { 403 | color: black; 404 | } 405 | .controls, 406 | .github, 407 | .antennaio { 408 | display: none; 409 | } 410 | .section-intro { 411 | margin: 1em 0 2em 0; 412 | } 413 | .section-intro p.tagline { 414 | color: black; 415 | } 416 | .section-examples { 417 | background: transparent; 418 | } 419 | .section-examples .examples { 420 | padding: 1em 0; 421 | } 422 | .section-docs { 423 | margin: 1em 0; 424 | } 425 | .docs .how-to-use a, 426 | .docs .callbacks a, 427 | .docs .download a, 428 | .docs .configuration a, 429 | .docs .faq a, 430 | .docs .license a, 431 | .docs .methods a { 432 | color: black; 433 | text-decoration: none; 434 | } 435 | .docs .how-to-use a:hover, 436 | .docs .callbacks a:hover, 437 | .docs .download a:hover, 438 | .docs .configuration a:hover, 439 | .docs .faq a:hover, 440 | .docs .license a:hover, 441 | .docs .methods a:hover { 442 | color: black; 443 | } 444 | .docs .how-to-use header, 445 | .docs .callbacks header, 446 | .docs .download header, 447 | .docs .configuration header, 448 | .docs .faq header, 449 | .docs .license header, 450 | .docs .methods header { 451 | background: transparent; 452 | color: black; 453 | } 454 | .docs .how-to-use code, 455 | .docs .callbacks code, 456 | .docs .download code, 457 | .docs .configuration code, 458 | .docs .faq code, 459 | .docs .license code, 460 | .docs .methods code, 461 | .docs .how-to-use strong, 462 | .docs .callbacks strong, 463 | .docs .download strong, 464 | .docs .configuration strong, 465 | .docs .faq strong, 466 | .docs .license strong, 467 | .docs .methods strong { 468 | color: black; 469 | } 470 | .docs .how-to-use pre, 471 | .docs .callbacks pre, 472 | .docs .download pre, 473 | .docs .configuration pre, 474 | .docs .faq pre, 475 | .docs .license pre, 476 | .docs .methods pre { 477 | border: none; 478 | padding: 0; 479 | } 480 | .docs .how-to-use .instructions, 481 | .docs .callbacks .instructions, 482 | .docs .download .instructions, 483 | .docs .configuration .instructions, 484 | .docs .faq .instructions, 485 | .docs .license .instructions, 486 | .docs .methods .instructions { 487 | background: transparent; 488 | } 489 | } 490 | /* ========================================================================== 491 | Helper classes 492 | ========================================================================== */ 493 | .hidden { 494 | display: none !important; 495 | visibility: hidden; 496 | } 497 | .visuallyhidden { 498 | border: 0; 499 | clip: rect(0 0 0 0); 500 | height: 1px; 501 | margin: -1px; 502 | overflow: hidden; 503 | padding: 0; 504 | position: absolute; 505 | width: 1px; 506 | } 507 | .visuallyhidden.focusable:active, 508 | .visuallyhidden.focusable:focus { 509 | clip: auto; 510 | height: auto; 511 | margin: 0; 512 | overflow: visible; 513 | position: static; 514 | width: auto; 515 | } 516 | .invisible { 517 | visibility: hidden; 518 | } 519 | .clearfix:before, 520 | .clearfix:after { 521 | content: " "; 522 | display: table; 523 | } 524 | .clearfix:after { 525 | clear: both; 526 | } 527 | .clearfix { 528 | *zoom: 1; 529 | } 530 | /* ========================================================================== 531 | Print styles 532 | ========================================================================== */ 533 | @media print { 534 | *, 535 | *:before, 536 | *:after { 537 | box-shadow: none !important; 538 | text-shadow: none !important; 539 | } 540 | a, 541 | a:visited { 542 | text-decoration: underline; 543 | } 544 | a[href]:after { 545 | content: " (" attr(href) ")"; 546 | } 547 | abbr[title]:after { 548 | content: " (" attr(title) ")"; 549 | } 550 | a[href^="#"]:after, 551 | a[href^="javascript:"]:after { 552 | content: ""; 553 | } 554 | pre, 555 | blockquote { 556 | page-break-inside: avoid; 557 | } 558 | thead { 559 | display: table-header-group; 560 | } 561 | tr, 562 | img { 563 | page-break-inside: avoid; 564 | } 565 | img { 566 | max-width: 100% !important; 567 | } 568 | p, 569 | h2, 570 | h3 { 571 | orphans: 3; 572 | widows: 3; 573 | } 574 | h2, 575 | h3 { 576 | page-break-after: avoid; 577 | } 578 | } 579 | -------------------------------------------------------------------------------- /WebApp/wwwroot/demo/css/normalize.css: -------------------------------------------------------------------------------- 1 | /*! normalize.css v3.0.2 | MIT License | git.io/normalize */ 2 | 3 | /** 4 | * 1. Set default font family to sans-serif. 5 | * 2. Prevent iOS text size adjust after orientation change, without disabling 6 | * user zoom. 7 | */ 8 | 9 | html { 10 | font-family: sans-serif; /* 1 */ 11 | -ms-text-size-adjust: 100%; /* 2 */ 12 | -webkit-text-size-adjust: 100%; /* 2 */ 13 | } 14 | 15 | /** 16 | * Remove default margin. 17 | */ 18 | 19 | body { 20 | margin: 0; 21 | } 22 | 23 | /* HTML5 display definitions 24 | ========================================================================== */ 25 | 26 | /** 27 | * Correct `block` display not defined for any HTML5 element in IE 8/9. 28 | * Correct `block` display not defined for `details` or `summary` in IE 10/11 29 | * and Firefox. 30 | * Correct `block` display not defined for `main` in IE 11. 31 | */ 32 | 33 | article, 34 | aside, 35 | details, 36 | figcaption, 37 | figure, 38 | footer, 39 | header, 40 | hgroup, 41 | main, 42 | menu, 43 | nav, 44 | section, 45 | summary { 46 | display: block; 47 | } 48 | 49 | /** 50 | * 1. Correct `inline-block` display not defined in IE 8/9. 51 | * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. 52 | */ 53 | 54 | audio, 55 | canvas, 56 | progress, 57 | video { 58 | display: inline-block; /* 1 */ 59 | vertical-align: baseline; /* 2 */ 60 | } 61 | 62 | /** 63 | * Prevent modern browsers from displaying `audio` without controls. 64 | * Remove excess height in iOS 5 devices. 65 | */ 66 | 67 | audio:not([controls]) { 68 | display: none; 69 | height: 0; 70 | } 71 | 72 | /** 73 | * Address `[hidden]` styling not present in IE 8/9/10. 74 | * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. 75 | */ 76 | 77 | [hidden], 78 | template { 79 | display: none; 80 | } 81 | 82 | /* Links 83 | ========================================================================== */ 84 | 85 | /** 86 | * Remove the gray background color from active links in IE 10. 87 | */ 88 | 89 | a { 90 | background-color: transparent; 91 | } 92 | 93 | /** 94 | * Improve readability when focused and also mouse hovered in all browsers. 95 | */ 96 | 97 | a:active, 98 | a:hover { 99 | outline: 0; 100 | } 101 | 102 | /* Text-level semantics 103 | ========================================================================== */ 104 | 105 | /** 106 | * Address styling not present in IE 8/9/10/11, Safari, and Chrome. 107 | */ 108 | 109 | abbr[title] { 110 | border-bottom: 1px dotted; 111 | } 112 | 113 | /** 114 | * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. 115 | */ 116 | 117 | b, 118 | strong { 119 | font-weight: bold; 120 | } 121 | 122 | /** 123 | * Address styling not present in Safari and Chrome. 124 | */ 125 | 126 | dfn { 127 | font-style: italic; 128 | } 129 | 130 | /** 131 | * Address variable `h1` font-size and margin within `section` and `article` 132 | * contexts in Firefox 4+, Safari, and Chrome. 133 | */ 134 | 135 | h1 { 136 | font-size: 2em; 137 | margin: 0.67em 0; 138 | } 139 | 140 | /** 141 | * Address styling not present in IE 8/9. 142 | */ 143 | 144 | mark { 145 | background: #ff0; 146 | color: #000; 147 | } 148 | 149 | /** 150 | * Address inconsistent and variable font size in all browsers. 151 | */ 152 | 153 | small { 154 | font-size: 80%; 155 | } 156 | 157 | /** 158 | * Prevent `sub` and `sup` affecting `line-height` in all browsers. 159 | */ 160 | 161 | sub, 162 | sup { 163 | font-size: 75%; 164 | line-height: 0; 165 | position: relative; 166 | vertical-align: baseline; 167 | } 168 | 169 | sup { 170 | top: -0.5em; 171 | } 172 | 173 | sub { 174 | bottom: -0.25em; 175 | } 176 | 177 | /* Embedded content 178 | ========================================================================== */ 179 | 180 | /** 181 | * Remove border when inside `a` element in IE 8/9/10. 182 | */ 183 | 184 | img { 185 | border: 0; 186 | } 187 | 188 | /** 189 | * Correct overflow not hidden in IE 9/10/11. 190 | */ 191 | 192 | svg:not(:root) { 193 | overflow: hidden; 194 | } 195 | 196 | /* Grouping content 197 | ========================================================================== */ 198 | 199 | /** 200 | * Address margin not present in IE 8/9 and Safari. 201 | */ 202 | 203 | figure { 204 | margin: 1em 40px; 205 | } 206 | 207 | /** 208 | * Address differences between Firefox and other browsers. 209 | */ 210 | 211 | hr { 212 | -moz-box-sizing: content-box; 213 | box-sizing: content-box; 214 | height: 0; 215 | } 216 | 217 | /** 218 | * Contain overflow in all browsers. 219 | */ 220 | 221 | pre { 222 | overflow: auto; 223 | } 224 | 225 | /** 226 | * Address odd `em`-unit font size rendering in all browsers. 227 | */ 228 | 229 | code, 230 | kbd, 231 | pre, 232 | samp { 233 | font-family: monospace, monospace; 234 | font-size: 1em; 235 | } 236 | 237 | /* Forms 238 | ========================================================================== */ 239 | 240 | /** 241 | * Known limitation: by default, Chrome and Safari on OS X allow very limited 242 | * styling of `select`, unless a `border` property is set. 243 | */ 244 | 245 | /** 246 | * 1. Correct color not being inherited. 247 | * Known issue: affects color of disabled elements. 248 | * 2. Correct font properties not being inherited. 249 | * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. 250 | */ 251 | 252 | button, 253 | input, 254 | optgroup, 255 | select, 256 | textarea { 257 | color: inherit; /* 1 */ 258 | font: inherit; /* 2 */ 259 | margin: 0; /* 3 */ 260 | } 261 | 262 | /** 263 | * Address `overflow` set to `hidden` in IE 8/9/10/11. 264 | */ 265 | 266 | button { 267 | overflow: visible; 268 | } 269 | 270 | /** 271 | * Address inconsistent `text-transform` inheritance for `button` and `select`. 272 | * All other form control elements do not inherit `text-transform` values. 273 | * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. 274 | * Correct `select` style inheritance in Firefox. 275 | */ 276 | 277 | button, 278 | select { 279 | text-transform: none; 280 | } 281 | 282 | /** 283 | * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` 284 | * and `video` controls. 285 | * 2. Correct inability to style clickable `input` types in iOS. 286 | * 3. Improve usability and consistency of cursor style between image-type 287 | * `input` and others. 288 | */ 289 | 290 | button, 291 | html input[type="button"], /* 1 */ 292 | input[type="reset"], 293 | input[type="submit"] { 294 | -webkit-appearance: button; /* 2 */ 295 | cursor: pointer; /* 3 */ 296 | } 297 | 298 | /** 299 | * Re-set default cursor for disabled elements. 300 | */ 301 | 302 | button[disabled], 303 | html input[disabled] { 304 | cursor: default; 305 | } 306 | 307 | /** 308 | * Remove inner padding and border in Firefox 4+. 309 | */ 310 | 311 | button::-moz-focus-inner, 312 | input::-moz-focus-inner { 313 | border: 0; 314 | padding: 0; 315 | } 316 | 317 | /** 318 | * Address Firefox 4+ setting `line-height` on `input` using `!important` in 319 | * the UA stylesheet. 320 | */ 321 | 322 | input { 323 | line-height: normal; 324 | } 325 | 326 | /** 327 | * It's recommended that you don't attempt to style these elements. 328 | * Firefox's implementation doesn't respect box-sizing, padding, or width. 329 | * 330 | * 1. Address box sizing set to `content-box` in IE 8/9/10. 331 | * 2. Remove excess padding in IE 8/9/10. 332 | */ 333 | 334 | input[type="checkbox"], 335 | input[type="radio"] { 336 | box-sizing: border-box; /* 1 */ 337 | padding: 0; /* 2 */ 338 | } 339 | 340 | /** 341 | * Fix the cursor style for Chrome's increment/decrement buttons. For certain 342 | * `font-size` values of the `input`, it causes the cursor style of the 343 | * decrement button to change from `default` to `text`. 344 | */ 345 | 346 | input[type="number"]::-webkit-inner-spin-button, 347 | input[type="number"]::-webkit-outer-spin-button { 348 | height: auto; 349 | } 350 | 351 | /** 352 | * 1. Address `appearance` set to `searchfield` in Safari and Chrome. 353 | * 2. Address `box-sizing` set to `border-box` in Safari and Chrome 354 | * (include `-moz` to future-proof). 355 | */ 356 | 357 | input[type="search"] { 358 | -webkit-appearance: textfield; /* 1 */ 359 | -moz-box-sizing: content-box; 360 | -webkit-box-sizing: content-box; /* 2 */ 361 | box-sizing: content-box; 362 | } 363 | 364 | /** 365 | * Remove inner padding and search cancel button in Safari and Chrome on OS X. 366 | * Safari (but not Chrome) clips the cancel button when the search input has 367 | * padding (and `textfield` appearance). 368 | */ 369 | 370 | input[type="search"]::-webkit-search-cancel-button, 371 | input[type="search"]::-webkit-search-decoration { 372 | -webkit-appearance: none; 373 | } 374 | 375 | /** 376 | * Define consistent border, margin, and padding. 377 | */ 378 | 379 | fieldset { 380 | border: 1px solid #c0c0c0; 381 | margin: 0 2px; 382 | padding: 0.35em 0.625em 0.75em; 383 | } 384 | 385 | /** 386 | * 1. Correct `color` not being inherited in IE 8/9/10/11. 387 | * 2. Remove padding so people aren't caught out if they zero out fieldsets. 388 | */ 389 | 390 | legend { 391 | border: 0; /* 1 */ 392 | padding: 0; /* 2 */ 393 | } 394 | 395 | /** 396 | * Remove default vertical scrollbar in IE 8/9/10/11. 397 | */ 398 | 399 | textarea { 400 | overflow: auto; 401 | } 402 | 403 | /** 404 | * Don't inherit the `font-weight` (applied by a rule above). 405 | * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. 406 | */ 407 | 408 | optgroup { 409 | font-weight: bold; 410 | } 411 | 412 | /* Tables 413 | ========================================================================== */ 414 | 415 | /** 416 | * Remove most spacing between table cells. 417 | */ 418 | 419 | table { 420 | border-collapse: collapse; 421 | border-spacing: 0; 422 | } 423 | 424 | td, 425 | th { 426 | padding: 0; 427 | } 428 | -------------------------------------------------------------------------------- /WebApp/wwwroot/demo/css/normalize.min.css: -------------------------------------------------------------------------------- 1 | /*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0} -------------------------------------------------------------------------------- /WebApp/wwwroot/demo/img/antenna.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkellner/progress-telerik-blog-viewcomponent/d13ccba319d471772fcb42646cb93d6effbb4e15/WebApp/wwwroot/demo/img/antenna.png -------------------------------------------------------------------------------- /WebApp/wwwroot/demo/img/antenna@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkellner/progress-telerik-blog-viewcomponent/d13ccba319d471772fcb42646cb93d6effbb4e15/WebApp/wwwroot/demo/img/antenna@2x.png -------------------------------------------------------------------------------- /WebApp/wwwroot/demo/img/bars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkellner/progress-telerik-blog-viewcomponent/d13ccba319d471772fcb42646cb93d6effbb4e15/WebApp/wwwroot/demo/img/bars.png -------------------------------------------------------------------------------- /WebApp/wwwroot/demo/img/bars@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkellner/progress-telerik-blog-viewcomponent/d13ccba319d471772fcb42646cb93d6effbb4e15/WebApp/wwwroot/demo/img/bars@2x.png -------------------------------------------------------------------------------- /WebApp/wwwroot/demo/img/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkellner/progress-telerik-blog-viewcomponent/d13ccba319d471772fcb42646cb93d6effbb4e15/WebApp/wwwroot/demo/img/github.png -------------------------------------------------------------------------------- /WebApp/wwwroot/demo/img/github@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkellner/progress-telerik-blog-viewcomponent/d13ccba319d471772fcb42646cb93d6effbb4e15/WebApp/wwwroot/demo/img/github@2x.png -------------------------------------------------------------------------------- /WebApp/wwwroot/demo/img/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkellner/progress-telerik-blog-viewcomponent/d13ccba319d471772fcb42646cb93d6effbb4e15/WebApp/wwwroot/demo/img/star.png -------------------------------------------------------------------------------- /WebApp/wwwroot/demo/img/star@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkellner/progress-telerik-blog-viewcomponent/d13ccba319d471772fcb42646cb93d6effbb4e15/WebApp/wwwroot/demo/img/star@2x.png -------------------------------------------------------------------------------- /WebApp/wwwroot/demo/js/examples.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | function ratingEnable() { 3 | $('#example-1to10').barrating('show', { 4 | theme: 'bars-1to10' 5 | }); 6 | 7 | $('#example-movie').barrating('show', { 8 | theme: 'bars-movie' 9 | }); 10 | 11 | $('#example-movie').barrating('set', 'Mediocre'); 12 | 13 | $('#example-square').barrating('show', { 14 | theme: 'bars-square', 15 | showValues: true, 16 | showSelectedRating: false 17 | }); 18 | 19 | $('#example-pill').barrating('show', { 20 | theme: 'bars-pill', 21 | initialRating: 'A', 22 | showValues: true, 23 | showSelectedRating: false, 24 | allowEmpty: true, 25 | emptyValue: '-- no rating selected --', 26 | onSelect: function(value, text) { 27 | alert('Selected rating: ' + value); 28 | } 29 | }); 30 | 31 | $('#example-reversed').barrating('show', { 32 | theme: 'bars-reversed', 33 | showSelectedRating: true, 34 | reverse: true 35 | }); 36 | 37 | $('#example-horizontal').barrating('show', { 38 | theme: 'bars-horizontal', 39 | reverse: true, 40 | hoverState: false 41 | }); 42 | 43 | $('#example-fontawesome').barrating({ 44 | theme: 'fontawesome-stars', 45 | showSelectedRating: false 46 | }); 47 | 48 | $('#example-css').barrating({ 49 | theme: 'css-stars', 50 | showSelectedRating: false 51 | }); 52 | 53 | $('#example-bootstrap').barrating({ 54 | theme: 'bootstrap-stars', 55 | showSelectedRating: false 56 | }); 57 | 58 | var currentRating = $('#example-fontawesome-o').data('current-rating'); 59 | 60 | $('.stars-example-fontawesome-o .current-rating') 61 | .find('span') 62 | .html(currentRating); 63 | 64 | $('.stars-example-fontawesome-o .clear-rating').on('click', function(event) { 65 | event.preventDefault(); 66 | 67 | $('#example-fontawesome-o') 68 | .barrating('clear'); 69 | }); 70 | 71 | $('#example-fontawesome-o').barrating({ 72 | theme: 'fontawesome-stars-o', 73 | showSelectedRating: false, 74 | initialRating: currentRating, 75 | onSelect: function(value, text) { 76 | if (!value) { 77 | $('#example-fontawesome-o') 78 | .barrating('clear'); 79 | } else { 80 | $('.stars-example-fontawesome-o .current-rating') 81 | .addClass('hidden'); 82 | 83 | $('.stars-example-fontawesome-o .your-rating') 84 | .removeClass('hidden') 85 | .find('span') 86 | .html(value); 87 | } 88 | }, 89 | onClear: function(value, text) { 90 | $('.stars-example-fontawesome-o') 91 | .find('.current-rating') 92 | .removeClass('hidden') 93 | .end() 94 | .find('.your-rating') 95 | .addClass('hidden'); 96 | } 97 | }); 98 | } 99 | 100 | function ratingDisable() { 101 | $('select').barrating('destroy'); 102 | } 103 | 104 | $('.rating-enable').click(function(event) { 105 | event.preventDefault(); 106 | 107 | ratingEnable(); 108 | 109 | $(this).addClass('deactivated'); 110 | $('.rating-disable').removeClass('deactivated'); 111 | }); 112 | 113 | $('.rating-disable').click(function(event) { 114 | event.preventDefault(); 115 | 116 | ratingDisable(); 117 | 118 | $(this).addClass('deactivated'); 119 | $('.rating-enable').removeClass('deactivated'); 120 | }); 121 | 122 | ratingEnable(); 123 | }); 124 | -------------------------------------------------------------------------------- /WebApp/wwwroot/demo/js/vendor/html5shiv.js: -------------------------------------------------------------------------------- 1 | (function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag(); 2 | a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/\w+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x"; 3 | c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode|| 4 | "undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);if(g)return a.createDocumentFragment(); 5 | for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d -------------------------------------------------------------------------------- /WebApp/wwwroot/images/banner2.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /WebApp/wwwroot/images/banner3.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /WebApp/wwwroot/js/examples.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | function ratingEnable() { 3 | $('#example-1to10').barrating('show', { 4 | theme: 'bars-1to10' 5 | }); 6 | 7 | $('#example-movie').barrating('show', { 8 | theme: 'bars-movie' 9 | }); 10 | 11 | $('#example-movie').barrating('set', 'Mediocre'); 12 | 13 | $('#example-square').barrating('show', { 14 | theme: 'bars-square', 15 | showValues: true, 16 | showSelectedRating: false 17 | }); 18 | 19 | $('#example-pill').barrating('show', { 20 | theme: 'bars-pill', 21 | initialRating: 'A', 22 | showValues: true, 23 | showSelectedRating: false, 24 | allowEmpty: true, 25 | emptyValue: '-- no rating selected --', 26 | onSelect: function(value, text) { 27 | alert('Selected rating: ' + value); 28 | } 29 | }); 30 | 31 | $('#example-reversed').barrating('show', { 32 | theme: 'bars-reversed', 33 | showSelectedRating: true, 34 | reverse: true 35 | }); 36 | 37 | $('#example-horizontal').barrating('show', { 38 | theme: 'bars-horizontal', 39 | reverse: true, 40 | hoverState: false 41 | }); 42 | 43 | $('#example-fontawesome').barrating({ 44 | theme: 'fontawesome-stars', 45 | showSelectedRating: false 46 | }); 47 | 48 | $('#example-css').barrating({ 49 | theme: 'css-stars', 50 | showSelectedRating: false 51 | }); 52 | 53 | $('#example-bootstrap').barrating({ 54 | theme: 'bootstrap-stars', 55 | showSelectedRating: false 56 | }); 57 | 58 | var currentRating = $('#example-fontawesome-o').data('current-rating'); 59 | 60 | $('.stars-example-fontawesome-o .current-rating') 61 | .find('span') 62 | .html(currentRating); 63 | 64 | $('.stars-example-fontawesome-o .clear-rating').on('click', function(event) { 65 | event.preventDefault(); 66 | 67 | $('#example-fontawesome-o') 68 | .barrating('clear'); 69 | }); 70 | 71 | $('#example-fontawesome-o').barrating({ 72 | theme: 'fontawesome-stars-o', 73 | showSelectedRating: false, 74 | initialRating: currentRating, 75 | onSelect: function(value, text) { 76 | if (!value) { 77 | $('#example-fontawesome-o') 78 | .barrating('clear'); 79 | } else { 80 | $('.stars-example-fontawesome-o .current-rating') 81 | .addClass('hidden'); 82 | 83 | $('.stars-example-fontawesome-o .your-rating') 84 | .removeClass('hidden') 85 | .find('span') 86 | .html(value); 87 | } 88 | }, 89 | onClear: function(value, text) { 90 | $('.stars-example-fontawesome-o') 91 | .find('.current-rating') 92 | .removeClass('hidden') 93 | .end() 94 | .find('.your-rating') 95 | .addClass('hidden'); 96 | } 97 | }); 98 | } 99 | 100 | function ratingDisable() { 101 | $('select').barrating('destroy'); 102 | } 103 | 104 | $('.rating-enable').click(function(event) { 105 | event.preventDefault(); 106 | 107 | ratingEnable(); 108 | 109 | $(this).addClass('deactivated'); 110 | $('.rating-disable').removeClass('deactivated'); 111 | }); 112 | 113 | $('.rating-disable').click(function(event) { 114 | event.preventDefault(); 115 | 116 | ratingDisable(); 117 | 118 | $(this).addClass('deactivated'); 119 | $('.rating-enable').removeClass('deactivated'); 120 | }); 121 | 122 | ratingEnable(); 123 | }); 124 | -------------------------------------------------------------------------------- /WebApp/wwwroot/js/site.js: -------------------------------------------------------------------------------- 1 | // Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification 2 | // for details on configuring this project to bundle and minify static web assets. 3 | 4 | // Write your Javascript code. 5 | -------------------------------------------------------------------------------- /WebApp/wwwroot/js/site.min.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkellner/progress-telerik-blog-viewcomponent/d13ccba319d471772fcb42646cb93d6effbb4e15/WebApp/wwwroot/js/site.min.js -------------------------------------------------------------------------------- /WebApp/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 | } -------------------------------------------------------------------------------- /WebApp/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 | -------------------------------------------------------------------------------- /WebApp/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkellner/progress-telerik-blog-viewcomponent/d13ccba319d471772fcb42646cb93d6effbb4e15/WebApp/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /WebApp/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkellner/progress-telerik-blog-viewcomponent/d13ccba319d471772fcb42646cb93d6effbb4e15/WebApp/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /WebApp/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkellner/progress-telerik-blog-viewcomponent/d13ccba319d471772fcb42646cb93d6effbb4e15/WebApp/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /WebApp/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkellner/progress-telerik-blog-viewcomponent/d13ccba319d471772fcb42646cb93d6effbb4e15/WebApp/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /WebApp/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') -------------------------------------------------------------------------------- /WebApp/wwwroot/lib/jquery-validation-unobtrusive/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery-validation-unobtrusive", 3 | "homepage": "https://github.com/aspnet/jquery-validation-unobtrusive", 4 | "version": "3.2.9", 5 | "_release": "3.2.9", 6 | "_resolution": { 7 | "type": "version", 8 | "tag": "v3.2.9", 9 | "commit": "a91f5401898e125f10771c5f5f0909d8c4c82396" 10 | }, 11 | "_source": "https://github.com/aspnet/jquery-validation-unobtrusive.git", 12 | "_target": "^3.2.9", 13 | "_originalSource": "jquery-validation-unobtrusive", 14 | "_direct": true 15 | } -------------------------------------------------------------------------------- /WebApp/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) .NET Foundation. All rights reserved. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); you may not use 4 | these files except in compliance with the License. You may obtain a copy of the 5 | License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software distributed 10 | under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 11 | CONDITIONS OF ANY KIND, either express or implied. See the License for the 12 | specific language governing permissions and limitations under the License. 13 | -------------------------------------------------------------------------------- /WebApp/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js: -------------------------------------------------------------------------------- 1 | // Unobtrusive validation support library for jQuery and jQuery Validate 2 | // Copyright (C) Microsoft Corporation. All rights reserved. 3 | // @version v3.2.9 4 | !function(a){"function"==typeof define&&define.amd?define("jquery.validate.unobtrusive",["jquery.validation"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery-validation")):jQuery.validator.unobtrusive=a(jQuery)}(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 u(e){var n=a(e),t=n.data(v),r=a.proxy(l,e),i=f.unobtrusive.options||{},u=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),u("errorPlacement",arguments)},invalidHandler:function(){d.apply(e,arguments),u("invalidHandler",arguments)},messages:{},rules:{},success:function(){s.apply(e,arguments),u("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 m,f=a.validator,v="unobtrusiveValidation";return f.unobtrusive={adapters:[],parseElement:function(e,n){var t,r,i,o=a(e),d=o.parents("form")[0];d&&(t=u(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(){f.unobtrusive.parseElement(this,!0)}),t.each(function(){var a=u(this);a&&a.attachValidation()})}},m=f.unobtrusive.adapters,m.add=function(a,e,n){return n||(n=e,e=[]),this.push({name:a,params:e,adapt:n}),this},m.addBool=function(a,n){return this.add(a,function(t){e(t,n||a,!0)})},m.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)})},m.addSingleVal=function(a,n,t){return this.add(a,[n||"val"],function(r){e(r,t||a,r.params[n])})},f.addMethod("__dummy__",function(a,e,n){return!0}),f.addMethod("regex",function(a,e,n){var t;return!!this.optional(e)||(t=new RegExp(n).exec(a),t&&0===t.index&&t[0].length===a.length)}),f.addMethod("nonalphamin",function(a,e,n){var t;return n&&(t=a.match(/\W/g),t=t&&t.length>=n),t}),f.methods.extension?(m.addSingleVal("accept","mimtype"),m.addSingleVal("extension","extension")):m.addSingleVal("extension","extension","accept"),m.addSingleVal("regex","pattern"),m.addBool("creditcard").addBool("date").addBool("digits").addBool("email").addBool("number").addBool("url"),m.addMinMax("length","minlength","maxlength","rangelength").addMinMax("range","min","max","range"),m.addMinMax("minlength","minlength").addMinMax("maxlength","minlength","maxlength"),m.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)}),m.add("required",function(a){"INPUT"===a.element.tagName.toUpperCase()&&"CHECKBOX"===a.element.type.toUpperCase()||e(a,"required",!0)}),m.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)}),m.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)}),m.add("fileextensions",["extensions"],function(a){e(a,"extension",a.params.extensions)}),a(function(){f.unobtrusive.parse(document)}),f.unobtrusive}); -------------------------------------------------------------------------------- /WebApp/wwwroot/lib/jquery-validation/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery-validation", 3 | "homepage": "https://jqueryvalidation.org/", 4 | "repository": { 5 | "type": "git", 6 | "url": "git://github.com/jquery-validation/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.17.0", 31 | "_release": "1.17.0", 32 | "_resolution": { 33 | "type": "version", 34 | "tag": "1.17.0", 35 | "commit": "fc9b12d3bfaa2d0c04605855b896edb2934c0772" 36 | }, 37 | "_source": "https://github.com/jzaefferer/jquery-validation.git", 38 | "_target": "^1.17.0", 39 | "_originalSource": "jquery-validation", 40 | "_direct": true 41 | } -------------------------------------------------------------------------------- /WebApp/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 | -------------------------------------------------------------------------------- /WebApp/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": "3.3.1", 16 | "_release": "3.3.1", 17 | "_resolution": { 18 | "type": "version", 19 | "tag": "3.3.1", 20 | "commit": "9e8ec3d10fad04748176144f108d7355662ae75e" 21 | }, 22 | "_source": "https://github.com/jquery/jquery-dist.git", 23 | "_target": "^3.3.1", 24 | "_originalSource": "jquery", 25 | "_direct": true 26 | } -------------------------------------------------------------------------------- /WebApp/wwwroot/lib/jquery/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright JS Foundation and other contributors, https://js.foundation/ 2 | 3 | This software consists of voluntary contributions made by many 4 | individuals. For exact contribution history, see the revision history 5 | available at https://github.com/jquery/jquery 6 | 7 | The following license applies to all parts of this software except as 8 | documented below: 9 | 10 | ==== 11 | 12 | Permission is hereby granted, free of charge, to any person obtaining 13 | a copy of this software and associated documentation files (the 14 | "Software"), to deal in the Software without restriction, including 15 | without limitation the rights to use, copy, modify, merge, publish, 16 | distribute, sublicense, and/or sell copies of the Software, and to 17 | permit persons to whom the Software is furnished to do so, subject to 18 | the following conditions: 19 | 20 | The above copyright notice and this permission notice shall be 21 | included in all copies or substantial portions of the Software. 22 | 23 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 27 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 28 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 29 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 30 | 31 | ==== 32 | 33 | All files located in the node_modules and external directories are 34 | externally maintained libraries used by this software which have their 35 | own licenses; we recommend you read them, as their terms may differ from 36 | the terms above. 37 | --------------------------------------------------------------------------------