├── .gitignore ├── AngularAutoCompleteAspNetCoreElasticsearch.sln ├── README.md └── src └── AngularAutoCompleteAspNetCoreElasticsearch ├── AngularAutoCompleteAspNetCoreElasticsearch.csproj ├── Controllers └── PersonCityController.cs ├── ElasticsearchProvider ├── IPersonCitySearchProvider.cs ├── PersonCity.cs ├── PersonCityData.cs ├── PersonCityMapping.cs ├── PersonCityMappingDto.cs ├── PersonCitySearchProvider.cs └── PersonCitySearchResult.cs ├── Program.cs ├── Properties └── launchSettings.json ├── Startup.cs ├── angularApp ├── app │ ├── app.component.html │ ├── app.component.scss │ ├── app.component.ts │ ├── app.constants.ts │ ├── app.module.ts │ ├── app.routes.ts │ ├── home │ │ ├── home.component.html │ │ └── home.component.ts │ ├── homesearch │ │ ├── homesearch.component.html │ │ └── homesearch.component.ts │ ├── model │ │ ├── personCity.ts │ │ └── personCitySearchResult.ts │ ├── personcityautocomplete │ │ ├── personcityautocomplete.component.scss │ │ ├── personcityautocomplete.component.ts │ │ └── personcityautocompleteService.ts │ ├── personcitysearch │ │ ├── personcitysearch.component.scss │ │ ├── personcitysearch.component.ts │ │ └── personcitysearchService.ts │ └── services │ │ └── searchDataService.ts ├── 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 ├── images │ ├── damienbod.jpg │ ├── github.png │ ├── mvp.png │ └── socialTwitter.png ├── index.html ├── main-aot.ts ├── main.ts ├── polyfills.ts ├── style │ └── app.scss └── vendor.ts ├── appsettings.json ├── favicon.ico ├── package.json ├── runtimeconfig.template.json ├── tsconfig-aot.json ├── tsconfig.json ├── tslint.json ├── web.config ├── webpack.config.js ├── webpack.dev.js ├── webpack.helpers.js └── webpack.prod.js /.gitignore: -------------------------------------------------------------------------------- 1 | src/Angular2AutoCompleteAspNetCoreElasticsearch/obj 2 | 3 | .vs 4 | src/AngularAutoCompleteAspNetCoreElasticsearch/aot 5 | src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/**/*.js 6 | 7 | src/AngularAutoCompleteAspNetCoreElasticsearch/node_modules 8 | src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/app/**/*.map 9 | src/AngularAutoCompleteAspNetCoreElasticsearch/wwwroot 10 | src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/main.js.map 11 | src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/polyfills.js.map 12 | src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/vendor.js.map 13 | src/AngularAutoCompleteAspNetCoreElasticsearch/bin 14 | src/AngularAutoCompleteAspNetCoreElasticsearch/obj 15 | -------------------------------------------------------------------------------- /AngularAutoCompleteAspNetCoreElasticsearch.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.26206.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{599448E5-ED3D-44C2-93DA-46650CE8B1CC}" 7 | EndProject 8 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{14F7F195-ABA8-42B3-9C78-B4B6B7F13DB6}" 9 | ProjectSection(SolutionItems) = preProject 10 | README.md = README.md 11 | EndProjectSection 12 | EndProject 13 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AngularAutoCompleteAspNetCoreElasticsearch", "src\AngularAutoCompleteAspNetCoreElasticsearch\AngularAutoCompleteAspNetCoreElasticsearch.csproj", "{16E13622-7E32-4D3B-A382-CABA654D359F}" 14 | EndProject 15 | Global 16 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 17 | Debug|Any CPU = Debug|Any CPU 18 | Debug|x64 = Debug|x64 19 | Debug|x86 = Debug|x86 20 | Release|Any CPU = Release|Any CPU 21 | Release|x64 = Release|x64 22 | Release|x86 = Release|x86 23 | EndGlobalSection 24 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 25 | {16E13622-7E32-4D3B-A382-CABA654D359F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 26 | {16E13622-7E32-4D3B-A382-CABA654D359F}.Debug|Any CPU.Build.0 = Debug|Any CPU 27 | {16E13622-7E32-4D3B-A382-CABA654D359F}.Debug|x64.ActiveCfg = Debug|x64 28 | {16E13622-7E32-4D3B-A382-CABA654D359F}.Debug|x64.Build.0 = Debug|x64 29 | {16E13622-7E32-4D3B-A382-CABA654D359F}.Debug|x86.ActiveCfg = Debug|x86 30 | {16E13622-7E32-4D3B-A382-CABA654D359F}.Debug|x86.Build.0 = Debug|x86 31 | {16E13622-7E32-4D3B-A382-CABA654D359F}.Release|Any CPU.ActiveCfg = Release|Any CPU 32 | {16E13622-7E32-4D3B-A382-CABA654D359F}.Release|Any CPU.Build.0 = Release|Any CPU 33 | {16E13622-7E32-4D3B-A382-CABA654D359F}.Release|x64.ActiveCfg = Release|x64 34 | {16E13622-7E32-4D3B-A382-CABA654D359F}.Release|x64.Build.0 = Release|x64 35 | {16E13622-7E32-4D3B-A382-CABA654D359F}.Release|x86.ActiveCfg = Release|x86 36 | {16E13622-7E32-4D3B-A382-CABA654D359F}.Release|x86.Build.0 = Release|x86 37 | EndGlobalSection 38 | GlobalSection(SolutionProperties) = preSolution 39 | HideSolutionNode = FALSE 40 | EndGlobalSection 41 | GlobalSection(NestedProjects) = preSolution 42 | {16E13622-7E32-4D3B-A382-CABA654D359F} = {599448E5-ED3D-44C2-93DA-46650CE8B1CC} 43 | EndGlobalSection 44 | EndGlobal 45 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Angular autocomplete with ASP.NET Core and Elasticsearch 2 | 3 | 2017.02.10: Updated to VS2017, Angular 2.4.6 and webpack 2.2.1 4 | 5 | 2017.01.04: Updated to VS2017, Angular 2.4.1 and webpack 2.2.0-rc.3 6 | 7 | Use the VS2015 tag to get xproj, VS 2015 version 8 | 9 | https://damienbod.com/2016/10/17/angular2-autocomplete-with-asp-net-core-and-elasticsearch/ 10 | 11 | https://damienbod.com/2016/10/29/angular2-search-with-asp-net-core-and-elasticsearch/ 12 | -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/AngularAutoCompleteAspNetCoreElasticsearch.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | Exe 4 | netcoreapp1.1 5 | true 6 | AngularAutoCompleteAspNetCoreElasticsearch 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/Controllers/PersonCityController.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Mvc; 2 | using SearchComponent; 3 | 4 | namespace Angular2AutoCompleteAspNetCoreElasticsearch.Controllers 5 | { 6 | [Route("api/[controller]")] 7 | public class PersonCityController : Controller 8 | { 9 | private readonly IPersonCitySearchProvider _personCitySearchProvider; 10 | 11 | public PersonCityController(IPersonCitySearchProvider personCitySearchProvider) 12 | { 13 | _personCitySearchProvider = personCitySearchProvider; 14 | } 15 | 16 | [HttpGet("search/{from}/{searchtext}")] 17 | public IActionResult Search(string searchtext, int from) 18 | { 19 | return Ok(_personCitySearchProvider.Search(searchtext.ToLower(), from)); 20 | } 21 | 22 | [HttpGet("querystringsearch/{searchtext}")] 23 | public IActionResult QueryString(string searchtext) 24 | { 25 | return Ok(_personCitySearchProvider.QueryString(searchtext)); 26 | } 27 | 28 | [HttpGet("autocomplete/{searchtext}")] 29 | public IActionResult AutoComplete(string searchtext) 30 | { 31 | return Ok(_personCitySearchProvider.AutocompleteSearch(searchtext.ToLower())); 32 | } 33 | 34 | [HttpGet("createindex")] 35 | public IActionResult CreateIndex() 36 | { 37 | _personCitySearchProvider.CreateIndex(); 38 | return Ok("index created"); 39 | } 40 | 41 | [HttpGet("createtestdata")] 42 | public IActionResult CreateTestData() 43 | { 44 | _personCitySearchProvider.CreateTestData(); 45 | return Ok("test data created"); 46 | } 47 | 48 | [HttpGet("indexexists")] 49 | public IActionResult GetElasticsearchStatus() 50 | { 51 | return Ok(_personCitySearchProvider.GetStatus()); 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/ElasticsearchProvider/IPersonCitySearchProvider.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace SearchComponent 4 | { 5 | public interface IPersonCitySearchProvider 6 | { 7 | void CreateIndex(); 8 | 9 | void CreateTestData(); 10 | 11 | IEnumerable AutocompleteSearch(string term); 12 | 13 | PersonCitySearchResult Search(string term, int from); 14 | 15 | bool GetStatus(); 16 | 17 | IEnumerable QueryString(string term); 18 | } 19 | } -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/ElasticsearchProvider/PersonCity.cs: -------------------------------------------------------------------------------- 1 | namespace SearchComponent 2 | { 3 | public class PersonCity 4 | { 5 | public long Id { get; set; } 6 | public string Name { get; set; } 7 | public string FamilyName { get; set; } 8 | public string Info { get; set; } 9 | public string CityCountry { get; set; } 10 | public string Metadata { get; set; } 11 | public string Web { get; set; } 12 | public string Github { get; set; } 13 | public string Twitter { get; set; } 14 | public string Mvp { get; set; } 15 | } 16 | } -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/ElasticsearchProvider/PersonCityData.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace SearchComponent 4 | { 5 | public static class PersonCityData 6 | { 7 | public static List Data = new List(); 8 | 9 | public static void CreateTestData() 10 | { 11 | Data.Add(new PersonCity { 12 | Id = 1, Name = "Damien", FamilyName = "Bowden", CityCountry="Switzerland", 13 | Metadata = "ASP.NET Core EFCore SQLite Angular2 Angular Typescript javascript Microsoft MVP webpack security", 14 | Info = "I am an engineer, Microsoft MVP, living in Switzerland interested in web development. My favorite technologies are ASP.NET Core, EFCore, ASP.NET, WebAPI, AngularJS, Angular 2, Typescript, MS SQL Server, SQLite and Elasticsearch.", 15 | Web= "https://damienbod.com", 16 | Twitter= "https://twitter.com/damien_bod", 17 | Github = "https://github/damienbod", 18 | Mvp = "https://mvp.microsoft.com/en-us/PublicProfile/5002218" 19 | }); 20 | 21 | Data.Add(new PersonCity 22 | { 23 | Id = 2, 24 | Name = "Fabian", 25 | FamilyName = "Grossbrink", 26 | CityCountry = "Switzerland St Gallen", 27 | Metadata = "ASP.NET Core Angular2 Angular Typescript javascript Microsoft MVP webpack", 28 | Info = "Fabian is Professional Software Engineer in Winterthur at the Noser Engineering AG. He is Microsoft Technology Ambassador in Switzerland, MVP and Microsoft Certified Specialist in Desktop- (WPF) and Web application development with Asp.Net, WebAPI/MVC, HTML, Javascript, Azure and Webservices. His attention is particularly on developing cross platform (web) applications with AngularJs, Ionic, Cordova, Electron and connected frameworks and tools. Additionally Fabian is certified Scrum Master and Scrum developer as well as active speaker for Microsoft in topics of web development.Interests are ASP.NET Core, Javascript(AngularJs, Angular2,...), Typescript, WebAPI(and Architecture), modern architecture for distributed systems (REST - Services), Entity Framework, TFS, Coaching, Agile Development(Scrum) and many more", 29 | Web = "http://fabian-gosebrink.com/", 30 | Twitter = "https://twitter.com/FabianGosebrink", 31 | Github = "https://github.com/FabianGosebrink", 32 | Mvp = "https://mvp.microsoft.com/en-us/PublicProfile/5001666?fullName=Fabian%20%20Gosebrink" 33 | }); 34 | 35 | Data.Add(new PersonCity 36 | { 37 | Id = 3, 38 | Name = "Jürgen", 39 | FamilyName = "Gutsch", 40 | CityCountry = "Switzerland Basel", 41 | Metadata = "ASP.NET Core Angular2 Angular Typescript javascript Microsoft MVP Azure", 42 | Info = "Jürgen Gutsch is software developer, consultant and trainer at the YooApplications AG (yooapps.com) in Basel (Switzerland). Along with family and job, he is a free author trainer und consultant, writes about ASP.NET, .NET, web technologies and Community in a blog on http://asp.net-hacker.rocks und leads the .NET user group in Basel (Switzerland)", 43 | Web = "http://asp.net-hacker.rocks/", 44 | Twitter = "https://twitter.com/sharpcms", 45 | Github = "https://github.com/JuergenGutsch", 46 | Mvp = "https://mvp.microsoft.com/en-us/PublicProfile/5001508?fullName=J%C3%BCrgen%20%20Gutsch" 47 | }); 48 | 49 | Data.Add(new PersonCity 50 | { 51 | Id = 4, 52 | Name = "Benjamin", 53 | FamilyName = "Abt", 54 | CityCountry = "Germany", 55 | Metadata = "ASP.NET Core Microsoft MVP Azure AngularJS TypeScript", 56 | Info = "Benjamin Abt is a software architect and developer focused on .NET, ASP.NET, Azure, AngularJS and TypeScript. He became an ASP.NET/IIS MVP on July, 2015. Studio is his second home. He's an administrator and moderator of the largest german-speaking C# forum, www.mycsharp.de and he spends a lot of time supporting other users on their problems and projects. His blog SCHWABENCODE.com is well known in the german - speaking community. It's focused on german, because he thinks the DACH region has great developers, is a great location for research and development but still there are a lot of developers who do easier with their native language. On GitHub you can follow him on https://github.com/SchwabenCode/ for releases and https://github.com/BenjaminAbt for samples. Ben currently works as Software Architect focused on.NET and Cloud technologies.", 57 | Web = "http://www.benjamin-abt.com", 58 | Twitter = "https://twitter.com/SCHWABENCODEcom", 59 | Github = "https://github.com/BenjaminAbt", 60 | Mvp = "https://mvp.microsoft.com/en-us/PublicProfile/5001507?fullName=Benjamin%20%20Abt" 61 | }); 62 | 63 | Data.Add(new PersonCity 64 | { 65 | Id = 5, 66 | Name = "Alexander", 67 | FamilyName = "Zeitler", 68 | CityCountry = "Germany Karlsruhe, BW", 69 | Metadata = "ASP.NET MVC Microsoft MVP Web API", 70 | Info = "Alexander Zeitler is a self-employed Web Developer who has spent 17 years working mainly for the tooling and machining industry as well as plant manufacturing, where he works mainly with ASP.NET MVC and now ASP.NET Web API on the server side and HTML5, CSS3 and JavaScript on the client side. He has been rewarded repeatedly with the Microsoft MVP award in ASP.NET for his engagement with the German.NET community and he maintains a blog at http://blog.alexonasp.net, which he has kept since 2003.", 71 | Web = "https://alexanderzeitler.com/", 72 | Twitter = "https://twitter.com/alexzeitler_", 73 | Github = "https://github.com/alexzeitler", 74 | Mvp = "https://mvp.microsoft.com/en-us/PublicProfile/10225?fullName=Alexander%20%20Zeitler" 75 | }); 76 | 77 | Data.Add(new PersonCity 78 | { 79 | Id = 6, 80 | Name = "Christos", 81 | FamilyName = "Sakellarios", 82 | CityCountry = "Greece Athens Attica", 83 | Metadata = "ASP.NET MVC Microsoft MVP Web API Typescript security", 84 | Info = "Senior Web Developer Blogger ", 85 | Web = "https://chsakell.com/", 86 | Twitter = "https://twitter.com/chsakellsblog", 87 | Github = "https://github.com/chsakell", 88 | Mvp = "https://mvp.microsoft.com/en-us/PublicProfile/5002193?fullName=Christos%20%20Sakellarios" 89 | }); 90 | 91 | Data.Add(new PersonCity 92 | { 93 | Id = 7, 94 | Name = "Ali Tugberk", 95 | FamilyName = "Ugurlu", 96 | CityCountry = "United Kingdom Cambridge", 97 | Metadata = "ASP.NET MVC Microsoft MVP Web API", 98 | Info = "I am a web guy, Microsoft MVP and software developer specialized mainly on .NET Web technologies. I've worked at the tourism industry to build tourism software services and products for long time and now, I am working at Redgate Software as a Software Engineer helping people do database delivery in a joyful way. I am also a very involved member in the community and try my way to expose my knowledge to others through my blog, webcasts, authoring books, giving talks on various topics and so on. I live in lovely and green Cambridge, UK and I am married to a lovely woman.", 99 | Web = "http://www.tugberkugurlu.com", 100 | Twitter = "https://twitter.com/tourismgeek", 101 | Github = "https://github.com/tugberkugurlu", 102 | Mvp = "https://mvp.microsoft.com/en-us/PublicProfile/4039968?fullName=Ali%20Tugberk%20%20Ugurlu" 103 | }); 104 | 105 | Data.Add(new PersonCity 106 | { 107 | Id = 8, 108 | Name = "Scott", 109 | FamilyName = "Hanselman", 110 | CityCountry = "USA", 111 | Metadata = "ASP.NET Core Web API", 112 | Info = "My name is Scott Hanselman. I'm a programmer, teacher, and speaker. I work out of my home office in Portland, Oregon for the Web Platform Team at Microsoft, but this blog, its content and opinions are my own. I blog about technology, culture, gadgets, diversity, code, the web, where we're going and where we've been. I'm excited about community, social equity, media, entrepreneurship and above all, the open web.", 113 | Web = "http://www.hanselman.com/", 114 | Twitter = "https://twitter.com/shanselman", 115 | Github = "", 116 | Mvp = "" 117 | }); 118 | 119 | Data.Add(new PersonCity 120 | { 121 | Id = 9, 122 | Name = "Roberto", 123 | FamilyName = "Simonetti", 124 | CityCountry = "Italy", 125 | Metadata = ".NET TypeScript Angular Angular2 ASP.NET Core", 126 | Info = "My passion was born with Basic on TI-99/4A & Commodore. At school I discovered Turbo Pascal & Java. I loved Visual Basic, .NET, and now TypeScript & Angular.", 127 | Web = "https://github.com/robisim74", 128 | Twitter = "https://twitter.com/robisim74", 129 | Github = "https://github.com/robisim74", 130 | Mvp = "" 131 | }); 132 | 133 | Data.Add(new PersonCity 134 | { 135 | Id = 10, 136 | Name = "John", 137 | FamilyName = "Papa", 138 | CityCountry = "USA", 139 | Metadata = "Angular2 Angular", 140 | Info = "Hi, I'm John Papa. I author this blog, create courses for Pluralsight and am a Google Developer Expert and Microsoft Regional Director. I speak at events and train technology thought leaders", 141 | Web = "https://johnpapa.net/about/", 142 | Twitter = "https://twitter.com/john_papa", 143 | Github = "https://github.com/johnpapa", 144 | Mvp = "https://mvp.microsoft.com/en-us/PublicProfile/4040095?fullName=John%20%20Papa" 145 | }); 146 | 147 | Data.Add(new PersonCity 148 | { 149 | Id = 11, 150 | Name = "Dan", 151 | FamilyName = "Wahlin", 152 | CityCountry = "USA", 153 | Metadata = "JavaScript Angular Node.js, C# ASP.NET MVC Web API Docker", 154 | Info = "Dan Wahlin founded Wahlin Consulting which provides consulting and training services on Web technologies such as JavaScript, Angular, Node.js, C#, ASP.NET MVC, Web API, and Docker. He’s also published over 10 developer courses on Pluralsight.com and Udemy.com including the new Docker for Web Developers course. Dan is a Microsoft MVP and Regional Director and speaks at conferences and user groups around the world. Dan has written several books on Web technologies, hundreds of technical articles and blog posts (http://blog.codewithdan.com) and runs the Web Weekly newsletter - a great way to stay up on the latest technologies. Follow Dan on Twitter @DanWahlin.", 155 | Web = "https://blog.codewithdan.com/", 156 | Twitter = "https://twitter.com/danwahlin", 157 | Github = "https://github.com/danwahlin", 158 | Mvp = "https://mvp.microsoft.com/en-us/PublicProfile/7586?fullName=Dan%20%20Wahlin" 159 | }); 160 | 161 | Data.Add(new PersonCity 162 | { 163 | Id = 12, 164 | Name = "Jeremy", 165 | FamilyName = "Likness", 166 | CityCountry = "USA", 167 | Metadata = "JavaScript Angular Angular2 C# ASP.NET", 168 | Info = "Jeremy Likness leads the application development practice for Atlanta-based iVision and is an experienced entrepreneur and technology executive who has successfully helped ship commercial enterprise software for 20 years. He specializes in catalyzing growth, developing ideas and creating value through delivering software in technical enterprises. His roles as business owner, technology executive and hands-on developer provided unique opportunities to directly impact the bottom line of multiple businesses by helping them grow and increase their organizational capacity while improving operational efficiency. He has worked with several initially small companies like Manhattan Associates and AirWatch before they grew large and experienced their transition from good to great while helping direct vision and strategy to embrace changing technology and markets. Jeremy is capable of quickly adapting to new paradigms and helps technology teams endure change by providing strong leadership, working with team members “in the trenches” and mentoring them in the soft skills that are key for engineers to bridge the gap between business and technology.", 169 | Web = "http://csharperimage.jeremylikness.com/", 170 | Twitter = "https://twitter.com/jeremylikness", 171 | Github = "https://github.com/jeremylikness", 172 | Mvp = "https://mvp.microsoft.com/en-us/PublicProfile/4028936?fullName=Jeremy%20%20Likness" 173 | }); 174 | 175 | Data.Add(new PersonCity 176 | { 177 | Id = 13, 178 | Name = "Julie", 179 | FamilyName = "Lerman", 180 | CityCountry = "USA Vermont", 181 | Metadata = "Entity Framework EFCore C# ASP.NET PostgreSQL DDD Microsoft MVP", 182 | Info = "Vermont Geekette, DDD, .NET (& EF) Mentor, Author, MS MVP, MS Regional Director, VTdotNET, Pluralsight, MSDN Mag. Talk to me about mentoring your dev team!", 183 | Web = "http://thedatafarm.com/blog/", 184 | Twitter = "https://twitter.com/julielerman", 185 | Github = "https://github.com/julielerman", 186 | Mvp = "https://mvp.microsoft.com/en-us/PublicProfile/8987?fullName=Julie%20%20Lerman" 187 | }); 188 | 189 | Data.Add(new PersonCity 190 | { 191 | Id = 14, 192 | Name = "Kurata", 193 | FamilyName = "Deborah", 194 | CityCountry = "Pleasanton, CA", 195 | Metadata = "Angular Angular2 Microsoft MVP", 196 | Info = "Software developer, independent consultant, Pluralsight author, speaker, Microsoft MVP, Google GDE. Co-chair of Eastbay .NET, which meets in Berkeley.", 197 | Web = "http://blogs.msmvps.com/deborahk/", 198 | Twitter = "https://twitter.com/DeborahKurata", 199 | Github = "https://github.com/DeborahK", 200 | Mvp = "https://mvp.microsoft.com/en-us/PublicProfile/10169?fullName=Deborah%20%20Kurata" 201 | }); 202 | 203 | Data.Add(new PersonCity 204 | { 205 | Id = 15, 206 | Name = "Andrew", 207 | FamilyName = "Lock", 208 | CityCountry = "Plymouth, UK", 209 | Metadata = "ASP.NET Core security", 210 | Info = "My name is Andrew Lock, though everyone knows me as ‘Sock’. I am a full-time developer, working predominantly in full stack ASP.NET development in Devon, UK. I graduated with an MEng in Engineering from Cambridge University in 2008, and completed my PhD in Medical Image Processing in 2014. I have experience primarily with C# and VB ASP.NET, working both in MVC and WebForms, but have also worked professionally with C++ and WinForms. ", 211 | Web = "http://andrewlock.net/", 212 | Twitter = "https://twitter.com/andrewlocknet", 213 | Github = "https://github.com/andrewlock", 214 | Mvp = "" 215 | }); 216 | 217 | Data.Add(new PersonCity 218 | { 219 | Id = 16, 220 | Name = "Brock", 221 | FamilyName = "Allen", 222 | CityCountry = "Barrington, RI ", 223 | Metadata = "ASP.NET Core security identityserver oidc javascript", 224 | Info = "Currently Brock is an independent consultant specializing in .NET, web development, and web - based security with 20 years of industry experience.Brock is the co - author of many security - related open source frameworks including IdentityServer, IdentityManager, and MembershipReboot.He also frequently posts to the ASP.NET forums, is a MVP for ASP.NET / IIS, a member of ASPInsiders and a contributor to the ASP.NET platform. Brock lives in Barrington, RI and can be reached at brockallen@gmail.com.", 225 | Web = "https://brockallen.com/", 226 | Twitter = "https://twitter.com/brocklallen", 227 | Github = "https://github.com/brockallen", 228 | Mvp = "https://mvp.microsoft.com/en-us/PublicProfile/4039969?fullName=Brock%20%20Allen" 229 | }); 230 | 231 | Data.Add(new PersonCity 232 | { 233 | Id = 17, 234 | Name = "Dominick", 235 | FamilyName = "Baier", 236 | CityCountry = "Germany", 237 | Metadata = "ASP.NET Core security identityserver", 238 | Info = "I am an independent consultant specializing in identity & access control. I help companies around the world designing & implementing authentication and authorization for their distributed web and native applications. I am the co-author of the popular OpenID Connect & OAuth 2.0 framework called IdentityServer (http://identityserver.io) , have written a couple of books and tweet as @leastprivilege.", 239 | Web = "https://leastprivilege.com/", 240 | Twitter = "https://twitter.com/leastprivilege", 241 | Github = "https://github.com/leastprivilege", 242 | Mvp = "https://mvp.microsoft.com/en-us/PublicProfile/21554?fullName=Dominick%20%20Baier" 243 | }); 244 | 245 | Data.Add(new PersonCity 246 | { 247 | Id = 18, 248 | Name = "Scott", 249 | FamilyName = "Brady", 250 | CityCountry = "Bristol, United Kingdom", 251 | Metadata = "ASP.NET Core security identityserver", 252 | Info = "I am a Senior Software Engineer at Rock Solid Knowledge. We offer software development consultancy, development and training services with myself specialising in all things Identity Server. I work predominantly in C# back-end and middleware systems with the beginnings of a specialisation in web security. I have had a focus on cloud computing since my MSc dissertation in 2013, gaining experience using various cloud based PaaS and IaaS offerings ever since. ", 253 | Web = "https://www.scottbrady91.com/", 254 | Twitter = "https://twitter.com/scottbrady91", 255 | Github = "https://github.com/scottbrady91", 256 | Mvp = "" 257 | }); 258 | 259 | Data.Add(new PersonCity 260 | { 261 | Id = 19, 262 | Name = "Shawn", 263 | FamilyName = "Wildermuth", 264 | CityCountry = "USA", 265 | Metadata = "ASP.NET Core .NET C#", 266 | Info = "Shawn Wildermuth is a fourteen-time Microsoft MVP (ASP.NET/IIS) and is involved with Microsoft as an ASP.NET Insider, ClientDev Insider and Windows Phone Insider. You may have taken one of his more than twenty courses for Pluralsight including Building a Web App with ASP.NET Core, MVC, EF and Angular and Bootstrap 3. He is also the author of eight books and dozens of articles on software development. He has been seen speaking at a variety of international conferences including TechEd, Oredev, SDC, VSLive, DevIntersection, MIX, DevTeach, DevConnections and DevReach. He is one of the Wilder Minds LLC.", 267 | Web = "http://wildermuth.com/", 268 | Twitter = "https://twitter.com/shawnwildermuth", 269 | Github = "https://github.com/shawnwildermuth", 270 | Mvp = "https://mvp.microsoft.com/en-us/PublicProfile/9072?fullName=Shawn%20%20Wildermuth" 271 | }); 272 | 273 | Data.Add(new PersonCity 274 | { 275 | Id = 20, 276 | Name = "Minko", 277 | FamilyName = "Gechev", 278 | CityCountry = "San Francisco, California USA", 279 | Metadata = "Angular Angular2", 280 | Info = "I created a JavaScript user group in Sofia, which has (had) regular Beer.js meet-ups. For about fifteen years I’ve been training karate (since 1999) and since 2005 I’ve been using different programming languages (including Pascal, Haskell, C, C++, PHP, JavaScript, Io, Java, AspectJ, C#, VisualBasic, Ruby, Python, Perl, ActionScript, Prolog…even Clips) so as you might see I’ve met different programming paradigms – functional, object-oriented, prototype-based oo, aspect-oriented, logical programming, procedural…I just don’t have a patience to see what’s coming next after the OO “dictatorship” :-).", 281 | Web = "http://blog.mgechev.com/", 282 | Twitter = "https://twitter.com/mgechev", 283 | Github = "https://github.com/mgechev", 284 | Mvp = "" 285 | }); 286 | 287 | Data.Add(new PersonCity 288 | { 289 | Id = 21, 290 | Name = "Mike", 291 | FamilyName = "Brind", 292 | CityCountry = "Rochester United Kingdom", 293 | Metadata = "ASP.NET Core MVC EFCore SQL Microsoft MVP", 294 | Info = "Despite that (or perhaps because of it) I have been awarded Microsoft MVP for ASP/ASP.NET each year since 2008. I wrote a book for Wrox that covers the ASP.NET Web Pages framework and working with WebMatrix. It's called Beginning ASP.NET Web Pages With WebMatrix. I have been developing web sites since 2002, and am completely self-taught. I live in Rochester in the UK.", 295 | Web = "http://www.mikesdotnetting.com/", 296 | Twitter = "https://twitter.com/mikesdotnetting", 297 | Github = "", 298 | Mvp = "https://mvp.microsoft.com/en-us/PublicProfile/4015684?fullName=Mike%20%20Brind" 299 | }); 300 | 301 | Data.Add(new PersonCity 302 | { 303 | Id = 22, 304 | Name = "Rion", 305 | FamilyName = "Williams", 306 | CityCountry = "Lake Charles, Louisiana USA", 307 | Metadata = "ASP.NET Core MVC EFCore SQL Microsoft MVP javascript", 308 | Info = "Rion is an experienced, Full Stack Software Developer and Designer from Lake Charles, Louisiana. He is currently the Senior Software Developer at Structure X, a Systems Integrator and Software Development firm focusing in Healthcare. Rion graduated with three degrees (Computer Science, Mathematics and Visual Arts) from McNeese State University and has been building applications in the industrial and healthcare arenas ever since.", 309 | Web = "http://rion.io/", 310 | Twitter = "https://twitter.com/rionmonster", 311 | Github = "https://github.com/rionmonster", 312 | Mvp = "http://mvp.microsoft.com/en-us/MVP/Rion%20Williams-5000660" 313 | }); 314 | 315 | Data.Add(new PersonCity 316 | { 317 | Id = 23, 318 | Name = "Shayne", 319 | FamilyName = "Boyer", 320 | CityCountry = "Florida, USA", 321 | Metadata = "ASP.NET Core Node.js JavaScript TypeScript Microsoft Azure Angular Mobile Development Microsoft MVP", 322 | Info = "Hi, I'm Shayne Boyer, I write this site, am a Microsoft MVP and Telerik Developer Expert who speaks at national and community events while helping teams architect web and cloud applications", 323 | Web = "http://tattoocoder.com/", 324 | Twitter = "https://twitter.com/spboyer", 325 | Github = "https://github.com/tattoocoder", 326 | Mvp = "https://mvp.microsoft.com/en-us/PublicProfile/5000582?fullName=Shayne%20%20Boyer" 327 | }); 328 | 329 | Data.Add(new PersonCity 330 | { 331 | Id = 24, 332 | Name = "Torgeir", 333 | FamilyName = "Helgevold", 334 | CityCountry = "New York USA", 335 | Metadata = "Angular Angular2", 336 | Info = "Software Engineer. Focusing on Angular 2.0 these days ", 337 | Web = "http://www.syntaxsuccess.com/", 338 | Twitter = "https://twitter.com/helgevold", 339 | Github = "https://github.com/thelgevold/", 340 | Mvp = "" 341 | }); 342 | 343 | Data.Add(new PersonCity 344 | { 345 | Id = 25, 346 | Name = "Rob", 347 | FamilyName = "Wormald", 348 | CityCountry = "Mountain View CA", 349 | Metadata = "Angular Angular2", 350 | Info = "I’m a Javascripter, currently spending most of my time working on Angular2. ", 351 | Web = "http://www.roblog.io/", 352 | Twitter = "https://twitter.com/robwormald", 353 | Github = "https://github.com/robwormald", 354 | Mvp = "" 355 | }); 356 | 357 | Data.Add(new PersonCity 358 | { 359 | Id = 26, 360 | Name = "Brad", 361 | FamilyName = "Green", 362 | CityCountry = "Mountain View CA", 363 | Metadata = "Angular Angular2", 364 | Info = "Engineering director at Google where I manage AngularJS and GreenTea (CRM). Also, I have 2 children and 4 chickens. Chickens are easier. ", 365 | Web = "https://plus.google.com/+BradGreen", 366 | Twitter = "https://twitter.com/bradlygreen", 367 | Github = "https://github.com/bradlygreen", 368 | Mvp = "" 369 | }); 370 | 371 | Data.Add(new PersonCity 372 | { 373 | Id = 27, 374 | Name = "Victor", 375 | FamilyName = "Savkin", 376 | CityCountry = "Mountain View CA", 377 | Metadata = "Angular Angular2", 378 | Info = "Victor toys with eclectic programming technologies and obsesses over fonts and keyboard layouts. He also makes Angular.", 379 | Web = "https://vsavkin.com/", 380 | Twitter = "https://twitter.com/victorsavkin", 381 | Github = "https://github.com/vsavkin", 382 | Mvp = "" 383 | }); 384 | 385 | Data.Add(new PersonCity 386 | { 387 | Id = 28, 388 | Name = "Todd", 389 | FamilyName = "Motto", 390 | CityCountry = "England UK", 391 | Metadata = "Angular Angular2", 392 | Info = "I’m Todd, a 26 year old front-end engineer from England, UK, working as a Developer Advocate at Telerik. Co-Founder of Ultimate Angular, a project to bring the Angular 1.x and Angular 2 ecosystem to developers through online courses. I’m also a Developer Expert at Google, conference speaker and open source lover.", 393 | Web = "https://toddmotto.com", 394 | Twitter = "https://twitter.com/toddmotto", 395 | Github = "https://github.com/toddmotto", 396 | Mvp = "" 397 | }); 398 | 399 | Data.Add(new PersonCity 400 | { 401 | Id = 29, 402 | Name = "Pascal", 403 | FamilyName = "Precht", 404 | CityCountry = "Hanover Germany ", 405 | Metadata = "Angular Angular2", 406 | Info = "I like headphones, art, skateboarding and coding. Angular GDE at @Google, @thoughtram co-founder and creator of @5thingsAngular.", 407 | Web = "http://thoughtram.io/", 408 | Twitter = "https://twitter.com/PascalPrecht", 409 | Github = "https://github.com/PascalPrecht", 410 | Mvp = "" 411 | }); 412 | 413 | Data.Add(new PersonCity 414 | { 415 | Id = 30, 416 | Name = "Martijn", 417 | FamilyName = "Laarman", 418 | CityCountry = "Amsterdam, Netherlands ", 419 | Metadata = "elasticsearch nest C# .NET", 420 | Info = "I work for Elasticsearch as .NET developer. ", 421 | Web = "http://localghost.io/", 422 | Twitter = "https://twitter.com/mpdreamz", 423 | Github = "https://github.com/Mpdreamz", 424 | Mvp = "" 425 | }); 426 | 427 | Data.Add(new PersonCity 428 | { 429 | Id = 31, 430 | Name = "Troy", 431 | FamilyName = "Hunt", 432 | CityCountry = " Australia", 433 | Metadata = "security .NET", 434 | Info = "I'm Troy Hunt, an Australian Microsoft Regional Director and also a Microsoft Most Valuable Professional for Developer Security. I don't work for Microsoft, but they're kind enough to recognise my community contributions by way of their award programs which I've been an awardee of since 2011. I get to interact with some fantastic people building their best products and then share what I know about creating secure applications for the web with the broader community.", 435 | Web = "https://www.troyhunt.com/", 436 | Twitter = "https://twitter.com/troyhunt", 437 | Github = "", 438 | Mvp = "https://mvp.microsoft.com/en-us/PublicProfile/4031649?fullName=Troy%20%20Hunt" 439 | }); 440 | 441 | Data.Add(new PersonCity 442 | { 443 | Id = 32, 444 | Name = "Rick", 445 | FamilyName = "Strahl", 446 | CityCountry = " Paia, HI ", 447 | Metadata = " ASPNET, C#, HTML5, Mobile, JavaScript, Angular", 448 | Info = "Wind, waves, code and everything in between... ASP.NET • C# • HTML5 • JavaScript • AngularJs ", 449 | Web = "https://weblog.west-wind.com/", 450 | Twitter = "https://twitter.com/RickStrahl", 451 | Github = "https://github.com/RickStrahl", 452 | Mvp = "https://mvp.microsoft.com/en-us/PublicProfile/5000249?fullName=Rick%20Strahl" 453 | }); 454 | 455 | Data.Add(new PersonCity 456 | { 457 | Id = 33, 458 | Name = "Taiseer", 459 | FamilyName = "Joudeh", 460 | CityCountry = "Jordan", 461 | Metadata = " ASPNET, C#, HTML5, JavaScript, Angular Microsoft", 462 | Info = "My name is Taiseer Joudeh and this is my professional blog. I consider myself a passionate software engineer who is always willing to learn and explore new technologies, then apply it in real world scenarios and share this knowledge with the community. I have more than 10 years of experience spent in developing and managing different software solutions for finance, transportation, logistics, and e - commerce sectors.I’ve been deeply involved in .NET development since early framework versions and currently I work on different technologies on the ASP.NET stack with deep passion for Web API, and Microsoft Azure.Recently I’ve been focusing on building Single Page Applications, Hybrid Mobile Solutions using AngularJS, and focusing on the building identity solutions for modern apps. I have been awarded the Microsoft Most Valuable Professional(MVP) Award for the years 2015 and 2016 in the Visual Studio and Development Technologies, also I’m a regular speaker in local events and Dev user groups.", 463 | Web = "http://bitoftech.net/", 464 | Twitter = "https://twitter.com/TJoudeh", 465 | Github = "https://github.com/tjoudeh", 466 | Mvp = "" 467 | }); 468 | 469 | Data.Add(new PersonCity 470 | { 471 | Id = 34, 472 | Name = "Simon", 473 | FamilyName = "Rigby", 474 | CityCountry = "USA", 475 | Metadata = " ASPNET, C#, HTML5, JavaScript, Angular Microsoft responsive design", 476 | Info = "Hey there. Nice to meet you. Let me introduce myself. My name is Simon Rigby. I've been working in the web industry since the end of that first dotcom boom. In that time I've been lucky enough to work for/with some great companies. I've rubbed shoulders with some top notch techies and savvy business owners. I've learned a lot of great things along the way, from keys to success to mistakes to avoid. And I bring all that experience to the table in every project I work on. Which means, if we work together, you get that benefit too. ", 477 | Web = "http://levelnis.co.uk/blog", 478 | Twitter = "https://twitter.com/levelnis", 479 | Github = "https://github.com/levelnis", 480 | Mvp = "" 481 | }); 482 | 483 | Data.Add(new PersonCity 484 | { 485 | Id = 35, 486 | Name = "Scott", 487 | FamilyName = "Addie", 488 | CityCountry = "Verona, WI USA", 489 | Metadata = " ASP.NET Core, C# Microsoft MVP JavaScript OSS", 490 | Info = "Scott Addie is an ambitious, self-driven software architect & technical evangelist specializing in JavaScript and the modern Microsoft web stack. He is a Microsoft Certified Solutions Developer (MCSD – Web Applications), a Microsoft MVP (Visual Studio and Development Technologies), a frequent conference, code camp, and user group attendee, an ASP.NET and JavaScript blogger, and a technical speaker who has been developing enterprise web applications professionally since 2005. Scott lives in Madison, WI with his wife and 3 children.When not hacking away at an ASP.NET Core side project or slinging code on the latest JavaScript libraries / frameworks, he can be found spending time with his family. ", 491 | Web = "https://scottaddie.com/", 492 | Twitter = "https://twitter.com/Scott_Addie", 493 | Github = "https://github.com/scottaddie", 494 | Mvp = "https://mvp.microsoft.com/en-us/PublicProfile/5001850?fullName=Scott%20%20Addie" 495 | }); 496 | 497 | Data.Add(new PersonCity 498 | { 499 | Id = 36, 500 | Name = "Jon", 501 | FamilyName = "Galloway", 502 | CityCountry = "Rancho San Diego, CA USA", 503 | Metadata = " ASP.NET Core C# Microsoft JavaScript", 504 | Info = "Jon works at Microsoft as a Technical Evangelist focused on ASP.NET and Windows Azure. He’s co-author of Wrox Professional ASP.NET MVC, writes samples and tutorials like the MVC Music Store and is a frequent speaker at conferences and international Web Camps events. Jon’s been doing professional web development for 17 years, including high scale applications in financial, entertainment and healthcare analytics. He’s part of the Herding Code podcast, Twitters as @jongalloway and blogs at http://weblogs.asp.net/jongalloway. He likes to travel, but spends most of his time in San Diego with his amazingly patient wife Rachel, three wonderful daughters, a dozen avocado trees and the occasional rattlesnake.", 505 | Web = "https://weblogs.asp.net/jongalloway/", 506 | Twitter = "https://twitter.com/jongalloway", 507 | Github = "https://github.com/jongalloway", 508 | Mvp = "" 509 | }); 510 | 511 | Data.Add(new PersonCity 512 | { 513 | Id = 37, 514 | Name = "David", 515 | FamilyName = "Fowler", 516 | CityCountry = "Redmond USA", 517 | Metadata = " ASP.NET Core C# Microsoft SignalR", 518 | Info = "Software Developer at Microsoft on the http://ASP.NET team, Creator of SignalR, http://ASP.NET Core Architect, Tennis Player, Father and Husband", 519 | Web = "http://davidfowl.com/", 520 | Twitter = "https://twitter.com/davidfowl", 521 | Github = "https://github.com/davidfowl", 522 | Mvp = "" 523 | }); 524 | 525 | Data.Add(new PersonCity 526 | { 527 | Id = 38, 528 | Name = "Steve", 529 | FamilyName = "Smith", 530 | CityCountry = "Kent OH USA", 531 | Metadata = " ASP.NET Core C# Microsoft DDD", 532 | Info = "Speaker, Author, and Software Craftsman. Microsoft MVP. Available for training / mentoring on DDD, ASPNET Core, and quality software: http://ardalis.com", 533 | Web = "http://ardalis.com/", 534 | Twitter = "https://twitter.com/ardalis", 535 | Github = "https://github.com/davidfowl", 536 | Mvp = "" 537 | }); 538 | 539 | Data.Add(new PersonCity 540 | { 541 | Id = 39, 542 | Name = "Barry", 543 | FamilyName = "Dorrans", 544 | CityCountry = "Redmond USA", 545 | Metadata = " ASP.NET Core C# Microsoft Security", 546 | Info = "Sweary Security Snark. Microsoft's .NET security person. Opinions here are mine and not speaking on behalf of Microsoft or Microsoft Security.", 547 | Web = "https://idunno.org/", 548 | Twitter = "https://twitter.com/blowdart", 549 | Github = "https://github.com/blowdart", 550 | Mvp = "" 551 | }); 552 | 553 | Data.Add(new PersonCity 554 | { 555 | Id = 40, 556 | Name = "Brice", 557 | FamilyName = "Lambson", 558 | CityCountry = "Redmond USA", 559 | Metadata = " ASP.NET Core C# Microsoft Entity Framework EFCore", 560 | Info = "Hello, my name is Brice Lambson. I’m a senior software engineer on the Entity Framework team at Microsoft. In my spare time, I enjoy giving back to the community through blogging and open source.", 561 | Web = "http://www.bricelam.net/", 562 | Twitter = "https://twitter.com/bricelambs", 563 | Github = "https://github.com/bricelam", 564 | Mvp = "" 565 | }); 566 | 567 | } 568 | } 569 | } 570 | -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/ElasticsearchProvider/PersonCityMapping.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using ElasticsearchCRUD; 3 | 4 | namespace SearchComponent 5 | { 6 | public class PersonCityMapping : ElasticsearchMapping 7 | { 8 | public override string GetIndexForType(Type type) 9 | { 10 | return "personcitys"; 11 | } 12 | 13 | public override string GetDocumentType(Type type) 14 | { 15 | return "personcity"; 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/ElasticsearchProvider/PersonCityMappingDto.cs: -------------------------------------------------------------------------------- 1 | using ElasticsearchCRUD.ContextAddDeleteUpdate.CoreTypeAttributes; 2 | 3 | namespace SearchComponent 4 | { 5 | public class PersonCityMappingDto 6 | { 7 | public long Id { get; set; } 8 | 9 | [ElasticsearchString(CopyToList = new[] { "autocomplete", "searchfield" })] 10 | public string Name { get; set; } 11 | 12 | [ElasticsearchString(CopyToList = new[] { "autocomplete", "searchfield" })] 13 | public string FamilyName { get; set; } 14 | 15 | [ElasticsearchString(CopyToList = new[] { "autocomplete", "searchfield" })] 16 | public string Info { get; set; } 17 | 18 | [ElasticsearchString(CopyToList = new[] { "autocomplete", "searchfield" })] 19 | public string CityCountry { get; set; } 20 | 21 | [ElasticsearchString(CopyToList = new[] { "autocomplete", "searchfield" })] 22 | public string Metadata { get; set; } 23 | 24 | public string Web { get; set; } 25 | 26 | public string Github { get; set; } 27 | 28 | public string Twitter { get; set; } 29 | 30 | public string Mvp { get; set; } 31 | 32 | [ElasticsearchString(Analyzer = "edge_ngram_search", SearchAnalyzer = "standard", TermVector = TermVector.yes)] 33 | public string searchfield { get; set; } 34 | 35 | [ElasticsearchString(Analyzer = "autocomplete")] 36 | public string autocomplete { get; set; } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/ElasticsearchProvider/PersonCitySearchProvider.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | using ElasticsearchCRUD; 4 | using ElasticsearchCRUD.ContextAddDeleteUpdate.IndexModel.MappingModel; 5 | using ElasticsearchCRUD.ContextAddDeleteUpdate.IndexModel.SettingsModel; 6 | using ElasticsearchCRUD.ContextAddDeleteUpdate.IndexModel.SettingsModel.Analyzers; 7 | using ElasticsearchCRUD.ContextAddDeleteUpdate.IndexModel.SettingsModel.Filters; 8 | using ElasticsearchCRUD.ContextSearch.SearchModel.AggModel; 9 | using ElasticsearchCRUD.Model; 10 | using ElasticsearchCRUD.Model.SearchModel; 11 | using ElasticsearchCRUD.Model.SearchModel.Aggregations; 12 | using ElasticsearchCRUD.Model.SearchModel.Queries; 13 | using ElasticsearchCRUD.Model.SearchModel.Sorting; 14 | using ElasticsearchCRUD.Tracing; 15 | 16 | namespace SearchComponent 17 | { 18 | public class PersonCitySearchProvider : IPersonCitySearchProvider 19 | { 20 | private readonly IElasticsearchMappingResolver _elasticsearchMappingResolver = new ElasticsearchMappingResolver(); 21 | // const string ConnectionString = "http://localhost.fiddler:9200"; 22 | private const string ConnectionString = "http://localhost:9200"; 23 | private readonly ElasticsearchContext _context; 24 | 25 | public PersonCitySearchProvider() 26 | { 27 | _elasticsearchMappingResolver.AddElasticSearchMappingForEntityType(typeof(PersonCityMappingDto), new PersonCityMapping()); 28 | _context = new ElasticsearchContext(ConnectionString, new ElasticsearchSerializerConfiguration(_elasticsearchMappingResolver)) 29 | { 30 | TraceProvider = new ConsoleTraceProvider() 31 | }; 32 | } 33 | 34 | public void CreateIndex() 35 | { 36 | _context.IndexCreate(CreateNewIndexDefinition()); 37 | } 38 | 39 | public void CreateMapping() 40 | { 41 | _context.IndexCreateTypeMapping(new MappingDefinition() {}); 42 | } 43 | 44 | private IndexDefinition CreateNewIndexDefinition() 45 | { 46 | return new IndexDefinition 47 | { 48 | IndexSettings = 49 | { 50 | Analysis = new Analysis 51 | { 52 | Filters = 53 | { 54 | CustomFilters = new List 55 | { 56 | new StemmerTokenFilter("stemmer"), 57 | new ShingleTokenFilter("autocompletefilter") 58 | { 59 | MaxShingleSize = 5, 60 | MinShingleSize = 2 61 | }, 62 | new StopTokenFilter("stopwords"), 63 | new EdgeNGramTokenFilter("edge_ngram_filter") 64 | { 65 | MaxGram = 20, 66 | MinGram = 2 67 | } 68 | } 69 | }, 70 | Analyzer = 71 | { 72 | Analyzers = new List 73 | { 74 | new CustomAnalyzer("edge_ngram_search") 75 | { 76 | Tokenizer = DefaultTokenizers.Standard, 77 | Filter = new List {DefaultTokenFilters.Lowercase, "edge_ngram_filter"}, 78 | CharFilter = new List {DefaultCharFilters.HtmlStrip} 79 | }, 80 | new CustomAnalyzer("autocomplete") 81 | { 82 | Tokenizer = DefaultTokenizers.Standard, 83 | Filter = new List {DefaultTokenFilters.Lowercase, "autocompletefilter", "stopwords", "stemmer"}, 84 | CharFilter = new List {DefaultCharFilters.HtmlStrip} 85 | }, 86 | new CustomAnalyzer("default") 87 | { 88 | Tokenizer = DefaultTokenizers.Standard, 89 | Filter = new List {DefaultTokenFilters.Lowercase, "stopwords", "stemmer"}, 90 | CharFilter = new List {DefaultCharFilters.HtmlStrip} 91 | } 92 | 93 | 94 | } 95 | } 96 | //Tokenizers = 97 | //{ 98 | // CustomTokenizers = new List 99 | // { 100 | // new EdgeNGramTokenizer("ngram_tokenizer") 101 | // { 102 | // MaxGram = 4, 103 | // MinGram = 4 104 | // } 105 | // } 106 | //} 107 | 108 | } 109 | }, 110 | }; 111 | 112 | } 113 | 114 | public IEnumerable AutocompleteSearch(string term) 115 | { 116 | var search = new Search 117 | { 118 | Size = 0, 119 | Aggs = new List 120 | { 121 | new TermsBucketAggregation("autocomplete", "autocomplete") 122 | { 123 | Order= new OrderAgg("_count", OrderEnum.desc), 124 | Include = new IncludeExpression(term + ".*") 125 | } 126 | } 127 | //Query = new Query(new PrefixQuery("autocomplete", term)) 128 | }; 129 | 130 | var items = _context.Search(search); 131 | var aggResult = items.PayloadResult.Aggregations.GetComplexValue("autocomplete"); 132 | IEnumerable results = aggResult.Buckets.Select(t => t.Key.ToString()); 133 | return results; 134 | } 135 | 136 | public PersonCitySearchResult Search(string term, int from) 137 | { 138 | var personCitySearchResult = new PersonCitySearchResult(); 139 | var search = new Search 140 | { 141 | Size = 10, 142 | From = from, 143 | Query = new Query(new MatchQuery("searchfield", term)) 144 | }; 145 | 146 | var results = _context.Search(search); 147 | 148 | personCitySearchResult.PersonCities = results.PayloadResult.Hits.HitsResult.Select(t => t.Source); 149 | personCitySearchResult.Hits = results.PayloadResult.Hits.Total; 150 | personCitySearchResult.Took = results.PayloadResult.Took; 151 | return personCitySearchResult; 152 | } 153 | 154 | public bool GetStatus() 155 | { 156 | return _context.IndexExists(); 157 | } 158 | 159 | /// 160 | /// Used for basic auto complete 161 | /// 162 | /// 163 | /// 164 | public IEnumerable QueryString(string term) 165 | { 166 | var results = _context.Search(BuildQueryStringSearch(term)); 167 | 168 | return results.PayloadResult.Hits.HitsResult.Select(t => t.Source); 169 | } 170 | 171 | public void CreateTestData() 172 | { 173 | PersonCityData.CreateTestData(); 174 | 175 | foreach (var item in PersonCityData.Data) 176 | { 177 | _context.AddUpdateDocument(item, item.Id); 178 | } 179 | 180 | _context.SaveChanges(); 181 | } 182 | 183 | /// 184 | /// TODO protect against injection! 185 | /// 186 | /// 187 | /// 188 | private Search BuildQueryStringSearch(string term) 189 | { 190 | var names = ""; 191 | if (term != null) 192 | { 193 | names = term.Replace("+", " OR *"); 194 | } 195 | 196 | var search = new Search 197 | { 198 | Query = new Query(new QueryStringQuery(names + "*")) 199 | }; 200 | 201 | return search; 202 | } 203 | } 204 | } -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/ElasticsearchProvider/PersonCitySearchResult.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace SearchComponent 5 | { 6 | public class PersonCitySearchResult 7 | { 8 | public IEnumerable PersonCities { get; set; } 9 | 10 | public long Hits { get; set; } 11 | 12 | public long Took { get; set; } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/Program.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | using Microsoft.AspNetCore.Hosting; 3 | using Microsoft.AspNetCore.Builder; 4 | 5 | namespace Angular2AutoCompleteAspNetCoreElasticsearch 6 | { 7 | public class Program 8 | { 9 | public static void Main(string[] args) 10 | { 11 | var host = new WebHostBuilder() 12 | .UseKestrel() 13 | .UseContentRoot(Directory.GetCurrentDirectory()) 14 | .UseIISIntegration() 15 | .UseStartup() 16 | .Build(); 17 | 18 | host.Run(); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "iisSettings": { 3 | "windowsAuthentication": false, 4 | "anonymousAuthentication": true, 5 | "iisExpress": { 6 | "applicationUrl": "http://localhost:5000/", 7 | "sslPort": 0 8 | } 9 | }, 10 | "profiles": { 11 | "IIS Express": { 12 | "commandName": "IISExpress", 13 | "launchBrowser": true, 14 | "launchUrl": "index.html", 15 | "environmentVariables": { 16 | "ASPNETCORE_ENVIRONMENT": "Development" 17 | } 18 | }, 19 | "Angular2WebpackVisualStudio": { 20 | "commandName": "Project", 21 | "launchBrowser": true, 22 | "launchUrl": "http://localhost:5000/", 23 | "environmentVariables": { 24 | "ASPNETCORE_ENVIRONMENT": "Development" 25 | } 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/Startup.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | using Microsoft.AspNetCore.Builder; 4 | using Microsoft.AspNetCore.Http; 5 | using Microsoft.AspNetCore.Hosting; 6 | using Microsoft.Extensions.Configuration; 7 | using Microsoft.Extensions.DependencyInjection; 8 | using Microsoft.Extensions.Logging; 9 | using SearchComponent; 10 | 11 | namespace Angular2AutoCompleteAspNetCoreElasticsearch 12 | { 13 | public class Startup 14 | { 15 | public Startup(IHostingEnvironment env) 16 | { 17 | var builder = new ConfigurationBuilder() 18 | .SetBasePath(env.ContentRootPath) 19 | .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) 20 | .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) 21 | .AddEnvironmentVariables(); 22 | Configuration = builder.Build(); 23 | } 24 | 25 | public IConfigurationRoot Configuration { get; } 26 | 27 | // This method gets called by the runtime. Use this method to add services to the container. 28 | public void ConfigureServices(IServiceCollection services) 29 | { 30 | services.AddTransient(); 31 | 32 | // Add framework services. 33 | services.AddMvc(); 34 | 35 | } 36 | 37 | // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 38 | public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 39 | { 40 | loggerFactory.AddConsole(Configuration.GetSection("Logging")); 41 | loggerFactory.AddDebug(); 42 | 43 | var angularRoutes = new[] { 44 | "/home" 45 | }; 46 | 47 | app.Use(async (context, next) => 48 | { 49 | if (context.Request.Path.HasValue && null != angularRoutes.FirstOrDefault( 50 | (ar) => context.Request.Path.Value.StartsWith(ar, StringComparison.OrdinalIgnoreCase))) 51 | { 52 | context.Request.Path = new PathString("/"); 53 | } 54 | 55 | await next(); 56 | }); 57 | 58 | app.UseDefaultFiles(); 59 | 60 | app.UseStaticFiles(); 61 | 62 | app.UseMvc(routes => 63 | { 64 | routes.MapRoute( 65 | name: "default", 66 | template: "{controller=Home}/{action=Index}/{id?}"); 67 | }); 68 | } 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/app/app.component.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 17 | 18 | 19 | 20 | 26 |
-------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/app/app.component.scss: -------------------------------------------------------------------------------- 1 | body { 2 | padding-top: 0; 3 | 4 | } 5 | 6 | .starter-template { 7 | padding: 40px 15px; 8 | text-align: center; 9 | } 10 | 11 | .navigationLinkButton:hover { 12 | cursor: pointer; 13 | } 14 | 15 | a { 16 | color: #03A9F4; 17 | } 18 | 19 | .navbar-inverse { 20 | border-radius:0; 21 | } 22 | -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { Router } from '@angular/router'; 3 | 4 | // AoT compilation doesn't support 'require'. 5 | import './app.component.scss'; 6 | import '../style/app.scss'; 7 | 8 | @Component({ 9 | selector: 'my-app', 10 | templateUrl: 'app.component.html' 11 | }) 12 | 13 | 14 | export class AppComponent { 15 | 16 | constructor(private router: Router) { 17 | } 18 | } -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/app/app.constants.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | 3 | @Injectable() 4 | export class Configuration { 5 | public Server = 'http://localhost:5000/'; 6 | } -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { FormsModule } from '@angular/forms'; 4 | import { BrowserModule } from '@angular/platform-browser'; 5 | import { AppComponent } from './app.component'; 6 | import { Configuration } from './app.constants'; 7 | import { routing } from './app.routes'; 8 | import { HttpModule, JsonpModule } from '@angular/http'; 9 | 10 | import { HomeComponent } from './home/home.component'; 11 | import { HomeSearchComponent } from './homesearch/homesearch.component'; 12 | 13 | import { Ng2CompleterModule } from 'ng2-completer'; 14 | import { PersoncityautocompleteComponent } from './personcityautocomplete/personcityautocomplete.component'; 15 | import { PersoncitysearchComponent } from './personcitysearch/personcitysearch.component'; 16 | import { SearchDataService } from './services/searchDataService'; 17 | 18 | @NgModule({ 19 | imports: [ 20 | BrowserModule, 21 | CommonModule, 22 | Ng2CompleterModule, 23 | FormsModule, 24 | routing, 25 | HttpModule, 26 | JsonpModule 27 | ], 28 | declarations: [ 29 | AppComponent, 30 | HomeComponent, 31 | HomeSearchComponent, 32 | PersoncityautocompleteComponent, 33 | PersoncitysearchComponent 34 | ], 35 | providers: [ 36 | SearchDataService, 37 | Configuration, 38 | PersoncitysearchComponent 39 | ], 40 | bootstrap: [AppComponent], 41 | }) 42 | 43 | export class AppModule {} -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/app/app.routes.ts: -------------------------------------------------------------------------------- 1 | import { Routes, RouterModule } from '@angular/router'; 2 | import { HomeComponent } from './home/home.component'; 3 | import { HomeSearchComponent } from './homesearch/homesearch.component'; 4 | 5 | const appRoutes: Routes = [ 6 | { path: '', component: HomeComponent }, 7 | { path: 'home', component: HomeComponent }, 8 | { path: 'homesearch', component: HomeSearchComponent } 9 | ]; 10 | 11 | export const routing = RouterModule.forRoot(appRoutes); -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/app/home/home.component.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 |
6 |
7 | 8 | 9 | 10 | 11 |
12 | 13 | {{SelectedPersonCity.name}} {{SelectedPersonCity.familyName}}
14 |
15 | {{SelectedPersonCity.info}}
16 |
17 | {{SelectedPersonCity.web}}
18 |
19 |
20 |
21 | {{SelectedPersonCity.metadata}}
22 |
23 | 24 |
-------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/app/home/home.component.ts: -------------------------------------------------------------------------------- 1 | import { Observable } from 'rxjs/Observable'; 2 | import { Component, OnInit } from '@angular/core'; 3 | import { Http } from '@angular/http'; 4 | 5 | import { PersoncityautocompleteComponent } from '../personcityautocomplete/personcityautocomplete.component'; 6 | import { SearchDataService } from '../services/searchDataService'; 7 | import { PersonCity } from '../model/personCity'; 8 | 9 | @Component({ 10 | selector: 'homecomponent', 11 | templateUrl: 'home.component.html', 12 | providers: [SearchDataService] 13 | }) 14 | 15 | export class HomeComponent implements OnInit { 16 | 17 | public message: string; 18 | public PersonCityItems: any[]; 19 | public SelectedPersonCity: PersonCity; 20 | public IndexExists = false; 21 | public CreateIndexDisabled = false; 22 | 23 | constructor(private _dataService: SearchDataService) { 24 | this.message = 'Hello from HomeComponent constructor'; 25 | this.SelectedPersonCity = new PersonCity(); 26 | } 27 | 28 | public CreateTestData() { 29 | this._dataService.CreateTestData().subscribe( 30 | error => console.log(error), 31 | () => console.log('CreateTestData complete')); 32 | } 33 | 34 | public CreateIndex() { 35 | this.CreateIndexDisabled = true; 36 | if (!this.IndexExists) { 37 | this._dataService.CreateIndex().subscribe( 38 | error => console.log(error), 39 | () => { 40 | console.log('CreateIndex complete'); 41 | this.IndexExists = true; 42 | this.CreateIndexDisabled = false; 43 | }); 44 | } 45 | } 46 | 47 | ngOnInit() { 48 | this._dataService 49 | .IndexExists() 50 | .subscribe(data => this.IndexExists = data, 51 | error => console.log(error), 52 | () => console.log('IndexExists complete')); 53 | } 54 | } -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/app/homesearch/homesearch.component.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | 6 | Hits: {{PersonCitySearchData.hits}}
7 |
8 | 9 |
10 | {{personCity.name}} {{personCity.familyName}}
11 | {{personCity.web}}
12 | {{personCity.metadata}}
13 | {{personCity.info}}
14 |
15 |
16 | 17 |
18 | 19 | 26 |
27 | 28 | -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/app/homesearch/homesearch.component.ts: -------------------------------------------------------------------------------- 1 | import { Observable } from 'rxjs/Observable'; 2 | import { Component, OnInit } from '@angular/core'; 3 | import { Http } from '@angular/http'; 4 | import { SearchDataService } from '../services/searchDataService'; 5 | import { PersonCity } from '../model/personCity'; 6 | import { PersonCitySearchResult } from '../model/personCitySearchResult'; 7 | import { PersoncitysearchComponent } from '../personcitysearch/personcitysearch.component'; 8 | 9 | @Component({ 10 | selector: 'homesearchcomponent', 11 | templateUrl: 'homesearch.component.html', 12 | providers: [SearchDataService] 13 | }) 14 | 15 | export class HomeSearchComponent implements OnInit { 16 | 17 | public message: string; 18 | public PersonCitySearchData: PersonCitySearchResult; 19 | public SelectedTerm: string; 20 | public IndexExists = false; 21 | 22 | public ShowPaging = false; 23 | public CurrentPage = 0; 24 | public TotalHits = 0; 25 | public PagesCount = 0; 26 | public Pages: number[] = []; 27 | 28 | constructor(public _dataService: SearchDataService, private _personcitysearchComponent: PersoncitysearchComponent) { 29 | this.message = 'Hello from HomeSearchComponent constructor'; 30 | this.SelectedTerm = 'none'; 31 | this.PersonCitySearchData = new PersonCitySearchResult(); 32 | } 33 | 34 | public onTermSelectedEvent(term: string) { 35 | this.SelectedTerm = term; 36 | this.findDataForSearchTerm(term, 0); 37 | } 38 | 39 | private findDataForSearchTerm(term: string, from: number) { 40 | console.log('findDataForSearchTerm:' + term); 41 | this._dataService.FindAllForTerm(term, from) 42 | .subscribe((data) => { 43 | console.log(data); 44 | this.PersonCitySearchData = data; 45 | this.configurePagingDisplay(this.PersonCitySearchData.hits); 46 | }, 47 | error => console.log(error), 48 | () => { 49 | console.log('PersonCitySearch:findDataForSearchTerm completed'); 50 | } 51 | ); 52 | } 53 | 54 | ngOnInit() { 55 | this._dataService 56 | .IndexExists() 57 | .subscribe(data => this.IndexExists = data, 58 | error => console.log(error), 59 | () => console.log('Get IndexExists complete')); 60 | } 61 | 62 | public LoadDataForPage(page: number) { 63 | let from = page * 10; 64 | this.findDataForSearchTerm(this.SelectedTerm, from); 65 | this.CurrentPage = page; 66 | } 67 | 68 | public NextPage() { 69 | let page = this.CurrentPage; 70 | console.log('TotalHits' + this.TotalHits + 'NextPage: ' + ((this.CurrentPage + 1) * 10) + 'CurrentPage' + this.CurrentPage ); 71 | 72 | if (this.TotalHits > ((this.CurrentPage + 1) * 10)) { 73 | page = this.CurrentPage + 1; 74 | } 75 | 76 | this.LoadDataForPage(page); 77 | } 78 | 79 | public PreviousPage() { 80 | let page = this.CurrentPage; 81 | 82 | if (this.CurrentPage > 0) { 83 | page = this.CurrentPage - 1; 84 | } 85 | 86 | this.LoadDataForPage(page); 87 | } 88 | 89 | private configurePagingDisplay(hits: number) { 90 | this.PagesCount = Math.floor(hits / 10); 91 | 92 | this.Pages = []; 93 | for (let i = 0; i <= this.PagesCount; i++) { 94 | this.Pages.push((i)); 95 | } 96 | 97 | this.TotalHits = hits; 98 | 99 | if (this.PagesCount <= 1) { 100 | this.ShowPaging = false; 101 | } else { 102 | this.ShowPaging = true; 103 | } 104 | } 105 | } -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/app/model/personCity.ts: -------------------------------------------------------------------------------- 1 |  2 | export class PersonCity { 3 | public id: number; 4 | public name: string; 5 | public info: string; 6 | public familyName: string; 7 | public cityCountry: string; 8 | public metadata: string; 9 | public web: string; 10 | public github: string; 11 | public twitter: string; 12 | public mvp: string; 13 | } -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/app/model/personCitySearchResult.ts: -------------------------------------------------------------------------------- 1 | import { PersonCity } from '../model/personCity'; 2 | 3 | export class PersonCitySearchResult { 4 | public personCities: PersonCity[]; 5 | public hits: number; 6 | public took: number; 7 | } -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/app/personcityautocomplete/personcityautocomplete.component.scss: -------------------------------------------------------------------------------- 1 | 2 | .completer-input { 3 | width: 600px; 4 | display:block; 5 | height: 40px; 6 | padding: 6px 12px; 7 | font-size: 14px; 8 | line-height: 1.42857143; 9 | color: #555; 10 | background-color: #fff; 11 | background-image: none; 12 | border: 1px solid #ccc; 13 | border-radius: 4px; 14 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); 15 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); 16 | -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; 17 | -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; 18 | transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; 19 | } 20 | 21 | .completer-dropdown { 22 | width: 580px !important; 23 | } 24 | -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/app/personcityautocomplete/personcityautocomplete.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Inject, EventEmitter, Input, Output, OnInit, AfterViewInit, ElementRef } from '@angular/core'; 2 | import { Http, Response } from '@angular/http'; 3 | 4 | import { Subscription } from 'rxjs/Subscription'; 5 | import { Observable } from 'rxjs/Observable'; 6 | import { Router } from '@angular/router'; 7 | 8 | import { Configuration } from '../app.constants'; 9 | import { PersoncityautocompleteDataService } from './personcityautocompleteService'; 10 | import { PersonCity } from '../model/personCity'; 11 | 12 | import { CompleterService, CompleterItem } from 'ng2-completer'; 13 | 14 | import './personcityautocomplete.component.scss'; 15 | 16 | @Component({ 17 | selector: 'personcityautocomplete', 18 | template: ` 19 | 20 | 21 | ` 22 | }) 23 | 24 | export class PersoncityautocompleteComponent implements OnInit { 25 | 26 | @Output() bindModelPersonCityChange = new EventEmitter(); 27 | @Input() bindModelPersonCity: PersonCity; 28 | @Input() disableAutocomplete = false; 29 | 30 | private searchStr: string; 31 | public dataService: PersoncityautocompleteDataService; 32 | 33 | constructor(private completerService: CompleterService, private http: Http, private _configuration: Configuration) { 34 | 35 | this.dataService = new PersoncityautocompleteDataService(http, _configuration); ////completerService.local('name, info, familyName', 'name'); 36 | } 37 | 38 | ngOnInit() { 39 | console.log('ngOnInit PersoncityautocompleteComponent'); 40 | } 41 | 42 | public onPersonCitySelected(selected: CompleterItem) { 43 | console.log(selected); 44 | this.bindModelPersonCityChange.emit(selected.originalObject); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/app/personcityautocomplete/personcityautocompleteService.ts: -------------------------------------------------------------------------------- 1 | import { Http, Response } from '@angular/http'; 2 | import { Subject } from 'rxjs/Subject'; 3 | 4 | import { CompleterData, CompleterItem } from 'ng2-completer'; 5 | import { Configuration } from '../app.constants'; 6 | 7 | export class PersoncityautocompleteDataService extends Subject implements CompleterData { 8 | private actionUrl: string; 9 | 10 | constructor(private http: Http, private _configuration: Configuration) { 11 | super(); 12 | 13 | this.actionUrl = _configuration.Server + 'api/personcity/querystringsearch/'; 14 | } 15 | 16 | public search(term: string): void { 17 | this.http.get(this.actionUrl + term) 18 | .map((res: Response) => { 19 | // Convert the result to CompleterItem[] 20 | let data = res.json(); 21 | let matches: CompleterItem[] = data.map((personcity: any) => { 22 | return { 23 | title: personcity.name, 24 | description: personcity.familyName + ', ' + personcity.cityCountry, 25 | originalObject: personcity 26 | }; 27 | }); 28 | this.next(matches); 29 | }) 30 | .subscribe(); 31 | } 32 | 33 | public cancel() { 34 | // Handle cancel 35 | } 36 | } -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/app/personcitysearch/personcitysearch.component.scss: -------------------------------------------------------------------------------- 1 | 2 | .completer-input { 3 | width: 500px; 4 | display: block; 5 | height: 34px; 6 | padding: 6px 12px; 7 | font-size: 14px; 8 | line-height: 1.42857143; 9 | color: #555; 10 | background-color: #fff; 11 | background-image: none; 12 | border: 1px solid #ccc; 13 | border-radius: 4px; 14 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); 15 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); 16 | -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; 17 | -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; 18 | transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; 19 | } 20 | 21 | .completer-dropdown { 22 | width: 480px !important; 23 | } 24 | -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/app/personcitysearch/personcitysearch.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Inject, EventEmitter, Input, Output, OnInit, AfterViewInit, ElementRef } from '@angular/core'; 2 | import { Http, Response } from '@angular/http'; 3 | 4 | import { Subscription } from 'rxjs/Subscription'; 5 | import { Observable } from 'rxjs/Observable'; 6 | import { Router } from '@angular/router'; 7 | 8 | import { Configuration } from '../app.constants'; 9 | import { PersoncitysearchService } from './personcitysearchService'; 10 | import { PersonCity } from '../model/personCity'; 11 | 12 | import { CompleterService, CompleterItem } from 'ng2-completer'; 13 | import './personcitysearch.component.scss'; 14 | 15 | @Component({ 16 | selector: 'personcitysearch', 17 | template: ` 18 | 19 | 20 | ` 21 | }) 22 | 23 | export class PersoncitysearchComponent implements OnInit { 24 | 25 | @Output() onTermSelectedEvent = new EventEmitter(); 26 | @Input() bindSelectedTerm: string; 27 | 28 | @Input() disableAutocomplete = false; 29 | 30 | private searchStr: string; 31 | public dataService: PersoncitysearchService; 32 | 33 | constructor(private completerService: CompleterService, private http: Http, private _configuration: Configuration) { 34 | 35 | this.dataService = new PersoncitysearchService(http, _configuration); 36 | } 37 | 38 | ngOnInit() { 39 | console.log('ngOnInit SearchComponent'); 40 | } 41 | 42 | public onTermSelected(selected: CompleterItem) { 43 | console.log('onTermSelected'); 44 | console.log(selected); 45 | 46 | this.onTermSelectedEvent.emit(selected.title); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/app/personcitysearch/personcitysearchService.ts: -------------------------------------------------------------------------------- 1 | import { Http, Response } from '@angular/http'; 2 | import { Subject } from 'rxjs/Subject'; 3 | 4 | import { CompleterData, CompleterItem } from 'ng2-completer'; 5 | import { Configuration } from '../app.constants'; 6 | import { Observable } from 'rxjs/Observable'; 7 | 8 | export class PersoncitysearchService extends Subject implements CompleterData { 9 | private actionUrl: string; 10 | 11 | constructor(private http: Http, private _configuration: Configuration) { 12 | super(); 13 | 14 | this.actionUrl = _configuration.Server + 'api/personcity/autocomplete/'; 15 | } 16 | 17 | public search(term: string): void { 18 | this.http.get(this.actionUrl + term) 19 | .map((res: Response) => { 20 | // Convert the result to CompleterItem[] 21 | let data = res.json(); 22 | console.log(data); 23 | let matches: CompleterItem[] = data.map((autocomplete: any) => { 24 | return { 25 | title: autocomplete, 26 | 27 | originalObject: autocomplete 28 | }; 29 | }); 30 | this.next(matches); 31 | }) 32 | .subscribe(); 33 | } 34 | 35 | public cancel() { 36 | // Handle cancel 37 | } 38 | } -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/app/services/searchDataService.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { Http, Response, Headers } from '@angular/http'; 3 | import 'rxjs/add/operator/map'; 4 | import { Observable } from 'rxjs/Observable'; 5 | import { Configuration } from '../app.constants'; 6 | 7 | @Injectable() 8 | export class SearchDataService { 9 | 10 | private actionUrl: string; 11 | private headers: Headers; 12 | 13 | constructor(private _http: Http, private _configuration: Configuration) { 14 | 15 | this.actionUrl = _configuration.Server + 'api/personcity/'; 16 | 17 | this.headers = new Headers(); 18 | this.headers.append('Content-Type', 'application/json'); 19 | this.headers.append('Accept', 'application/json'); 20 | } 21 | 22 | public GetAll = (): Observable => { 23 | return this._http.get(this.actionUrl).map((response: Response) => response.json()); 24 | 25 | } 26 | 27 | public CreateIndex = (): Observable => { 28 | let url = this.actionUrl + 'createindex'; 29 | return this._http.get(url).map((response: Response) => response.json()); 30 | } 31 | 32 | public IndexExists = (): Observable => { 33 | let url = this.actionUrl + 'indexexists'; 34 | return this._http.get(url).map((response: Response) => response.json()); 35 | } 36 | 37 | public CreateTestData = (): Observable => { 38 | let url = this.actionUrl + 'createtestdata'; 39 | return this._http.get(url).map((response: Response) => response.json()); 40 | } 41 | 42 | public FindAllForTerm = (term: string, from: number): Observable => { 43 | return this._http.get(this.actionUrl + 'search/' + from + '/' + term).map((response: Response) => response.json()); 44 | } 45 | } -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/css/bootstrap-theme.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.3.6 (http://getbootstrap.com) 3 | * Copyright 2011-2015 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | .btn-default, 7 | .btn-primary, 8 | .btn-success, 9 | .btn-info, 10 | .btn-warning, 11 | .btn-danger { 12 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); 13 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); 14 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); 15 | } 16 | .btn-default:active, 17 | .btn-primary:active, 18 | .btn-success:active, 19 | .btn-info:active, 20 | .btn-warning:active, 21 | .btn-danger:active, 22 | .btn-default.active, 23 | .btn-primary.active, 24 | .btn-success.active, 25 | .btn-info.active, 26 | .btn-warning.active, 27 | .btn-danger.active { 28 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); 29 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); 30 | } 31 | .btn-default.disabled, 32 | .btn-primary.disabled, 33 | .btn-success.disabled, 34 | .btn-info.disabled, 35 | .btn-warning.disabled, 36 | .btn-danger.disabled, 37 | .btn-default[disabled], 38 | .btn-primary[disabled], 39 | .btn-success[disabled], 40 | .btn-info[disabled], 41 | .btn-warning[disabled], 42 | .btn-danger[disabled], 43 | fieldset[disabled] .btn-default, 44 | fieldset[disabled] .btn-primary, 45 | fieldset[disabled] .btn-success, 46 | fieldset[disabled] .btn-info, 47 | fieldset[disabled] .btn-warning, 48 | fieldset[disabled] .btn-danger { 49 | -webkit-box-shadow: none; 50 | box-shadow: none; 51 | } 52 | .btn-default .badge, 53 | .btn-primary .badge, 54 | .btn-success .badge, 55 | .btn-info .badge, 56 | .btn-warning .badge, 57 | .btn-danger .badge { 58 | text-shadow: none; 59 | } 60 | .btn:active, 61 | .btn.active { 62 | background-image: none; 63 | } 64 | .btn-default { 65 | text-shadow: 0 1px 0 #fff; 66 | background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); 67 | background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%); 68 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0)); 69 | background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); 70 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); 71 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 72 | background-repeat: repeat-x; 73 | border-color: #dbdbdb; 74 | border-color: #ccc; 75 | } 76 | .btn-default:hover, 77 | .btn-default:focus { 78 | background-color: #e0e0e0; 79 | background-position: 0 -15px; 80 | } 81 | .btn-default:active, 82 | .btn-default.active { 83 | background-color: #e0e0e0; 84 | border-color: #dbdbdb; 85 | } 86 | .btn-default.disabled, 87 | .btn-default[disabled], 88 | fieldset[disabled] .btn-default, 89 | .btn-default.disabled:hover, 90 | .btn-default[disabled]:hover, 91 | fieldset[disabled] .btn-default:hover, 92 | .btn-default.disabled:focus, 93 | .btn-default[disabled]:focus, 94 | fieldset[disabled] .btn-default:focus, 95 | .btn-default.disabled.focus, 96 | .btn-default[disabled].focus, 97 | fieldset[disabled] .btn-default.focus, 98 | .btn-default.disabled:active, 99 | .btn-default[disabled]:active, 100 | fieldset[disabled] .btn-default:active, 101 | .btn-default.disabled.active, 102 | .btn-default[disabled].active, 103 | fieldset[disabled] .btn-default.active { 104 | background-color: #e0e0e0; 105 | background-image: none; 106 | } 107 | .btn-primary { 108 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%); 109 | background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); 110 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88)); 111 | background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); 112 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0); 113 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 114 | background-repeat: repeat-x; 115 | border-color: #245580; 116 | } 117 | .btn-primary:hover, 118 | .btn-primary:focus { 119 | background-color: #265a88; 120 | background-position: 0 -15px; 121 | } 122 | .btn-primary:active, 123 | .btn-primary.active { 124 | background-color: #265a88; 125 | border-color: #245580; 126 | } 127 | .btn-primary.disabled, 128 | .btn-primary[disabled], 129 | fieldset[disabled] .btn-primary, 130 | .btn-primary.disabled:hover, 131 | .btn-primary[disabled]:hover, 132 | fieldset[disabled] .btn-primary:hover, 133 | .btn-primary.disabled:focus, 134 | .btn-primary[disabled]:focus, 135 | fieldset[disabled] .btn-primary:focus, 136 | .btn-primary.disabled.focus, 137 | .btn-primary[disabled].focus, 138 | fieldset[disabled] .btn-primary.focus, 139 | .btn-primary.disabled:active, 140 | .btn-primary[disabled]:active, 141 | fieldset[disabled] .btn-primary:active, 142 | .btn-primary.disabled.active, 143 | .btn-primary[disabled].active, 144 | fieldset[disabled] .btn-primary.active { 145 | background-color: #265a88; 146 | background-image: none; 147 | } 148 | .btn-success { 149 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); 150 | background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); 151 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); 152 | background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); 153 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); 154 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 155 | background-repeat: repeat-x; 156 | border-color: #3e8f3e; 157 | } 158 | .btn-success:hover, 159 | .btn-success:focus { 160 | background-color: #419641; 161 | background-position: 0 -15px; 162 | } 163 | .btn-success:active, 164 | .btn-success.active { 165 | background-color: #419641; 166 | border-color: #3e8f3e; 167 | } 168 | .btn-success.disabled, 169 | .btn-success[disabled], 170 | fieldset[disabled] .btn-success, 171 | .btn-success.disabled:hover, 172 | .btn-success[disabled]:hover, 173 | fieldset[disabled] .btn-success:hover, 174 | .btn-success.disabled:focus, 175 | .btn-success[disabled]:focus, 176 | fieldset[disabled] .btn-success:focus, 177 | .btn-success.disabled.focus, 178 | .btn-success[disabled].focus, 179 | fieldset[disabled] .btn-success.focus, 180 | .btn-success.disabled:active, 181 | .btn-success[disabled]:active, 182 | fieldset[disabled] .btn-success:active, 183 | .btn-success.disabled.active, 184 | .btn-success[disabled].active, 185 | fieldset[disabled] .btn-success.active { 186 | background-color: #419641; 187 | background-image: none; 188 | } 189 | .btn-info { 190 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); 191 | background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); 192 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); 193 | background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); 194 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); 195 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 196 | background-repeat: repeat-x; 197 | border-color: #28a4c9; 198 | } 199 | .btn-info:hover, 200 | .btn-info:focus { 201 | background-color: #2aabd2; 202 | background-position: 0 -15px; 203 | } 204 | .btn-info:active, 205 | .btn-info.active { 206 | background-color: #2aabd2; 207 | border-color: #28a4c9; 208 | } 209 | .btn-info.disabled, 210 | .btn-info[disabled], 211 | fieldset[disabled] .btn-info, 212 | .btn-info.disabled:hover, 213 | .btn-info[disabled]:hover, 214 | fieldset[disabled] .btn-info:hover, 215 | .btn-info.disabled:focus, 216 | .btn-info[disabled]:focus, 217 | fieldset[disabled] .btn-info:focus, 218 | .btn-info.disabled.focus, 219 | .btn-info[disabled].focus, 220 | fieldset[disabled] .btn-info.focus, 221 | .btn-info.disabled:active, 222 | .btn-info[disabled]:active, 223 | fieldset[disabled] .btn-info:active, 224 | .btn-info.disabled.active, 225 | .btn-info[disabled].active, 226 | fieldset[disabled] .btn-info.active { 227 | background-color: #2aabd2; 228 | background-image: none; 229 | } 230 | .btn-warning { 231 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); 232 | background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); 233 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); 234 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); 235 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); 236 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 237 | background-repeat: repeat-x; 238 | border-color: #e38d13; 239 | } 240 | .btn-warning:hover, 241 | .btn-warning:focus { 242 | background-color: #eb9316; 243 | background-position: 0 -15px; 244 | } 245 | .btn-warning:active, 246 | .btn-warning.active { 247 | background-color: #eb9316; 248 | border-color: #e38d13; 249 | } 250 | .btn-warning.disabled, 251 | .btn-warning[disabled], 252 | fieldset[disabled] .btn-warning, 253 | .btn-warning.disabled:hover, 254 | .btn-warning[disabled]:hover, 255 | fieldset[disabled] .btn-warning:hover, 256 | .btn-warning.disabled:focus, 257 | .btn-warning[disabled]:focus, 258 | fieldset[disabled] .btn-warning:focus, 259 | .btn-warning.disabled.focus, 260 | .btn-warning[disabled].focus, 261 | fieldset[disabled] .btn-warning.focus, 262 | .btn-warning.disabled:active, 263 | .btn-warning[disabled]:active, 264 | fieldset[disabled] .btn-warning:active, 265 | .btn-warning.disabled.active, 266 | .btn-warning[disabled].active, 267 | fieldset[disabled] .btn-warning.active { 268 | background-color: #eb9316; 269 | background-image: none; 270 | } 271 | .btn-danger { 272 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); 273 | background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); 274 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); 275 | background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); 276 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); 277 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 278 | background-repeat: repeat-x; 279 | border-color: #b92c28; 280 | } 281 | .btn-danger:hover, 282 | .btn-danger:focus { 283 | background-color: #c12e2a; 284 | background-position: 0 -15px; 285 | } 286 | .btn-danger:active, 287 | .btn-danger.active { 288 | background-color: #c12e2a; 289 | border-color: #b92c28; 290 | } 291 | .btn-danger.disabled, 292 | .btn-danger[disabled], 293 | fieldset[disabled] .btn-danger, 294 | .btn-danger.disabled:hover, 295 | .btn-danger[disabled]:hover, 296 | fieldset[disabled] .btn-danger:hover, 297 | .btn-danger.disabled:focus, 298 | .btn-danger[disabled]:focus, 299 | fieldset[disabled] .btn-danger:focus, 300 | .btn-danger.disabled.focus, 301 | .btn-danger[disabled].focus, 302 | fieldset[disabled] .btn-danger.focus, 303 | .btn-danger.disabled:active, 304 | .btn-danger[disabled]:active, 305 | fieldset[disabled] .btn-danger:active, 306 | .btn-danger.disabled.active, 307 | .btn-danger[disabled].active, 308 | fieldset[disabled] .btn-danger.active { 309 | background-color: #c12e2a; 310 | background-image: none; 311 | } 312 | .thumbnail, 313 | .img-thumbnail { 314 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 315 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 316 | } 317 | .dropdown-menu > li > a:hover, 318 | .dropdown-menu > li > a:focus { 319 | background-color: #e8e8e8; 320 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 321 | background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 322 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); 323 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); 324 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); 325 | background-repeat: repeat-x; 326 | } 327 | .dropdown-menu > .active > a, 328 | .dropdown-menu > .active > a:hover, 329 | .dropdown-menu > .active > a:focus { 330 | background-color: #2e6da4; 331 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 332 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 333 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); 334 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); 335 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); 336 | background-repeat: repeat-x; 337 | } 338 | .navbar-default { 339 | background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); 340 | background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%); 341 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8)); 342 | background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); 343 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); 344 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 345 | background-repeat: repeat-x; 346 | border-radius: 4px; 347 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); 348 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); 349 | } 350 | .navbar-default .navbar-nav > .open > a, 351 | .navbar-default .navbar-nav > .active > a { 352 | background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); 353 | background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); 354 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2)); 355 | background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); 356 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); 357 | background-repeat: repeat-x; 358 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); 359 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); 360 | } 361 | .navbar-brand, 362 | .navbar-nav > li > a { 363 | text-shadow: 0 1px 0 rgba(255, 255, 255, .25); 364 | } 365 | .navbar-inverse { 366 | background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); 367 | background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%); 368 | background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222)); 369 | background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); 370 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); 371 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 372 | background-repeat: repeat-x; 373 | border-radius: 4px; 374 | } 375 | .navbar-inverse .navbar-nav > .open > a, 376 | .navbar-inverse .navbar-nav > .active > a { 377 | background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); 378 | background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); 379 | background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f)); 380 | background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); 381 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); 382 | background-repeat: repeat-x; 383 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); 384 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); 385 | } 386 | .navbar-inverse .navbar-brand, 387 | .navbar-inverse .navbar-nav > li > a { 388 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); 389 | } 390 | .navbar-static-top, 391 | .navbar-fixed-top, 392 | .navbar-fixed-bottom { 393 | border-radius: 0; 394 | } 395 | @media (max-width: 767px) { 396 | .navbar .navbar-nav .open .dropdown-menu > .active > a, 397 | .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, 398 | .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { 399 | color: #fff; 400 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 401 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 402 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); 403 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); 404 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); 405 | background-repeat: repeat-x; 406 | } 407 | } 408 | .alert { 409 | text-shadow: 0 1px 0 rgba(255, 255, 255, .2); 410 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); 411 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); 412 | } 413 | .alert-success { 414 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); 415 | background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); 416 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); 417 | background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); 418 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); 419 | background-repeat: repeat-x; 420 | border-color: #b2dba1; 421 | } 422 | .alert-info { 423 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); 424 | background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); 425 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); 426 | background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); 427 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); 428 | background-repeat: repeat-x; 429 | border-color: #9acfea; 430 | } 431 | .alert-warning { 432 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); 433 | background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); 434 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); 435 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); 436 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); 437 | background-repeat: repeat-x; 438 | border-color: #f5e79e; 439 | } 440 | .alert-danger { 441 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); 442 | background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); 443 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); 444 | background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); 445 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); 446 | background-repeat: repeat-x; 447 | border-color: #dca7a7; 448 | } 449 | .progress { 450 | background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); 451 | background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); 452 | background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); 453 | background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); 454 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); 455 | background-repeat: repeat-x; 456 | } 457 | .progress-bar { 458 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); 459 | background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); 460 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090)); 461 | background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); 462 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); 463 | background-repeat: repeat-x; 464 | } 465 | .progress-bar-success { 466 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); 467 | background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); 468 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); 469 | background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); 470 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); 471 | background-repeat: repeat-x; 472 | } 473 | .progress-bar-info { 474 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); 475 | background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); 476 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); 477 | background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); 478 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); 479 | background-repeat: repeat-x; 480 | } 481 | .progress-bar-warning { 482 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); 483 | background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); 484 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); 485 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); 486 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); 487 | background-repeat: repeat-x; 488 | } 489 | .progress-bar-danger { 490 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); 491 | background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); 492 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); 493 | background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); 494 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); 495 | background-repeat: repeat-x; 496 | } 497 | .progress-bar-striped { 498 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); 499 | background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); 500 | background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); 501 | } 502 | .list-group { 503 | border-radius: 4px; 504 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 505 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 506 | } 507 | .list-group-item.active, 508 | .list-group-item.active:hover, 509 | .list-group-item.active:focus { 510 | text-shadow: 0 -1px 0 #286090; 511 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); 512 | background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); 513 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a)); 514 | background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); 515 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); 516 | background-repeat: repeat-x; 517 | border-color: #2b669a; 518 | } 519 | .list-group-item.active .badge, 520 | .list-group-item.active:hover .badge, 521 | .list-group-item.active:focus .badge { 522 | text-shadow: none; 523 | } 524 | .panel { 525 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); 526 | box-shadow: 0 1px 2px rgba(0, 0, 0, .05); 527 | } 528 | .panel-default > .panel-heading { 529 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 530 | background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 531 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); 532 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); 533 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); 534 | background-repeat: repeat-x; 535 | } 536 | .panel-primary > .panel-heading { 537 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 538 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 539 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); 540 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); 541 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); 542 | background-repeat: repeat-x; 543 | } 544 | .panel-success > .panel-heading { 545 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); 546 | background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); 547 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); 548 | background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); 549 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); 550 | background-repeat: repeat-x; 551 | } 552 | .panel-info > .panel-heading { 553 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); 554 | background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); 555 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); 556 | background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); 557 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); 558 | background-repeat: repeat-x; 559 | } 560 | .panel-warning > .panel-heading { 561 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); 562 | background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); 563 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); 564 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); 565 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); 566 | background-repeat: repeat-x; 567 | } 568 | .panel-danger > .panel-heading { 569 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); 570 | background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); 571 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); 572 | background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); 573 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); 574 | background-repeat: repeat-x; 575 | } 576 | .well { 577 | background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); 578 | background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); 579 | background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); 580 | background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); 581 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); 582 | background-repeat: repeat-x; 583 | border-color: #dcdcdc; 584 | -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); 585 | box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); 586 | } 587 | /*# sourceMappingURL=bootstrap-theme.css.map */ 588 | -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/css/bootstrap-theme.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["bootstrap-theme.css","less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"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","file":"bootstrap-theme.css","sourcesContent":["/*!\n * Bootstrap v3.3.6 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","/*!\n * Bootstrap v3.3.6 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/css/bootstrap-theme.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.3.6 (http://getbootstrap.com) 3 | * Copyright 2011-2015 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} 6 | /*# sourceMappingURL=bootstrap-theme.min.css.map */ -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/css/bootstrap-theme.min.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damienbod/Angular2AutoCompleteAspNetCoreElasticsearch/688dc3f2ee6dd2029c63ea85c093f9009e02ce3e/src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damienbod/Angular2AutoCompleteAspNetCoreElasticsearch/688dc3f2ee6dd2029c63ea85c093f9009e02ce3e/src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damienbod/Angular2AutoCompleteAspNetCoreElasticsearch/688dc3f2ee6dd2029c63ea85c093f9009e02ce3e/src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damienbod/Angular2AutoCompleteAspNetCoreElasticsearch/688dc3f2ee6dd2029c63ea85c093f9009e02ce3e/src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/images/damienbod.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damienbod/Angular2AutoCompleteAspNetCoreElasticsearch/688dc3f2ee6dd2029c63ea85c093f9009e02ce3e/src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/images/damienbod.jpg -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/images/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damienbod/Angular2AutoCompleteAspNetCoreElasticsearch/688dc3f2ee6dd2029c63ea85c093f9009e02ce3e/src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/images/github.png -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/images/mvp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damienbod/Angular2AutoCompleteAspNetCoreElasticsearch/688dc3f2ee6dd2029c63ea85c093f9009e02ce3e/src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/images/mvp.png -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/images/socialTwitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damienbod/Angular2AutoCompleteAspNetCoreElasticsearch/688dc3f2ee6dd2029c63ea85c093f9009e02ce3e/src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/images/socialTwitter.png -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/index.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | Angular2 Auto Complete, ASP.NET Core Elasticsearch 12 | 13 | 14 | 15 | Loading... 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/main-aot.ts: -------------------------------------------------------------------------------- 1 | // Entry point for AoT compilation. 2 | 3 | import { platformBrowser } from '@angular/platform-browser'; 4 | import { enableProdMode } from '@angular/core'; 5 | import { AppModuleNgFactory } from '../aot/angularApp/app/app.module.ngfactory'; 6 | 7 | enableProdMode(); 8 | 9 | platformBrowser().bootstrapModuleFactory(AppModuleNgFactory); 10 | -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/main.ts: -------------------------------------------------------------------------------- 1 | // Entry point for JiT compilation. 2 | export * from './polyfills'; 3 | export * from './vendor'; 4 | 5 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 6 | import { AppModule } from './app/app.module'; 7 | 8 | platformBrowserDynamic().bootstrapModule(AppModule); 9 | -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/polyfills.ts: -------------------------------------------------------------------------------- 1 | import 'ie-shim'; // Internet Explorer 9 support. 2 | 3 | import 'core-js/es6/symbol'; 4 | import 'core-js/es6/object'; 5 | import 'core-js/es6/function'; 6 | import 'core-js/es6/parse-int'; 7 | import 'core-js/es6/parse-float'; 8 | import 'core-js/es6/number'; 9 | import 'core-js/es6/math'; 10 | import 'core-js/es6/string'; 11 | import 'core-js/es6/date'; 12 | import 'core-js/es6/array'; 13 | import 'core-js/es6/regexp'; 14 | import 'core-js/es6/map'; 15 | import 'core-js/es6/set'; 16 | import 'core-js/es6/weak-map'; 17 | import 'core-js/es6/weak-set'; 18 | import 'core-js/es6/typed'; 19 | import 'core-js/es6/reflect'; 20 | import 'core-js/es7/reflect'; 21 | 22 | import 'zone.js/dist/zone'; 23 | 24 | import 'ts-helpers'; 25 | -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/style/app.scss: -------------------------------------------------------------------------------- 1 | a { 2 | color: #03A9F4; 3 | } 4 | 5 | .completer-input { 6 | width: 500px; 7 | } 8 | -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/angularApp/vendor.ts: -------------------------------------------------------------------------------- 1 | import 'ng2-completer'; 2 | 3 | import 'jquery/src/jquery'; 4 | import 'bootstrap/dist/js/bootstrap'; 5 | 6 | import 'bootstrap/dist/css/bootstrap.css'; 7 | import 'bootstrap/dist/css/bootstrap-theme.css'; 8 | 9 | import '../favicon.ico'; -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "LogLevel": { 5 | "Default": "Debug", 6 | "System": "Information", 7 | "Microsoft": "Information" 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damienbod/Angular2AutoCompleteAspNetCoreElasticsearch/688dc3f2ee6dd2029c63ea85c093f9009e02ce3e/src/AngularAutoCompleteAspNetCoreElasticsearch/favicon.ico -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular2-webpack-visualstudio", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "wwwroot/index.html", 6 | "author": "", 7 | "license": "ISC", 8 | "scripts": { 9 | "ngc": "ngc -p ./tsconfig-aot.json", 10 | "start": "concurrently \"webpack-dev-server --hot --inline --port 8080\" \"dotnet run\" ", 11 | "webpack-dev": "set NODE_ENV=development && webpack", 12 | "webpack-production": "set NODE_ENV=production && webpack", 13 | "build-dev": "npm run webpack-dev", 14 | "build-production": "npm run ngc && npm run webpack-production", 15 | "watch-webpack-dev": "set NODE_ENV=development && webpack --watch --color", 16 | "watch-webpack-production": "npm run build-production --watch --color", 17 | "publish-for-iis": "npm run build-production && dotnet publish -c Release" 18 | }, 19 | "dependencies": { 20 | "@angular/common": "~2.4.6", 21 | "@angular/compiler": "~2.4.6", 22 | "@angular/core": "~2.4.6", 23 | "@angular/forms": "~2.4.6", 24 | "@angular/http": "~2.4.6", 25 | "@angular/platform-browser": "~2.4.6", 26 | "@angular/platform-browser-dynamic": "~2.4.6", 27 | "@angular/router": "~3.4.6", 28 | "@angular/upgrade": "~2.4.6", 29 | "angular-in-memory-web-api": "0.2.4", 30 | "core-js": "2.4.1", 31 | "reflect-metadata": "0.1.9", 32 | "rxjs": "5.0.3", 33 | "zone.js": "0.7.5", 34 | "@angular/compiler-cli": "~2.4.6", 35 | "@angular/platform-server": "~2.4.6", 36 | "bootstrap": "^3.3.7", 37 | "ie-shim": "~0.1.0", 38 | "ng2-completer": "1.0.0" 39 | }, 40 | "devDependencies": { 41 | "@types/node": "7.0.0", 42 | "angular2-template-loader": "0.6.0", 43 | "angular-router-loader": "^0.5.0", 44 | "awesome-typescript-loader": "^2.2.4", 45 | "clean-webpack-plugin": "^0.1.15", 46 | "concurrently": "^3.1.0", 47 | "copy-webpack-plugin": "^4.0.1", 48 | "css-loader": "^0.26.1", 49 | "file-loader": "^0.9.0", 50 | "html-webpack-plugin": "^2.26.0", 51 | "jquery": "^2.2.0", 52 | "json-loader": "^0.5.4", 53 | "node-sass": "^4.3.0", 54 | "raw-loader": "^0.5.1", 55 | "rimraf": "^2.5.4", 56 | "sass-loader": "^4.1.1", 57 | "source-map-loader": "^0.1.6", 58 | "style-loader": "^0.13.1", 59 | "ts-helpers": "^1.1.2", 60 | "tslint": "^4.3.1", 61 | "tslint-loader": "^3.3.0", 62 | "typescript": "2.0.3", 63 | "url-loader": "^0.5.7", 64 | "webpack": "^2.2.1", 65 | "webpack-dev-server": "2.2.1" 66 | }, 67 | "-vs-binding": { 68 | "ProjectOpened": [ 69 | "watch-webpack-dev" 70 | ] 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/runtimeconfig.template.json: -------------------------------------------------------------------------------- 1 | { 2 | "gcServer": true 3 | } -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/tsconfig-aot.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "module": "es2015", 5 | "moduleResolution": "node", 6 | "sourceMap": false, 7 | "emitDecoratorMetadata": true, 8 | "experimentalDecorators": true, 9 | "removeComments": true, 10 | "noImplicitAny": true, 11 | "suppressImplicitAnyIndexErrors": true, 12 | "skipLibCheck": true, 13 | "lib": [ 14 | "es2015", 15 | "dom" 16 | ] 17 | }, 18 | "files": [ 19 | "angularApp/app/app.module.ts", 20 | "angularApp/main-aot.ts" 21 | ], 22 | "angularCompilerOptions": { 23 | "genDir": "aot", 24 | "skipMetadataEmit": true 25 | }, 26 | "compileOnSave": false, 27 | "buildOnSave": false 28 | } -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "module": "es2015", 5 | "moduleResolution": "node", 6 | "sourceMap": true, 7 | "emitDecoratorMetadata": true, 8 | "experimentalDecorators": true, 9 | "removeComments": true, 10 | "noImplicitAny": true, 11 | "skipLibCheck": true, 12 | "lib": [ 13 | "es2015", 14 | "dom" 15 | ], 16 | "types": [ 17 | "node" 18 | ] 19 | }, 20 | "files": [ 21 | "angularApp/app/app.module.ts", 22 | "angularApp/main.ts" 23 | ], 24 | "awesomeTypescriptLoaderOptions": { 25 | "useWebpackText": true 26 | }, 27 | "compileOnSave": false, 28 | "buildOnSave": false 29 | } 30 | -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "class-name": true, 4 | "comment-format": [ 5 | true 6 | ], 7 | "curly": true, 8 | "eofline": false, 9 | "forin": false, 10 | "indent": [ 11 | false, 12 | "spaces" 13 | ], 14 | "label-position": true, 15 | "max-line-length": [ 16 | true, 17 | 200 18 | ], 19 | "member-access": false, 20 | "member-ordering": [ 21 | true, 22 | "static-before-instance", 23 | "variables-before-functions" 24 | ], 25 | "no-arg": true, 26 | "no-bitwise": true, 27 | "no-console": [ 28 | true, 29 | "debug", 30 | "info", 31 | "time", 32 | "timeEnd", 33 | "trace" 34 | ], 35 | "no-construct": true, 36 | "no-debugger": true, 37 | "no-duplicate-variable": true, 38 | "no-empty": false, 39 | "no-eval": true, 40 | "no-inferrable-types": [ true ], 41 | "no-shadowed-variable": false, 42 | "no-string-literal": false, 43 | "no-switch-case-fall-through": false, 44 | "no-trailing-whitespace": true, 45 | "no-unused-expression": true, 46 | "no-use-before-declare": true, 47 | "no-var-keyword": true, 48 | "object-literal-sort-keys": false, 49 | "one-line": [ 50 | true, 51 | "check-open-brace", 52 | "check-catch", 53 | "check-else", 54 | "check-whitespace" 55 | ], 56 | "quotemark": [ 57 | true, 58 | "single" 59 | ], 60 | "radix": false, 61 | "semicolon": [ 62 | "always" 63 | ], 64 | "triple-equals": [ 65 | false, 66 | "allow-null-check" 67 | ], 68 | "typedef-whitespace": [ 69 | true, 70 | { 71 | "index-signature": "nospace", 72 | "parameter": "nospace", 73 | "property-declaration": "nospace", 74 | "variable-declaration": "nospace" 75 | } 76 | ], 77 | "variable-name": false, 78 | "whitespace": [ 79 | true, 80 | "check-branch", 81 | "check-decl", 82 | "check-operator", 83 | "check-separator", 84 | "check-type" 85 | ] 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/web.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/webpack.config.js: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | var environment = (process.env.NODE_ENV || "development").trim(); 4 | 5 | if (environment === "development") { 6 | module.exports = require('./webpack.dev.js'); 7 | } else { 8 | module.exports = require('./webpack.prod.js'); 9 | } -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/webpack.dev.js: -------------------------------------------------------------------------------- 1 | var path = require('path'); 2 | 3 | var webpack = require('webpack'); 4 | 5 | var HtmlWebpackPlugin = require('html-webpack-plugin'); 6 | var CopyWebpackPlugin = require('copy-webpack-plugin'); 7 | var CleanWebpackPlugin = require('clean-webpack-plugin'); 8 | var helpers = require('./webpack.helpers'); 9 | 10 | console.log('@@@@@@@@@ USING DEVELOPMENT @@@@@@@@@@@@@@@'); 11 | 12 | module.exports = { 13 | 14 | devtool: 'source-map', 15 | performance: { 16 | hints: false 17 | }, 18 | entry: { 19 | 'app': './angularApp/main.ts' 20 | }, 21 | 22 | output: { 23 | path: __dirname + '/wwwroot/', 24 | filename: 'dist/[name].bundle.js', 25 | chunkFilename: 'dist/[id].chunk.js', 26 | publicPath: '/' 27 | }, 28 | 29 | resolve: { 30 | extensions: ['.ts', '.js', '.json', '.css', '.scss', '.html'] 31 | }, 32 | 33 | devServer: { 34 | historyApiFallback: true, 35 | contentBase: path.join(__dirname, '/wwwroot/'), 36 | watchOptions: { 37 | aggregateTimeout: 300, 38 | poll: 1000 39 | } 40 | }, 41 | 42 | module: { 43 | rules: [ 44 | { 45 | test: /\.ts$/, 46 | loaders: [ 47 | 'awesome-typescript-loader', 48 | 'angular-router-loader', 49 | 'angular2-template-loader', 50 | 'source-map-loader', 51 | 'tslint-loader' 52 | ] 53 | }, 54 | { 55 | test: /\.(png|jpg|gif|woff|woff2|ttf|svg|eot)$/, 56 | loader: 'file-loader?name=assets/[name]-[hash:6].[ext]' 57 | }, 58 | { 59 | test: /favicon.ico$/, 60 | loader: 'file-loader?name=/[name].[ext]' 61 | }, 62 | { 63 | test: /\.css$/, 64 | loader: 'style-loader!css-loader' 65 | }, 66 | { 67 | test: /\.scss$/, 68 | exclude: /node_modules/, 69 | loaders: ['style-loader', 'css-loader', 'sass-loader'] 70 | }, 71 | { 72 | test: /\.html$/, 73 | loader: 'raw-loader' 74 | } 75 | ], 76 | exprContextCritical: false 77 | }, 78 | plugins: [ 79 | new webpack.optimize.CommonsChunkPlugin({ name: ['app', 'polyfills'] }), 80 | 81 | new CleanWebpackPlugin( 82 | [ 83 | './wwwroot/dist', 84 | './wwwroot/assets' 85 | ] 86 | ), 87 | 88 | new HtmlWebpackPlugin({ 89 | filename: 'index.html', 90 | inject: 'body', 91 | template: 'angularApp/index.html' 92 | }), 93 | 94 | new CopyWebpackPlugin([ 95 | { from: './angularApp/images/*.*', to: 'assets/', flatten: true } 96 | ]) 97 | ] 98 | 99 | }; 100 | 101 | -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/webpack.helpers.js: -------------------------------------------------------------------------------- 1 | var path = require('path'); 2 | 3 | module.exports = { 4 | packageSort: function (packages) { 5 | // packages = ['polyfills', 'vendor', 'app'] 6 | var len = packages.length - 1; 7 | var first = packages[0]; 8 | var last = packages[len]; 9 | return function sort(a, b) { 10 | // polyfills always first 11 | if (a.names[0] === first) { 12 | return -1; 13 | } 14 | // main always last 15 | if (a.names[0] === last) { 16 | return 1; 17 | } 18 | // vendor before app 19 | if (a.names[0] !== first && b.names[0] === last) { 20 | return -1; 21 | } else { 22 | return 1; 23 | } 24 | }; 25 | } 26 | }; -------------------------------------------------------------------------------- /src/AngularAutoCompleteAspNetCoreElasticsearch/webpack.prod.js: -------------------------------------------------------------------------------- 1 | var path = require('path'); 2 | 3 | var webpack = require('webpack'); 4 | 5 | var HtmlWebpackPlugin = require('html-webpack-plugin'); 6 | var CopyWebpackPlugin = require('copy-webpack-plugin'); 7 | var CleanWebpackPlugin = require('clean-webpack-plugin'); 8 | var helpers = require('./webpack.helpers'); 9 | 10 | console.log('@@@@@@@@@ USING PRODUCTION @@@@@@@@@@@@@@@'); 11 | 12 | module.exports = { 13 | 14 | entry: { 15 | 'vendor': './angularApp/vendor.ts', 16 | 'polyfills': './angularApp/polyfills.ts', 17 | 'app': './angularApp/main-aot.ts' // AoT compilation 18 | }, 19 | 20 | output: { 21 | path: './wwwroot/', 22 | filename: 'dist/[name].[hash].bundle.js', 23 | chunkFilename: 'dist/[id].[hash].chunk.js', 24 | publicPath: '/' 25 | }, 26 | 27 | resolve: { 28 | extensions: ['.ts', '.js', '.json', '.css', '.scss', '.html'] 29 | }, 30 | 31 | devServer: { 32 | historyApiFallback: true, 33 | stats: 'minimal', 34 | outputPath: path.join(__dirname, 'wwwroot/') 35 | }, 36 | 37 | module: { 38 | rules: [ 39 | { 40 | test: /\.ts$/, 41 | loaders: [ 42 | 'awesome-typescript-loader', 43 | 'angular-router-loader?aot=true&genDir=aot/' 44 | ] 45 | }, 46 | { 47 | test: /\.(png|jpg|gif|woff|woff2|ttf|svg|eot)$/, 48 | loader: 'file-loader?name=assets/[name]-[hash:6].[ext]' 49 | }, 50 | { 51 | test: /favicon.ico$/, 52 | loader: 'file-loader?name=/[name].[ext]' 53 | }, 54 | { 55 | test: /\.css$/, 56 | loader: 'style-loader!css-loader' 57 | }, 58 | { 59 | test: /\.scss$/, 60 | exclude: /node_modules/, 61 | loaders: ['style-loader', 'css-loader', 'sass-loader'] 62 | }, 63 | { 64 | test: /\.html$/, 65 | loader: 'raw-loader' 66 | } 67 | ], 68 | exprContextCritical: false 69 | }, 70 | 71 | plugins: [ 72 | new CleanWebpackPlugin( 73 | [ 74 | './wwwroot/dist', 75 | './wwwroot/assets' 76 | ] 77 | ), 78 | new webpack.NoEmitOnErrorsPlugin(), 79 | new webpack.optimize.UglifyJsPlugin({ 80 | compress: { 81 | warnings: false 82 | }, 83 | output: { 84 | comments: false 85 | }, 86 | sourceMap: false 87 | }), 88 | new webpack.optimize.CommonsChunkPlugin( 89 | { 90 | name: ['vendor', 'polyfills'] 91 | }), 92 | 93 | new HtmlWebpackPlugin({ 94 | filename: 'index.html', 95 | inject: 'body', 96 | template: 'angularApp/index.html' 97 | }), 98 | 99 | new CopyWebpackPlugin([ 100 | { from: './angularApp/images/*.*', to: 'assets/', flatten: true } 101 | ]) 102 | ] 103 | }; 104 | 105 | --------------------------------------------------------------------------------