├── .gitattributes ├── .gitignore ├── CREDITS.txt ├── LICENSE.txt ├── README.md ├── package.json └── src ├── Application.sln ├── NuGet.config ├── Settings.StyleCop ├── Web.Tests ├── App.config ├── Properties │ └── AssemblyInfo.cs ├── Web.Tests.csproj └── packages.config └── Web ├── App_Start ├── BundleConfig.cs ├── RouteConfig.cs └── Startup.Auth.cs ├── Content ├── app.css ├── app.less ├── bootstrap │ ├── alerts.less │ ├── badges.less │ ├── bootstrap.less │ ├── breadcrumbs.less │ ├── button-groups.less │ ├── buttons.less │ ├── carousel.less │ ├── close.less │ ├── code.less │ ├── component-animations.less │ ├── dropdowns.less │ ├── forms.less │ ├── glyphicons.less │ ├── grid.less │ ├── input-groups.less │ ├── jumbotron.less │ ├── labels.less │ ├── list-group.less │ ├── media.less │ ├── mixins.less │ ├── modals.less │ ├── navbar.less │ ├── navs.less │ ├── normalize.less │ ├── pager.less │ ├── pagination.less │ ├── panels.less │ ├── popovers.less │ ├── print.less │ ├── progress-bars.less │ ├── responsive-utilities.less │ ├── scaffolding.less │ ├── tables.less │ ├── theme.less │ ├── thumbnails.less │ ├── tooltip.less │ ├── type.less │ ├── utilities.less │ ├── variables.less │ └── wells.less ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ └── glyphicons-halflings-regular.woff ├── jasmine │ ├── jasmine.css │ └── jasmine_favicon.png └── variables.less ├── Global.asax ├── Global.asax.cs ├── Properties └── AssemblyInfo.cs ├── Routing ├── DefaultRoute.cs └── DefaultRouteHandler.cs ├── Scripts ├── .jshintrc ├── Chutzpah.json ├── _references.ts ├── app.ts ├── controllers.ts ├── controllersSpec.ts ├── directives.ts ├── directivesSpec.ts ├── filters.ts ├── filtersSpec.ts ├── services.ts ├── servicesSpec.ts ├── typings │ ├── angularjs │ │ ├── angular-cookies.d.ts │ │ ├── angular-mocks.d.ts │ │ ├── angular-resource.d.ts │ │ ├── angular-route.d.ts │ │ ├── angular-sanitize.d.ts │ │ └── angular.d.ts │ ├── jasmine │ │ └── jasmine.d.ts │ ├── jquery │ │ └── jquery.d.ts │ └── signalr │ │ └── signalr.d.ts └── vendor │ ├── angular-animate.js │ ├── angular-animate.min.js │ ├── angular-animate.min.js.map │ ├── angular-cookies.js │ ├── angular-cookies.min.js │ ├── angular-cookies.min.js.map │ ├── angular-csp.css │ ├── angular-loader.js │ ├── angular-loader.min.js │ ├── angular-loader.min.js.map │ ├── angular-mocks.js │ ├── angular-resource.js │ ├── angular-resource.min.js │ ├── angular-resource.min.js.map │ ├── angular-route.js │ ├── angular-route.min.js │ ├── angular-route.min.js.map │ ├── angular-sanitize.js │ ├── angular-sanitize.min.js │ ├── angular-sanitize.min.js.map │ ├── angular-scenario.js │ ├── angular-touch.js │ ├── angular-touch.min.js │ ├── angular-touch.min.js.map │ ├── angular-ui-router.js │ ├── angular-ui-router.min.js │ ├── angular.js │ ├── angular.min.js │ ├── angular.min.js.map │ ├── errors.json │ ├── i18n │ ├── angular-locale_af-na.js │ ├── angular-locale_af-za.js │ ├── angular-locale_af.js │ ├── angular-locale_am-et.js │ ├── angular-locale_am.js │ ├── angular-locale_ar-001.js │ ├── angular-locale_ar-ae.js │ ├── angular-locale_ar-bh.js │ ├── angular-locale_ar-dz.js │ ├── angular-locale_ar-eg.js │ ├── angular-locale_ar-iq.js │ ├── angular-locale_ar-jo.js │ ├── angular-locale_ar-kw.js │ ├── angular-locale_ar-lb.js │ ├── angular-locale_ar-ly.js │ ├── angular-locale_ar-ma.js │ ├── angular-locale_ar-om.js │ ├── angular-locale_ar-qa.js │ ├── angular-locale_ar-sa.js │ ├── angular-locale_ar-sd.js │ ├── angular-locale_ar-sy.js │ ├── angular-locale_ar-tn.js │ ├── angular-locale_ar-ye.js │ ├── angular-locale_ar.js │ ├── angular-locale_bg-bg.js │ ├── angular-locale_bg.js │ ├── angular-locale_bn-bd.js │ ├── angular-locale_bn-in.js │ ├── angular-locale_bn.js │ ├── angular-locale_ca-ad.js │ ├── angular-locale_ca-es.js │ ├── angular-locale_ca.js │ ├── angular-locale_cs-cz.js │ ├── angular-locale_cs.js │ ├── angular-locale_da-dk.js │ ├── angular-locale_da.js │ ├── angular-locale_de-at.js │ ├── angular-locale_de-be.js │ ├── angular-locale_de-ch.js │ ├── angular-locale_de-de.js │ ├── angular-locale_de-li.js │ ├── angular-locale_de-lu.js │ ├── angular-locale_de.js │ ├── angular-locale_el-cy.js │ ├── angular-locale_el-gr.js │ ├── angular-locale_el.js │ ├── angular-locale_en-as.js │ ├── angular-locale_en-au.js │ ├── angular-locale_en-bb.js │ ├── angular-locale_en-be.js │ ├── angular-locale_en-bm.js │ ├── angular-locale_en-bw.js │ ├── angular-locale_en-bz.js │ ├── angular-locale_en-ca.js │ ├── angular-locale_en-dsrt-us.js │ ├── angular-locale_en-dsrt.js │ ├── angular-locale_en-fm.js │ ├── angular-locale_en-gb.js │ ├── angular-locale_en-gu.js │ ├── angular-locale_en-gy.js │ ├── angular-locale_en-hk.js │ ├── angular-locale_en-ie.js │ ├── angular-locale_en-in.js │ ├── angular-locale_en-iso.js │ ├── angular-locale_en-jm.js │ ├── angular-locale_en-mh.js │ ├── angular-locale_en-mp.js │ ├── angular-locale_en-mt.js │ ├── angular-locale_en-mu.js │ ├── angular-locale_en-na.js │ ├── angular-locale_en-nz.js │ ├── angular-locale_en-ph.js │ ├── angular-locale_en-pk.js │ ├── angular-locale_en-pr.js │ ├── angular-locale_en-pw.js │ ├── angular-locale_en-sg.js │ ├── angular-locale_en-tc.js │ ├── angular-locale_en-tt.js │ ├── angular-locale_en-um.js │ ├── angular-locale_en-us.js │ ├── angular-locale_en-vg.js │ ├── angular-locale_en-vi.js │ ├── angular-locale_en-za.js │ ├── angular-locale_en-zw.js │ ├── angular-locale_en.js │ ├── angular-locale_es-419.js │ ├── angular-locale_es-ar.js │ ├── angular-locale_es-bo.js │ ├── angular-locale_es-cl.js │ ├── angular-locale_es-co.js │ ├── angular-locale_es-cr.js │ ├── angular-locale_es-do.js │ ├── angular-locale_es-ea.js │ ├── angular-locale_es-ec.js │ ├── angular-locale_es-es.js │ ├── angular-locale_es-gq.js │ ├── angular-locale_es-gt.js │ ├── angular-locale_es-hn.js │ ├── angular-locale_es-ic.js │ ├── angular-locale_es-mx.js │ ├── angular-locale_es-ni.js │ ├── angular-locale_es-pa.js │ ├── angular-locale_es-pe.js │ ├── angular-locale_es-pr.js │ ├── angular-locale_es-py.js │ ├── angular-locale_es-sv.js │ ├── angular-locale_es-us.js │ ├── angular-locale_es-uy.js │ ├── angular-locale_es-ve.js │ ├── angular-locale_es.js │ ├── angular-locale_et-ee.js │ ├── angular-locale_et.js │ ├── angular-locale_eu-es.js │ ├── angular-locale_eu.js │ ├── angular-locale_fa-af.js │ ├── angular-locale_fa-ir.js │ ├── angular-locale_fa.js │ ├── angular-locale_fi-fi.js │ ├── angular-locale_fi.js │ ├── angular-locale_fil-ph.js │ ├── angular-locale_fil.js │ ├── angular-locale_fr-be.js │ ├── angular-locale_fr-bf.js │ ├── angular-locale_fr-bi.js │ ├── angular-locale_fr-bj.js │ ├── angular-locale_fr-bl.js │ ├── angular-locale_fr-ca.js │ ├── angular-locale_fr-cd.js │ ├── angular-locale_fr-cf.js │ ├── angular-locale_fr-cg.js │ ├── angular-locale_fr-ch.js │ ├── angular-locale_fr-ci.js │ ├── angular-locale_fr-cm.js │ ├── angular-locale_fr-dj.js │ ├── angular-locale_fr-fr.js │ ├── angular-locale_fr-ga.js │ ├── angular-locale_fr-gf.js │ ├── angular-locale_fr-gn.js │ ├── angular-locale_fr-gp.js │ ├── angular-locale_fr-gq.js │ ├── angular-locale_fr-km.js │ ├── angular-locale_fr-lu.js │ ├── angular-locale_fr-mc.js │ ├── angular-locale_fr-mf.js │ ├── angular-locale_fr-mg.js │ ├── angular-locale_fr-ml.js │ ├── angular-locale_fr-mq.js │ ├── angular-locale_fr-ne.js │ ├── angular-locale_fr-re.js │ ├── angular-locale_fr-yt.js │ ├── angular-locale_fr.js │ ├── angular-locale_gl-es.js │ ├── angular-locale_gl.js │ ├── angular-locale_gsw-ch.js │ ├── angular-locale_gsw.js │ ├── angular-locale_gu-in.js │ ├── angular-locale_gu.js │ ├── angular-locale_he-il.js │ ├── angular-locale_he.js │ ├── angular-locale_hi-in.js │ ├── angular-locale_hi.js │ ├── angular-locale_hr-hr.js │ ├── angular-locale_hr.js │ ├── angular-locale_hu-hu.js │ ├── angular-locale_hu.js │ ├── angular-locale_id-id.js │ ├── angular-locale_id.js │ ├── angular-locale_in.js │ ├── angular-locale_is-is.js │ ├── angular-locale_is.js │ ├── angular-locale_it-it.js │ ├── angular-locale_it-sm.js │ ├── angular-locale_it.js │ ├── angular-locale_iw.js │ ├── angular-locale_ja-jp.js │ ├── angular-locale_ja.js │ ├── angular-locale_kn-in.js │ ├── angular-locale_kn.js │ ├── angular-locale_ko-kr.js │ ├── angular-locale_ko.js │ ├── angular-locale_ln-cd.js │ ├── angular-locale_ln.js │ ├── angular-locale_lt-lt.js │ ├── angular-locale_lt.js │ ├── angular-locale_lv-lv.js │ ├── angular-locale_lv.js │ ├── angular-locale_ml-in.js │ ├── angular-locale_ml.js │ ├── angular-locale_mr-in.js │ ├── angular-locale_mr.js │ ├── angular-locale_ms-my.js │ ├── angular-locale_ms.js │ ├── angular-locale_mt-mt.js │ ├── angular-locale_mt.js │ ├── angular-locale_nl-cw.js │ ├── angular-locale_nl-nl.js │ ├── angular-locale_nl-sx.js │ ├── angular-locale_nl.js │ ├── angular-locale_no.js │ ├── angular-locale_or-in.js │ ├── angular-locale_or.js │ ├── angular-locale_pl-pl.js │ ├── angular-locale_pl.js │ ├── angular-locale_pt-br.js │ ├── angular-locale_pt-pt.js │ ├── angular-locale_pt.js │ ├── angular-locale_ro-ro.js │ ├── angular-locale_ro.js │ ├── angular-locale_ru-ru.js │ ├── angular-locale_ru.js │ ├── angular-locale_sk-sk.js │ ├── angular-locale_sk.js │ ├── angular-locale_sl-si.js │ ├── angular-locale_sl.js │ ├── angular-locale_sq-al.js │ ├── angular-locale_sq.js │ ├── angular-locale_sr-cyrl-rs.js │ ├── angular-locale_sr-latn-rs.js │ ├── angular-locale_sr.js │ ├── angular-locale_sv-se.js │ ├── angular-locale_sv.js │ ├── angular-locale_sw-tz.js │ ├── angular-locale_sw.js │ ├── angular-locale_ta-in.js │ ├── angular-locale_ta.js │ ├── angular-locale_te-in.js │ ├── angular-locale_te.js │ ├── angular-locale_th-th.js │ ├── angular-locale_th.js │ ├── angular-locale_tl.js │ ├── angular-locale_tr-tr.js │ ├── angular-locale_tr.js │ ├── angular-locale_uk-ua.js │ ├── angular-locale_uk.js │ ├── angular-locale_ur-pk.js │ ├── angular-locale_ur.js │ ├── angular-locale_vi-vn.js │ ├── angular-locale_vi.js │ ├── angular-locale_zh-cn.js │ ├── angular-locale_zh-hans-cn.js │ ├── angular-locale_zh-hk.js │ ├── angular-locale_zh-tw.js │ ├── angular-locale_zh.js │ ├── angular-locale_zu-za.js │ └── angular-locale_zu.js │ ├── jasmine-html.js │ ├── jasmine.js │ ├── jquery-2.0.3.intellisense.js │ ├── jquery-2.0.3.js │ ├── jquery-2.0.3.min.js │ └── jquery-2.0.3.min.map ├── Startup.cs ├── Views ├── 404.cshtml ├── About.cshtml ├── Index.cshtml ├── Jasmine │ └── SpecRunner.cshtml ├── Login.cshtml ├── _Layout.cshtml └── _PageStart.cshtml ├── Web.Debug.config ├── Web.Release.config ├── Web.config ├── Web.csproj ├── apple-touch-icon-precomposed.png ├── crossdomain.xml ├── favicon.ico ├── humans.txt ├── packages.config └── robots.txt /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | *.sln merge=union 7 | *.csproj merge=union 8 | *.vbproj merge=union 9 | *.fsproj merge=union 10 | *.dbproj merge=union 11 | 12 | # Standard to msysgit 13 | *.doc diff=astextplain 14 | *.DOC diff=astextplain 15 | *.docx diff=astextplain 16 | *.DOCX diff=astextplain 17 | *.dot diff=astextplain 18 | *.DOT diff=astextplain 19 | *.pdf diff=astextplain 20 | *.PDF diff=astextplain 21 | *.rtf diff=astextplain 22 | *.RTF diff=astextplain 23 | -------------------------------------------------------------------------------- /CREDITS.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013 Konstantin Tarkus, KriaSoft LLC 2 | https://github.com/kriasoft/AngularJS-SPA-Template 3 | 4 | This software is released under the MIT License (the "License"); 5 | you may not use the software except in compliance with the License. You 6 | can find a copy of the License in the file LICENSE.txt accompanying this 7 | file. 8 | 9 | This software includes or is derivative of works distributed under the 10 | licenses listed below. The full text for most of the licenses listed below 11 | can be found in the LICENSE.txt file accompanying each work. The original 12 | copyright notices have been preserved within the respective files and or 13 | packages. Please refer to the specific files and/or packages for more 14 | detailed information about the authors, copyright notices, and licenses. 15 | 16 | 17 | AngularJS 18 | ----- 19 | Website: http://angularjs.org/ 20 | Copyright: Copyright (c) 2010-2012 Google, Inc. http://angularjs.org 21 | License: The MIT License (MIT) 22 | 23 | Bootstrap 24 | ----- 25 | Website: http://getbootstrap.com 26 | Copyright: Copyright (c) 2013 Twitter, Inc. 27 | License: The Apache 2.0 License 28 | 29 | jQuery 30 | ----- 31 | Website: http://jquery.com 32 | Copyright: Copyright (c) 2010 John Resig, http://jquery.com 33 | License: The MIT License (MIT) 34 | 35 | Json.NET 36 | ----- 37 | Website: http://json.codeplex.com/ 38 | Copyright: Copyright (c) 2007 James Newton-King 39 | License: The MIT License (MIT) 40 | 41 | Moq 42 | ----- 43 | Website: https://github.com/Moq 44 | Copyright: Copyright (c) 2007. Clarius Consulting, 45 | Manas Technology Solutions, InSTEDD 46 | License: New BSD -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013 Konstantin Tarkus, KriaSoft LLC 4 | https://github.com/kriasoft/AngularJS-SPA-Template 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AngularJS-SPA-Template", 3 | "description": "AngularJS SPA Project Template for Visual Studio", 4 | "repository": "https://github.com/KriaSoft/AngularJS-SPA-Template", 5 | "devDependencies": { 6 | "phantomjs" : "~1.9", 7 | "karma" : "~0.10", 8 | "karma-junit-reporter" : "~0.1", 9 | "karma-jasmine" : "~0.1", 10 | "karma-ng-scenario" : "~0.1" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/Application.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 2013 4 | VisualStudioVersion = 12.0.21005.1 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{1D63ACA5-1A3C-41C5-AA17-A34AD0DD9DA3}" 7 | ProjectSection(SolutionItems) = preProject 8 | ..\CREDITS.txt = ..\CREDITS.txt 9 | ..\LICENSE.txt = ..\LICENSE.txt 10 | NuGet.config = NuGet.config 11 | ..\README.md = ..\README.md 12 | Settings.StyleCop = Settings.StyleCop 13 | EndProjectSection 14 | EndProject 15 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Web", "Web\Web.csproj", "{E9A8D3B5-0525-416A-BC5F-07B7B373397F}" 16 | EndProject 17 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Web.Tests", "Web.Tests\Web.Tests.csproj", "{DC3FB3E8-7B59-4741-8912-DF4966B9E392}" 18 | EndProject 19 | Global 20 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 21 | Debug|Any CPU = Debug|Any CPU 22 | Release|Any CPU = Release|Any CPU 23 | EndGlobalSection 24 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 25 | {E9A8D3B5-0525-416A-BC5F-07B7B373397F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 26 | {E9A8D3B5-0525-416A-BC5F-07B7B373397F}.Debug|Any CPU.Build.0 = Debug|Any CPU 27 | {E9A8D3B5-0525-416A-BC5F-07B7B373397F}.Release|Any CPU.ActiveCfg = Release|Any CPU 28 | {E9A8D3B5-0525-416A-BC5F-07B7B373397F}.Release|Any CPU.Build.0 = Release|Any CPU 29 | {DC3FB3E8-7B59-4741-8912-DF4966B9E392}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 30 | {DC3FB3E8-7B59-4741-8912-DF4966B9E392}.Debug|Any CPU.Build.0 = Debug|Any CPU 31 | {DC3FB3E8-7B59-4741-8912-DF4966B9E392}.Release|Any CPU.ActiveCfg = Release|Any CPU 32 | {DC3FB3E8-7B59-4741-8912-DF4966B9E392}.Release|Any CPU.Build.0 = Release|Any CPU 33 | EndGlobalSection 34 | GlobalSection(SolutionProperties) = preSolution 35 | HideSolutionNode = FALSE 36 | EndGlobalSection 37 | EndGlobal 38 | -------------------------------------------------------------------------------- /src/NuGet.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/Settings.StyleCop: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | False 8 | 9 | 10 | 11 | 12 | False 13 | 14 | 15 | 16 | 17 | False 18 | 19 | 20 | 21 | 22 | False 23 | 24 | 25 | 26 | 27 | False 28 | 29 | 30 | 31 | 32 | False 33 | 34 | 35 | 36 | 37 | KriaSoft LLC 38 | Copyright © 2013 Konstantin Tarkus, KriaSoft LLC. See LICENSE.txt 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /src/Web.Tests/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 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 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /src/Web.Tests/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | // -------------------------------------------------------------------------------------------------------------------- 2 | // 3 | // Copyright © 2013 Konstantin Tarkus, KriaSoft LLC. See LICENSE.txt 4 | // 5 | // -------------------------------------------------------------------------------------------------------------------- 6 | 7 | using System; 8 | using System.Reflection; 9 | using System.Resources; 10 | using System.Runtime.InteropServices; 11 | 12 | // General Information about an assembly is controlled through the following 13 | // set of attributes. Change these attribute values to modify the information 14 | // associated with an assembly. 15 | [assembly: AssemblyTitle("Web Application Tests")] 16 | [assembly: AssemblyDescription("")] 17 | [assembly: AssemblyConfiguration("")] 18 | [assembly: AssemblyCompany("KriaSoft LLC")] 19 | [assembly: AssemblyProduct("AngularJS SPA Template")] 20 | [assembly: AssemblyCopyright("Copyright © 2013 KriaSoft LLC")] 21 | [assembly: AssemblyTrademark("")] 22 | [assembly: AssemblyCulture("")] 23 | [assembly: NeutralResourcesLanguage("en-US")] 24 | 25 | // Setting ComVisible to false makes the types in this assembly not visible 26 | // to COM components. If you need to access a type in this assembly from 27 | // COM, set the ComVisible attribute to true on that type. 28 | [assembly: ComVisible(false)] 29 | 30 | // The following GUID is for the ID of the typelib if this project is exposed to COM 31 | [assembly: Guid("a2f2372f-e52a-4b63-beba-b9ffbc424880")] 32 | 33 | [assembly: CLSCompliant(true)] 34 | 35 | // Version information for an assembly consists of the following four values: 36 | // 37 | // Major Version 38 | // Minor Version 39 | // Build Number 40 | // Revision 41 | // 42 | // You can specify all the values or you can default the Revision and Build Numbers 43 | // by using the '*' as shown below: 44 | [assembly: AssemblyVersion("1.0.0.0")] 45 | [assembly: AssemblyFileVersion("1.0.0.0")] -------------------------------------------------------------------------------- /src/Web.Tests/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /src/Web/App_Start/BundleConfig.cs: -------------------------------------------------------------------------------- 1 | // -------------------------------------------------------------------------------------------------------------------- 2 | // 3 | // Copyright © 2013 Konstantin Tarkus, KriaSoft LLC. See LICENSE.txt 4 | // 5 | // -------------------------------------------------------------------------------------------------------------------- 6 | 7 | namespace App.Web 8 | { 9 | using System.Web; 10 | using System.Web.Optimization; 11 | 12 | public class BundleConfig 13 | { 14 | // For more information on bundling, visit http://go.microsoft.com/fwlink/?LinkId=301862 15 | public static void RegisterBundles(BundleCollection bundles) 16 | { 17 | bundles.Add(new StyleBundle("~/content/css/app").Include("~/content/app.css")); 18 | 19 | bundles.Add(new ScriptBundle("~/js/jquery").Include("~/scripts/vendor/jquery-{version}.js")); 20 | 21 | bundles.Add(new ScriptBundle("~/js/app").Include( 22 | "~/scripts/vendor/angular-ui-router.js", 23 | "~/scripts/filters.js", 24 | "~/scripts/services.js", 25 | "~/scripts/directives.js", 26 | "~/scripts/controllers.js", 27 | "~/scripts/app.js")); 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /src/Web/App_Start/RouteConfig.cs: -------------------------------------------------------------------------------- 1 | // -------------------------------------------------------------------------------------------------------------------- 2 | // 3 | // Copyright © 2013 Konstantin Tarkus, KriaSoft LLC. See LICENSE.txt 4 | // 5 | // -------------------------------------------------------------------------------------------------------------------- 6 | 7 | namespace App.Web 8 | { 9 | using System.Web.Routing; 10 | 11 | using App.Web.Routing; 12 | 13 | public class RouteConfig 14 | { 15 | public static void RegisterRoutes(RouteCollection routes) 16 | { 17 | routes.Add("Default", new DefaultRoute()); 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /src/Web/App_Start/Startup.Auth.cs: -------------------------------------------------------------------------------- 1 | // -------------------------------------------------------------------------------------------------------------------- 2 | // 3 | // Copyright © 2013 Konstantin Tarkus, KriaSoft LLC. See LICENSE.txt 4 | // 5 | // -------------------------------------------------------------------------------------------------------------------- 6 | 7 | namespace App.Web 8 | { 9 | using Microsoft.AspNet.Identity; 10 | using Microsoft.Owin; 11 | using Microsoft.Owin.Security.Cookies; 12 | using Owin; 13 | 14 | public partial class Startup 15 | { 16 | // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864 17 | public void ConfigureAuth(IAppBuilder app) 18 | { 19 | // Enable the application to use a cookie to store information for the signed in user 20 | app.UseCookieAuthentication(new CookieAuthenticationOptions 21 | { 22 | AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 23 | LoginPath = new PathString("/login") 24 | }); 25 | 26 | // Use a cookie to temporarily store information about a user logging in with a third party login provider 27 | app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 28 | 29 | //// Uncomment the following lines to enable logging in with third party login providers 30 | ////app.UseMicrosoftAccountAuthentication( 31 | //// clientId: "", 32 | //// clientSecret: ""); 33 | 34 | ////app.UseTwitterAuthentication( 35 | //// consumerKey: "", 36 | //// consumerSecret: ""); 37 | 38 | ////app.UseFacebookAuthentication( 39 | //// appId: "", 40 | //// appSecret: ""); 41 | 42 | ////app.UseGoogleAuthentication(); 43 | } 44 | } 45 | } -------------------------------------------------------------------------------- /src/Web/Content/app.less: -------------------------------------------------------------------------------- 1 | // Core variables and mixins 2 | @import "bootstrap\variables.less"; 3 | @import "variables.less"; 4 | @import "bootstrap\mixins.less"; 5 | 6 | // Reset 7 | @import "bootstrap\normalize.less"; 8 | @import "bootstrap\print.less"; 9 | 10 | // Core CSS 11 | @import "bootstrap\scaffolding.less"; 12 | @import "bootstrap\type.less"; 13 | @import "bootstrap\code.less"; 14 | @import "bootstrap\grid.less"; 15 | @import "bootstrap\tables.less"; 16 | @import "bootstrap\forms.less"; 17 | @import "bootstrap\buttons.less"; 18 | 19 | // Components 20 | @import "bootstrap\component-animations.less"; 21 | @import "bootstrap\glyphicons.less"; 22 | @import "bootstrap\dropdowns.less"; 23 | @import "bootstrap\button-groups.less"; 24 | @import "bootstrap\input-groups.less"; 25 | @import "bootstrap\navs.less"; 26 | @import "bootstrap\navbar.less"; 27 | @import "bootstrap\breadcrumbs.less"; 28 | @import "bootstrap\pagination.less"; 29 | @import "bootstrap\pager.less"; 30 | @import "bootstrap\labels.less"; 31 | @import "bootstrap\badges.less"; 32 | @import "bootstrap\jumbotron.less"; 33 | @import "bootstrap\thumbnails.less"; 34 | @import "bootstrap\alerts.less"; 35 | @import "bootstrap\progress-bars.less"; 36 | @import "bootstrap\media.less"; 37 | @import "bootstrap\list-group.less"; 38 | @import "bootstrap\panels.less"; 39 | @import "bootstrap\wells.less"; 40 | @import "bootstrap\close.less"; 41 | 42 | // Components w/ JavaScript 43 | @import "bootstrap\modals.less"; 44 | @import "bootstrap\tooltip.less"; 45 | @import "bootstrap\popovers.less"; 46 | @import "bootstrap\carousel.less"; 47 | 48 | // Utility classes 49 | @import "bootstrap\utilities.less"; 50 | @import "bootstrap\responsive-utilities.less"; 51 | 52 | .form-box { 53 | margin-top: 20px; 54 | padding: 40px 20px 20px; 55 | background-color: #f7f7f7; 56 | -moz-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3); 57 | -webkit-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3); 58 | box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3); 59 | } -------------------------------------------------------------------------------- /src/Web/Content/bootstrap/alerts.less: -------------------------------------------------------------------------------- 1 | // 2 | // Alerts 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base styles 7 | // ------------------------- 8 | 9 | .alert { 10 | padding: @alert-padding; 11 | margin-bottom: @line-height-computed; 12 | border: 1px solid transparent; 13 | border-radius: @alert-border-radius; 14 | 15 | // Headings for larger alerts 16 | h4 { 17 | margin-top: 0; 18 | // Specified for the h4 to prevent conflicts of changing @headings-color 19 | color: inherit; 20 | } 21 | // Provide class for links that match alerts 22 | .alert-link { 23 | font-weight: @alert-link-font-weight; 24 | } 25 | 26 | // Improve alignment and spacing of inner content 27 | > p, 28 | > ul { 29 | margin-bottom: 0; 30 | } 31 | > p + p { 32 | margin-top: 5px; 33 | } 34 | } 35 | 36 | // Dismissable alerts 37 | // 38 | // Expand the right padding and account for the close button's positioning. 39 | 40 | .alert-dismissable { 41 | padding-right: (@alert-padding + 20); 42 | 43 | // Adjust close link position 44 | .close { 45 | position: relative; 46 | top: -2px; 47 | right: -21px; 48 | color: inherit; 49 | } 50 | } 51 | 52 | // Alternate styles 53 | // 54 | // Generate contextual modifier classes for colorizing the alert. 55 | 56 | .alert-success { 57 | .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text); 58 | } 59 | .alert-info { 60 | .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text); 61 | } 62 | .alert-warning { 63 | .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text); 64 | } 65 | .alert-danger { 66 | .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text); 67 | } 68 | -------------------------------------------------------------------------------- /src/Web/Content/bootstrap/badges.less: -------------------------------------------------------------------------------- 1 | // 2 | // Badges 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base classes 7 | .badge { 8 | display: inline-block; 9 | min-width: 10px; 10 | padding: 3px 7px; 11 | font-size: @font-size-small; 12 | font-weight: @badge-font-weight; 13 | color: @badge-color; 14 | line-height: @badge-line-height; 15 | vertical-align: baseline; 16 | white-space: nowrap; 17 | text-align: center; 18 | background-color: @badge-bg; 19 | border-radius: @badge-border-radius; 20 | 21 | // Empty badges collapse automatically (not available in IE8) 22 | &:empty { 23 | display: none; 24 | } 25 | 26 | // Quick fix for badges in buttons 27 | .btn & { 28 | position: relative; 29 | top: -1px; 30 | } 31 | } 32 | 33 | // Hover state, but only for links 34 | a.badge { 35 | &:hover, 36 | &:focus { 37 | color: @badge-link-hover-color; 38 | text-decoration: none; 39 | cursor: pointer; 40 | } 41 | } 42 | 43 | // Account for counters in navs 44 | a.list-group-item.active > .badge, 45 | .nav-pills > .active > a > .badge { 46 | color: @badge-active-color; 47 | background-color: @badge-active-bg; 48 | } 49 | .nav-pills > li > a > .badge { 50 | margin-left: 3px; 51 | } 52 | -------------------------------------------------------------------------------- /src/Web/Content/bootstrap/bootstrap.less: -------------------------------------------------------------------------------- 1 | // Core variables and mixins 2 | @import "variables.less"; 3 | @import "mixins.less"; 4 | 5 | // Reset 6 | @import "normalize.less"; 7 | @import "print.less"; 8 | 9 | // Core CSS 10 | @import "scaffolding.less"; 11 | @import "type.less"; 12 | @import "code.less"; 13 | @import "grid.less"; 14 | @import "tables.less"; 15 | @import "forms.less"; 16 | @import "buttons.less"; 17 | 18 | // Components 19 | @import "component-animations.less"; 20 | @import "glyphicons.less"; 21 | @import "dropdowns.less"; 22 | @import "button-groups.less"; 23 | @import "input-groups.less"; 24 | @import "navs.less"; 25 | @import "navbar.less"; 26 | @import "breadcrumbs.less"; 27 | @import "pagination.less"; 28 | @import "pager.less"; 29 | @import "labels.less"; 30 | @import "badges.less"; 31 | @import "jumbotron.less"; 32 | @import "thumbnails.less"; 33 | @import "alerts.less"; 34 | @import "progress-bars.less"; 35 | @import "media.less"; 36 | @import "list-group.less"; 37 | @import "panels.less"; 38 | @import "wells.less"; 39 | @import "close.less"; 40 | 41 | // Components w/ JavaScript 42 | @import "modals.less"; 43 | @import "tooltip.less"; 44 | @import "popovers.less"; 45 | @import "carousel.less"; 46 | 47 | // Utility classes 48 | @import "utilities.less"; 49 | @import "responsive-utilities.less"; 50 | -------------------------------------------------------------------------------- /src/Web/Content/bootstrap/breadcrumbs.less: -------------------------------------------------------------------------------- 1 | // 2 | // Breadcrumbs 3 | // -------------------------------------------------- 4 | 5 | 6 | .breadcrumb { 7 | padding: 8px 15px; 8 | margin-bottom: @line-height-computed; 9 | list-style: none; 10 | background-color: @breadcrumb-bg; 11 | border-radius: @border-radius-base; 12 | > li { 13 | display: inline-block; 14 | + li:before { 15 | content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space 16 | padding: 0 5px; 17 | color: @breadcrumb-color; 18 | } 19 | } 20 | > .active { 21 | color: @breadcrumb-active-color; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/Web/Content/bootstrap/close.less: -------------------------------------------------------------------------------- 1 | // 2 | // Close icons 3 | // -------------------------------------------------- 4 | 5 | 6 | .close { 7 | float: right; 8 | font-size: (@font-size-base * 1.5); 9 | font-weight: @close-font-weight; 10 | line-height: 1; 11 | color: @close-color; 12 | text-shadow: @close-text-shadow; 13 | .opacity(.2); 14 | 15 | &:hover, 16 | &:focus { 17 | color: @close-color; 18 | text-decoration: none; 19 | cursor: pointer; 20 | .opacity(.5); 21 | } 22 | 23 | // Additional properties for button version 24 | // iOS requires the button element instead of an anchor tag. 25 | // If you want the anchor version, it requires `href="#"`. 26 | button& { 27 | padding: 0; 28 | cursor: pointer; 29 | background: transparent; 30 | border: 0; 31 | -webkit-appearance: none; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/Web/Content/bootstrap/code.less: -------------------------------------------------------------------------------- 1 | // 2 | // Code (inline and block) 3 | // -------------------------------------------------- 4 | 5 | 6 | // Inline and block code styles 7 | code, 8 | kbd, 9 | pre, 10 | samp { 11 | font-family: @font-family-monospace; 12 | } 13 | 14 | // Inline code 15 | code { 16 | padding: 2px 4px; 17 | font-size: 90%; 18 | color: @code-color; 19 | background-color: @code-bg; 20 | white-space: nowrap; 21 | border-radius: @border-radius-base; 22 | } 23 | 24 | // Blocks of code 25 | pre { 26 | display: block; 27 | padding: ((@line-height-computed - 1) / 2); 28 | margin: 0 0 (@line-height-computed / 2); 29 | font-size: (@font-size-base - 1); // 14px to 13px 30 | line-height: @line-height-base; 31 | word-break: break-all; 32 | word-wrap: break-word; 33 | color: @pre-color; 34 | background-color: @pre-bg; 35 | border: 1px solid @pre-border-color; 36 | border-radius: @border-radius-base; 37 | 38 | // Account for some code outputs that place code tags in pre tags 39 | code { 40 | padding: 0; 41 | font-size: inherit; 42 | color: inherit; 43 | white-space: pre-wrap; 44 | background-color: transparent; 45 | border-radius: 0; 46 | } 47 | } 48 | 49 | // Enable scrollable blocks of code 50 | .pre-scrollable { 51 | max-height: @pre-scrollable-max-height; 52 | overflow-y: scroll; 53 | } 54 | -------------------------------------------------------------------------------- /src/Web/Content/bootstrap/component-animations.less: -------------------------------------------------------------------------------- 1 | // 2 | // Component animations 3 | // -------------------------------------------------- 4 | 5 | // Heads up! 6 | // 7 | // We don't use the `.opacity()` mixin here since it causes a bug with text 8 | // fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552. 9 | 10 | .fade { 11 | opacity: 0; 12 | .transition(opacity .15s linear); 13 | &.in { 14 | opacity: 1; 15 | } 16 | } 17 | 18 | .collapse { 19 | display: none; 20 | &.in { 21 | display: block; 22 | } 23 | } 24 | .collapsing { 25 | position: relative; 26 | height: 0; 27 | overflow: hidden; 28 | .transition(height .35s ease); 29 | } 30 | -------------------------------------------------------------------------------- /src/Web/Content/bootstrap/grid.less: -------------------------------------------------------------------------------- 1 | // 2 | // Grid system 3 | // -------------------------------------------------- 4 | 5 | // Set the container width, and override it for fixed navbars in media queries 6 | .container { 7 | .container-fixed(); 8 | 9 | @media (min-width: @screen-sm) { 10 | width: @container-sm; 11 | } 12 | @media (min-width: @screen-md) { 13 | width: @container-md; 14 | } 15 | @media (min-width: @screen-lg-min) { 16 | width: @container-lg; 17 | } 18 | } 19 | 20 | // mobile first defaults 21 | .row { 22 | .make-row(); 23 | } 24 | 25 | // Common styles for small and large grid columns 26 | .make-grid-columns(); 27 | 28 | 29 | // Extra small grid 30 | // 31 | // Columns, offsets, pushes, and pulls for extra small devices like 32 | // smartphones. 33 | 34 | .make-grid-columns-float(xs); 35 | .make-grid(@grid-columns, xs, width); 36 | .make-grid(@grid-columns, xs, pull); 37 | .make-grid(@grid-columns, xs, push); 38 | .make-grid(@grid-columns, xs, offset); 39 | 40 | 41 | // Small grid 42 | // 43 | // Columns, offsets, pushes, and pulls for the small device range, from phones 44 | // to tablets. 45 | 46 | @media (min-width: @screen-sm-min) { 47 | .make-grid-columns-float(sm); 48 | .make-grid(@grid-columns, sm, width); 49 | .make-grid(@grid-columns, sm, pull); 50 | .make-grid(@grid-columns, sm, push); 51 | .make-grid(@grid-columns, sm, offset); 52 | } 53 | 54 | 55 | // Medium grid 56 | // 57 | // Columns, offsets, pushes, and pulls for the desktop device range. 58 | 59 | @media (min-width: @screen-md-min) { 60 | .make-grid-columns-float(md); 61 | .make-grid(@grid-columns, md, width); 62 | .make-grid(@grid-columns, md, pull); 63 | .make-grid(@grid-columns, md, push); 64 | .make-grid(@grid-columns, md, offset); 65 | } 66 | 67 | 68 | // Large grid 69 | // 70 | // Columns, offsets, pushes, and pulls for the large desktop device range. 71 | 72 | @media (min-width: @screen-lg-min) { 73 | .make-grid-columns-float(lg); 74 | .make-grid(@grid-columns, lg, width); 75 | .make-grid(@grid-columns, lg, pull); 76 | .make-grid(@grid-columns, lg, push); 77 | .make-grid(@grid-columns, lg, offset); 78 | } 79 | 80 | -------------------------------------------------------------------------------- /src/Web/Content/bootstrap/jumbotron.less: -------------------------------------------------------------------------------- 1 | // 2 | // Jumbotron 3 | // -------------------------------------------------- 4 | 5 | 6 | .jumbotron { 7 | padding: @jumbotron-padding; 8 | margin-bottom: @jumbotron-padding; 9 | font-size: @jumbotron-font-size; 10 | font-weight: 200; 11 | line-height: (@line-height-base * 1.5); 12 | color: @jumbotron-color; 13 | background-color: @jumbotron-bg; 14 | 15 | h1, 16 | .h1 { 17 | line-height: 1; 18 | color: @jumbotron-heading-color; 19 | } 20 | p { 21 | line-height: 1.4; 22 | } 23 | 24 | .container & { 25 | border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container 26 | } 27 | 28 | .container { 29 | max-width: 100%; 30 | } 31 | 32 | @media screen and (min-width: @screen-sm-min) { 33 | padding-top: (@jumbotron-padding * 1.6); 34 | padding-bottom: (@jumbotron-padding * 1.6); 35 | 36 | .container & { 37 | padding-left: (@jumbotron-padding * 2); 38 | padding-right: (@jumbotron-padding * 2); 39 | } 40 | 41 | h1, 42 | .h1 { 43 | font-size: (@font-size-base * 4.5); 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/Web/Content/bootstrap/labels.less: -------------------------------------------------------------------------------- 1 | // 2 | // Labels 3 | // -------------------------------------------------- 4 | 5 | .label { 6 | display: inline; 7 | padding: .2em .6em .3em; 8 | font-size: 75%; 9 | font-weight: bold; 10 | line-height: 1; 11 | color: @label-color; 12 | text-align: center; 13 | white-space: nowrap; 14 | vertical-align: baseline; 15 | border-radius: .25em; 16 | 17 | // Add hover effects, but only for links 18 | &[href] { 19 | &:hover, 20 | &:focus { 21 | color: @label-link-hover-color; 22 | text-decoration: none; 23 | cursor: pointer; 24 | } 25 | } 26 | 27 | // Empty labels collapse automatically (not available in IE8) 28 | &:empty { 29 | display: none; 30 | } 31 | 32 | // Quick fix for labels in buttons 33 | .btn & { 34 | position: relative; 35 | top: -1px; 36 | } 37 | } 38 | 39 | // Colors 40 | // Contextual variations (linked labels get darker on :hover) 41 | 42 | .label-default { 43 | .label-variant(@label-default-bg); 44 | } 45 | 46 | .label-primary { 47 | .label-variant(@label-primary-bg); 48 | } 49 | 50 | .label-success { 51 | .label-variant(@label-success-bg); 52 | } 53 | 54 | .label-info { 55 | .label-variant(@label-info-bg); 56 | } 57 | 58 | .label-warning { 59 | .label-variant(@label-warning-bg); 60 | } 61 | 62 | .label-danger { 63 | .label-variant(@label-danger-bg); 64 | } 65 | -------------------------------------------------------------------------------- /src/Web/Content/bootstrap/list-group.less: -------------------------------------------------------------------------------- 1 | // 2 | // List groups 3 | // -------------------------------------------------- 4 | 5 | // Base class 6 | // 7 | // Easily usable on