Lotsafixes, return of the search

That'll be #8 wrapped up, plus some more of #7
This commit is contained in:
Thomas Hounsell 2015-05-30 15:14:09 +01:00
parent 75c71432a4
commit 70130aace3
15 changed files with 197 additions and 65 deletions

View File

@ -14,6 +14,12 @@ public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapHttpRoute(
name: "API",
routeTemplate: "api/{action}/{id}",
defaults: new { controller = "api", action = "GetBuilds", id = UrlParameter.Optional }
);
routes.AppendTrailingSlash = true;
routes.MapMvcAttributeRoutes();

View File

@ -22,7 +22,8 @@
<IISExpressWindowsAuthentication />
<IISExpressUseClassicPipelineMode />
<ApplicationInsightsResourceId>/subscriptions/4af45631-0e5c-4253-9e38-d0c47f9c5b32/resourcegroups/Default-ApplicationInsights-CentralUS/providers/microsoft.insights/components/BuildFeed</ApplicationInsightsResourceId>
<NuGetPackageImportStamp>ae3e548a</NuGetPackageImportStamp>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<TypeScriptToolsVersion>1.4</TypeScriptToolsVersion>
<UseGlobalApplicationHostFile />
<TargetFrameworkProfile />
@ -54,7 +55,31 @@
<HintPath>..\packages\Humanizer.1.36.0\lib\portable-win+net40+sl50+wp8+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Humanizer.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.ApplicationInsights, Version=0.17.0.576, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.ApplicationInsights.0.17.0\lib\net45\Microsoft.ApplicationInsights.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.ApplicationInsights.Extensibility.PerfCollector, Version=0.17.0.587, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.ApplicationInsights.PerfCounterCollector.0.17.0\lib\net45\Microsoft.ApplicationInsights.Extensibility.PerfCollector.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.ApplicationInsights.Extensibility.RuntimeTelemetry, Version=0.17.0.582, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.ApplicationInsights.DependencyCollector.0.17.0\lib\net45\Microsoft.ApplicationInsights.Extensibility.RuntimeTelemetry.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.ApplicationInsights.Extensibility.Web, Version=0.17.0.582, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.ApplicationInsights.Web.0.17.0\lib\net45\Microsoft.ApplicationInsights.Extensibility.Web.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.ApplicationInsights.Web.TelemetryChannel, Version=0.17.0.582, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.ApplicationInsights.Web.TelemetryChannel.0.17.0\lib\net45\Microsoft.ApplicationInsights.Web.TelemetryChannel.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="Microsoft.Diagnostics.Instrumentation.Extensions.Intercept, Version=0.17.0.194, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.ApplicationInsights.Agent.Intercept.0.17.0\lib\net45\Microsoft.Diagnostics.Instrumentation.Extensions.Intercept.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Threading.Tasks">
<HintPath>..\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.dll</HintPath>
</Reference>
@ -207,7 +232,9 @@
<Content Include="content\tile\wide.png" />
<Content Include="content\Web.config" />
<Content Include="Areas\admin\Views\base\index.cshtml" />
<Content Include="ApplicationInsights.config" />
<Content Include="ApplicationInsights.config">
<SubType>Designer</SubType>
</Content>
<Content Include="Areas\admin\Views\users\admins.cshtml" />
<Content Include="Areas\admin\Views\meta\index.cshtml" />
<Content Include="Areas\admin\Views\meta\create.cshtml" />
@ -374,7 +401,9 @@
<Error Condition="!Exists('..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets'))" />
<Error Condition="!Exists('..\packages\Microsoft.Diagnostics.Instrumentation.Extensions.Intercept.0.13.0-build22724\build\Microsoft.Diagnostics.Instrumentation.Extensions.Intercept.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Diagnostics.Instrumentation.Extensions.Intercept.0.13.0-build22724\build\Microsoft.Diagnostics.Instrumentation.Extensions.Intercept.targets'))" />
<Error Condition="!Exists('..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.20-beta\build\portable-net45+win8+wpa81\Microsoft.Diagnostics.Tracing.EventSource.Redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Diagnostics.Tracing.EventSource.Redist.1.1.20-beta\build\portable-net45+win8+wpa81\Microsoft.Diagnostics.Tracing.EventSource.Redist.targets'))" />
<Error Condition="!Exists('..\packages\Microsoft.ApplicationInsights.Agent.Intercept.0.17.0\build\Microsoft.ApplicationInsights.Agent.Intercept.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.ApplicationInsights.Agent.Intercept.0.17.0\build\Microsoft.ApplicationInsights.Agent.Intercept.targets'))" />
</Target>
<Import Project="..\packages\Microsoft.ApplicationInsights.Agent.Intercept.0.17.0\build\Microsoft.ApplicationInsights.Agent.Intercept.targets" Condition="Exists('..\packages\Microsoft.ApplicationInsights.Agent.Intercept.0.17.0\build\Microsoft.ApplicationInsights.Agent.Intercept.targets')" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">

View File

@ -67,7 +67,7 @@ where s.Text.ToLower().Contains(query.ToLower())
orderby s.Text.ToLower().IndexOf(query.ToLower()) ascending
select new SearchResult()
{
Url = Url.Route("Source Root", new { controller = "build", action = "source", source = s.Value }),
Url = Url.Route("Source Root", new { controller = "front", action = "viewSource", source = s.Value }),
Label = s.Text.Replace(query, "<strong>" + query + "</strong>"),
Title = s.Text,
Group = "Source"
@ -81,7 +81,7 @@ where string.Format("{0}.{1}", v.Major, v.Minor).StartsWith(query)
orderby v.Major descending, v.Minor descending
select new SearchResult()
{
Url = Url.Route("Version Root", new { controller = "build", action = "version", major = v.Major, minor = v.Minor }),
Url = Url.Route("Version Root", new { controller = "front", action = "viewVersion", major = v.Major, minor = v.Minor }),
Label = string.Format("{0}.{1}", v.Major, v.Minor).Replace(query, "<strong>" + query + "</strong>"),
Title = "",
Group = "Version"
@ -95,7 +95,7 @@ where y.ToString().Contains(query)
orderby y descending
select new SearchResult()
{
Url = Url.Route("Year Root", new { controller = "build", action = "year", year = y }),
Url = Url.Route("Year Root", new { controller = "front", action = "viewYear", year = y }),
Label = y.ToString().Replace(query, "<strong>" + query + "</strong>"),
Title = "",
Group = "Year"
@ -109,7 +109,7 @@ where l.ToLower().Contains(query.ToLower())
orderby l.ToLower().IndexOf(query.ToLower()) ascending
select new SearchResult()
{
Url = Url.Route("Lab Root", new { controller = "build", action = "lab", lab = l }),
Url = Url.Route("Lab Root", new { controller = "front", action = "viewLab", lab = l }),
Label = l.Replace(query, "<strong>" + query + "</strong>"),
Title = l,
Group = "Lab"
@ -124,7 +124,7 @@ orderby b.FullBuildString.ToLower().IndexOf(query.ToLower()) ascending,
b.BuildTime descending
select new SearchResult()
{
Url = Url.Route("Actions", new { controller = "build", action = "info", id = b.Id }),
Url = Url.Route("Build", new { controller = "front", action = "viewBuild", id = b.Id }),
Label = b.FullBuildString.Replace(query, "<strong>" + query + "</strong>"),
Title = b.FullBuildString,
Group = "Build"
@ -143,7 +143,7 @@ b.BuildTime descending
});
}
return results.Take(6);
return results.Take(15);
}
}
}

View File

@ -15,7 +15,7 @@ public class frontController : Controller
[Route("", Order = 1)]
#if !DEBUG
[OutputCache(Duration = 600, VaryByParam = "none")]
[OutputCache(Duration = 600, VaryByParam = "none", VaryByCustom = "userName")]
#endif
public ActionResult index()
{
@ -24,7 +24,7 @@ public ActionResult index()
[Route("page-{page:int:min(2)}/", Order = 0)]
#if !DEBUG
[OutputCache(Duration = 600, VaryByParam = "page")]
[OutputCache(Duration = 600, VaryByParam = "page", VaryByCustom = "userName")]
#endif
public ActionResult indexPage(int page)
{
@ -55,7 +55,7 @@ bg.Key.Revision descending
[Route("group/{major}.{minor}.{number}.{revision}/")]
#if !DEBUG
[OutputCache(Duration = 600, VaryByParam = "none")]
[OutputCache(Duration = 600, VaryByParam = "none", VaryByCustom = "userName")]
#endif
public ActionResult viewGroup(byte major, byte minor, ushort number, ushort? revision = null)
{
@ -78,9 +78,9 @@ public ActionResult viewGroup(byte major, byte minor, ushort number, ushort? rev
View(builds);
}
[Route("build/{id}/")]
[Route("build/{id}/", Name = "Build")]
#if !DEBUG
[OutputCache(Duration = 600, VaryByParam = "none")]
[OutputCache(Duration = 600, VaryByParam = "none", VaryByCustom = "userName")]
#endif
public ActionResult viewBuild(long id)
{
@ -88,9 +88,9 @@ public ActionResult viewBuild(long id)
return View(b);
}
[Route("lab/{lab}/", Order = 1)]
[Route("lab/{lab}/", Order = 1, Name = "Lab Root")]
#if !DEBUG
[OutputCache(Duration = 600, VaryByParam = "none")]
[OutputCache(Duration = 600, VaryByParam = "none", VaryByCustom = "userName")]
#endif
public ActionResult viewLab(string lab)
{
@ -99,7 +99,7 @@ public ActionResult viewLab(string lab)
[Route("lab/{lab}/page-{page:int:min(2)}/", Order = 0)]
#if !DEBUG
[OutputCache(Duration = 600, VaryByParam = "page")]
[OutputCache(Duration = 600, VaryByParam = "page", VaryByCustom = "userName")]
#endif
public ActionResult viewLabPage(string lab, int page)
{
@ -114,9 +114,9 @@ public ActionResult viewLabPage(string lab, int page)
return View("viewLab", builds.Skip((page - 1) * _pageSize).Take(_pageSize));
}
[Route("source/{source}/", Order = 1)]
[Route("source/{source}/", Order = 1, Name = "Source Root")]
#if !DEBUG
[OutputCache(Duration = 600, VaryByParam = "none")]
[OutputCache(Duration = 600, VaryByParam = "none", VaryByCustom = "userName")]
#endif
public ActionResult viewSource(TypeOfSource source)
{
@ -125,7 +125,7 @@ public ActionResult viewSource(TypeOfSource source)
[Route("source/{source}/page-{page:int:min(2)}/", Order = 0)]
#if !DEBUG
[OutputCache(Duration = 600, VaryByParam = "page")]
[OutputCache(Duration = 600, VaryByParam = "page", VaryByCustom = "userName")]
#endif
public ActionResult viewSourcePage(TypeOfSource source, int page)
{
@ -140,9 +140,9 @@ public ActionResult viewSourcePage(TypeOfSource source, int page)
return View("viewSource", builds.Skip((page - 1) * _pageSize).Take(_pageSize));
}
[Route("year/{year}/", Order = 1)]
[Route("year/{year}/", Order = 1, Name = "Year Root")]
#if !DEBUG
[OutputCache(Duration = 600, VaryByParam = "none")]
[OutputCache(Duration = 600, VaryByParam = "none", VaryByCustom = "userName")]
#endif
public ActionResult viewYear(int year)
{
@ -151,7 +151,7 @@ public ActionResult viewYear(int year)
[Route("year/{year}/page-{page:int:min(2)}/", Order = 0)]
#if !DEBUG
[OutputCache(Duration = 600, VaryByParam = "page")]
[OutputCache(Duration = 600, VaryByParam = "page", VaryByCustom = "userName")]
#endif
public ActionResult viewYearPage(int year, int page)
{
@ -166,11 +166,20 @@ public ActionResult viewYearPage(int year, int page)
return View("viewYear", builds.Skip((page - 1) * _pageSize).Take(_pageSize));
}
[Route("version/{major}.{minor}/")]
[Route("version/{major}.{minor}/", Order = 1, Name = "Version Root")]
#if !DEBUG
[OutputCache(Duration = 600, VaryByParam = "none")]
[OutputCache(Duration = 600, VaryByParam = "none", VaryByCustom = "userName")]
#endif
public ActionResult viewVersion(int major, int minor)
{
return viewVersionPage(major, minor, 1);
}
[Route("version/{major}.{minor}/", Order = 0)]
#if !DEBUG
[OutputCache(Duration = 600, VaryByParam = "none", VaryByCustom = "userName")]
#endif
public ActionResult viewVersionPage(int major, int minor, int page)
{
string valueString = string.Format("{0}.{1}", major, minor);
ViewBag.MetaItem = MetaItem.SelectById(new MetaItemKey() { Type = MetaType.Version, Value = valueString });

View File

@ -131,9 +131,9 @@ public ActionResult rss()
}
[Route("sitemap/")]
#if !DEBUG
[OutputCache(Duration = 3600, VaryByParam = "none")]
#endif
#if !DEBUG
[OutputCache(Duration = 3600, VaryByParam = "none", VaryByCustom = "userName")]
#endif
public ActionResult sitemap()
{
IEnumerable<Build> builds = Build.SelectInVersionOrder();
@ -158,8 +158,8 @@ bv.Key.Minor descending
Name = string.Format("Windows NT {0}.{1}", bv.Key.Major, bv.Key.Minor),
UrlParams = new RouteValueDictionary(new
{
controller = "build",
action = "version",
controller = "front",
action = "viewVersion",
major = bv.Key.Major,
minor = bv.Key.Minor,
page = 1
@ -176,8 +176,8 @@ orderby bv.Key
Name = bv.Key,
UrlParams = new RouteValueDictionary(new
{
controller = "build",
action = "lab",
controller = "front",
action = "viewLab",
lab = bv.Key,
page = 1
}),
@ -193,8 +193,8 @@ orderby bv.Key
Name = bv.Key.ToString(),
UrlParams = new RouteValueDictionary(new
{
controller = "build",
action = "year",
controller = "front",
action = "viewYear",
year = bv.Key,
page = 1
}),
@ -209,8 +209,8 @@ orderby bv.Key
Name = DisplayHelpers.GetDisplayTextForEnum(bv.Key),
UrlParams = new RouteValueDictionary(new
{
controller = "build",
action = "source",
controller = "front",
action = "viewSource",
source = bv.Key,
page = 1
}),
@ -226,16 +226,19 @@ orderby bv.Key
Name = b.FullBuildString
}).ToArray(),
Actions = actions
Actions = actions,
Labs = (from b in builds
group b by b.Lab into lab
select lab.Key).ToArray()
};
return View(model);
}
[Route("xml-sitemap/")]
#if !DEBUG
[OutputCache(Duration = 3600, VaryByParam = "none")]
#endif
#if !DEBUG
[OutputCache(Duration = 3600, VaryByParam = "none", VaryByCustom = "userName")]
#endif
public ActionResult xmlsitemap()
{
XNamespace xn = XNamespace.Get("http://www.sitemaps.org/schemas/sitemap/0.9");
@ -271,9 +274,9 @@ public ActionResult xmlsitemap()
}
[Route("statistics/")]
#if !DEBUG
[OutputCache(Duration = 3600, VaryByParam = "none")]
#endif
#if !DEBUG
[OutputCache(Duration = 3600, VaryByParam = "none", VaryByCustom = "userName")]
#endif
public ActionResult stats()
{
var builds = Build.Select();

View File

@ -1,4 +1,5 @@
using System;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
@ -19,5 +20,16 @@ protected void Application_Start()
ModelBinders.Binders.Add(typeof(DateTime), db);
ModelBinders.Binders.Add(typeof(DateTime?), db);
}
public override string GetVaryByCustomString(HttpContext context, string custom)
{
switch(custom)
{
case "userName":
return context.User.Identity.Name.ToLower();
}
return "";
}
}
}

View File

@ -10,6 +10,8 @@ public class SitemapData
{
public SitemapDataBuild[] Builds { get; set; }
public Dictionary<string, SitemapPagedAction[]> Actions { get; set; }
public string[] Labs { get; set; }
}
public class SitemapDataBuild

View File

@ -2,6 +2,10 @@
var bfsTimeout;
$(function () {
$("#page-navigation-search").click(function (event) {
event.preventDefault();
$("#search-modal").modal('show');
});
$("#search-input").keyup(function () {
var search = $(this);
$(this).parent().find(".list-group").remove();
@ -24,7 +28,7 @@ $(function () {
var item = template.render(data);
content.append(item);
search.after(content);
$("#search-results").html(content);
$(".panel-search a.list-group-item").click(function () {
ga('send', 'pageview', '/api/GetSearchResult/?query=' + $("#search-input").val());

View File

@ -59,6 +59,7 @@
{
<li><a href="@Url.Action("logout", new { controller = "support", area = "" }) " title="Log out"><i class="fa fa-user"></i> Log out</a></li>
}
<li><a href="#" title="Search" id="page-navigation-search"><i class="fa fa-search"></i> Search</a></li>
<li><a href="@Url.Action("stats", new { controller = "support", area = "" }) " title="Statistics"><i class="fa fa-line-chart"></i> Statistics</a></li>
<li><a href="@Url.Action("rss", new { controller = "support", area = "" })" title="RSS Feeds"><i class="fa fa-rss"></i> RSS Feeds</a></li>
<li><a href="https://twitter.com/buildfeed" title="Twitter" target="_blank"><i class="fa fa-twitter"></i> Twitter</a></li>
@ -83,14 +84,46 @@
<div class="col-sm-4 text-right">
<p>
&copy; 2013 - @DateTime.Now.Year.ToString(), BuildFeed<br />
Developed by <a href="https://twitter.com/tomhounsell" target="_blank">Thomas Hounsell</a>
Developed by <a href="https://twitter.com/tomhounsell" target="_blank">Thomas Hounsell</a><br />
Contribute on <a href="https://github.com/hounsell/BuildFeed" target="_blank">GitHub</a>
</p>
</div>
</div>
</footer>
</div>
<div class="modal fade" id="search-modal" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title">Search BuildFeed...</h4>
</div>
<div class="modal-body">
<div class="container-fluid">
<div class="row">
<div class="col-sm-6 col-sm-offset-3">
@Html.Label("search-input", "Search query", new { @class = "sr-only" })
@Html.TextBox("search-input", "", new { @class = "form-control", placeholder = "type to search..." })
</div>
</div>
</div>
<div class="row" id="search-results"></div>
</div>
</div>
</div>
</div>
@Scripts.Render("~/bundles/jquery")
<script type="text/javascript" src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
@Scripts.Render("~/bundles/jsrender")
<script type="text/javascript" src="~/Scripts/bfs.js"></script>
@RenderSection("scripts", required: false)
<script id="result-template" type="text/x-jsrender">
<div class="col-sm-4">
<a href="{{:Url}}" class="list-group-item" title="{{:Title}}">
<h4 class="list-group-item-heading">{{:Label}}</h4>
<p class="list-group-item-text">{{:Group}}</p>
</a>
</div>
</script>
</body>
</html>

View File

@ -64,15 +64,11 @@
</article>
<footer id="page-footer">
<div class="row">
<div class="col-sm-8">
<p>
<a href="@Url.Action("sitemap", new { controller = "support" })">Sitemap</a>
</p>
</div>
<div class="col-sm-4 text-right">
<div class="col-sm-offset-8 col-sm-4 text-right">
<p>
&copy; 2013 - @DateTime.Now.Year.ToString(), BuildFeed<br />
Developed by <a href="https://twitter.com/tomhounsell" target="_blank">Thomas Hounsell</a>
Developed by <a href="https://twitter.com/tomhounsell" target="_blank">Thomas Hounsell</a><br />
Contribute on <a href="https://github.com/hounsell/BuildFeed" target="_blank">GitHub</a>
</p>
</div>
</div>

View File

@ -27,11 +27,12 @@
{
if (string.IsNullOrEmpty(action.Name))
{
for (int i = 1; i <= action.Pages; i++)
<li>@Html.ActionLink("Page 1", action.Action, action.UrlParams)</li>
for (int i = 2; i <= action.Pages; i++)
{
var urlParams = action.UrlParams;
urlParams["page"] = i;
<li>@Html.ActionLink("Page " + i.ToString(), action.Action, urlParams)</li>
<li>@Html.ActionLink("Page " + i.ToString(), action.Action + "Page", urlParams)</li>
}
}
else
@ -39,11 +40,12 @@
<li>
<a href="#sitemap-@action.UniqueId" data-toggle="collapse">@action.Name</a>
<ul id="sitemap-@action.UniqueId" class="collapse">
@for (int i = 1; i <= action.Pages; i++)
<li>@Html.ActionLink("Page 1", action.Action, action.UrlParams)</li>
@for (int i = 2; i <= action.Pages; i++)
{
var urlParams = action.UrlParams;
urlParams["page"] = i;
<li>@Html.ActionLink("Page " + i.ToString(), action.Action, urlParams)</li>
<li>@Html.ActionLink("Page " + i.ToString(), action.Action + "Page", urlParams)</li>
}
</ul>
</li>
@ -66,6 +68,15 @@
<li><a href="@Url.Action("flight", new { controller = "rss", id = "high" })" title="High flight level"><i class="fa fa-sm fa-rss"></i> High flight level</a></li>
</ul>
</li>
<li>
<a href="#rss-labs" data-toggle="collapse">Labs</a>
<ul id="rss-labs" class="collapse">
@foreach (string lab in Model.Labs)
{
<li><a href="@Url.Action("lab", new { controller = "rss", lab = lab })" title="@lab"><i class="fa fa-sm fa-rss"></i> @lab</a></li>
}
</ul>
</li>
</ul>
</li>
</ul>

View File

@ -16,8 +16,15 @@
-->
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
<httpModules xdt:Transform="Insert">
<add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Extensibility.Web.RequestTracking.WebRequestTrackingModule, Microsoft.ApplicationInsights.Extensibility.Web" />
</httpModules>
</system.web>
<system.webServer>
<modules xdt:Transform="Insert">
<remove name="ApplicationInsightsWebTracking" />
<add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Extensibility.Web.RequestTracking.WebRequestTrackingModule, Microsoft.ApplicationInsights.Extensibility.Web" preCondition="managedHandler" />
</modules>
<rewrite xdt:Transform="Insert">
<rules>
<rule name="CanonicalHost" stopProcessing="true">

View File

@ -17,14 +17,6 @@
<add key="form:QuestionToEmail" value="thomas@buildfeed.net" />
<add key="RouteDebugger:Enabled" value="false" />
</appSettings>
<!--
For a description of web.config changes see http://go.microsoft.com/fwlink/?LinkId=235367.
The following attributes can be set on the <httpRuntime> tag.
<system.Web>
<httpRuntime targetFramework="4.5.2" />
</system.Web>
-->
<system.web>
<compilation debug="true" targetFramework="4.5.2" />
<httpRuntime targetFramework="4.5" />
@ -47,10 +39,8 @@
<add name="BuildFeedRoleProvider" type="RedisAuth.RedisRoleProvider,RedisAuth" />
</providers>
</roleManager>
<httpModules />
</system.web>
<system.webServer>
<modules />
<urlCompression doDynamicCompression="true" />
<validation validateIntegratedModeConfiguration="false" />
<handlers>

View File

@ -100,3 +100,27 @@ label, .control-label, .help-block, .checkbox, .radio
margin: 0;
width: 100%;
}
#search-results
{
margin-top: 1em;
}
#search-results .list-group-item
{
margin-bottom: 1em;
}
#search-results .list-group-item-heading
{
overflow: hidden;
-ms-text-overflow: ellipsis;
-o-text-overflow: ellipsis;
text-overflow: ellipsis;
white-space: nowrap;
}
#search-results .list-group-item-heading h4
{
font-size: 16px;
}

View File

@ -7,6 +7,12 @@
<package id="jquery.TypeScript.DefinitelyTyped" version="2.2.4" targetFramework="net45" userInstalled="true" />
<package id="jQuery.Validation" version="1.13.1" targetFramework="net45" userInstalled="true" />
<package id="jsrender.TypeScript.DefinitelyTyped" version="0.0.3" targetFramework="net45" userInstalled="true" />
<package id="Microsoft.ApplicationInsights" version="0.17.0" targetFramework="net452" userInstalled="true" />
<package id="Microsoft.ApplicationInsights.Agent.Intercept" version="0.17.0" targetFramework="net452" userInstalled="true" />
<package id="Microsoft.ApplicationInsights.DependencyCollector" version="0.17.0" targetFramework="net452" userInstalled="true" />
<package id="Microsoft.ApplicationInsights.PerfCounterCollector" version="0.17.0" targetFramework="net452" userInstalled="true" />
<package id="Microsoft.ApplicationInsights.Web" version="0.17.0" targetFramework="net452" userInstalled="true" />
<package id="Microsoft.ApplicationInsights.Web.TelemetryChannel" version="0.17.0" targetFramework="net452" userInstalled="true" />
<package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net45" userInstalled="true" />
<package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net45" userInstalled="true" />
<package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net45" userInstalled="true" />