Add styling to more listings; tweaks

This commit is contained in:
Thomas Hounsell 2016-07-11 17:27:31 +01:00
parent c70b9c76fc
commit 7d6ed90e3d
26 changed files with 234 additions and 152 deletions

View File

@ -771,24 +771,24 @@
<Content Include="content\card\Redstone.png" />
<Content Include="content\card\Threshold2.png" />
<Content Include="content\card\Threshold.png" />
<Content Include="content\dark.css">
<Content Include="res\css\dark.css">
<DependentUpon>dark.scss</DependentUpon>
</Content>
<Content Include="content\dark.min.css">
<Content Include="res\css\dark.min.css">
<DependentUpon>dark.css</DependentUpon>
</Content>
<Content Include="content\default.css">
<Content Include="res\css\default.css">
<DependentUpon>default.scss</DependentUpon>
</Content>
<Content Include="content\default.min.css">
<Content Include="res\css\default.min.css">
<DependentUpon>default.css</DependentUpon>
</Content>
<Content Include="content\icons-2x.png" />
<Content Include="content\icons.png" />
<Content Include="content\rtl.css">
<Content Include="res\css\rtl.css">
<DependentUpon>rtl.scss</DependentUpon>
</Content>
<Content Include="content\rtl.min.css">
<Content Include="res\css\rtl.min.css">
<DependentUpon>rtl.css</DependentUpon>
</Content>
<Content Include="content\tile\wide.png" />
@ -811,18 +811,19 @@
<Content Include="Areas\admin\Views\meta\create.cshtml" />
<Content Include="robots.txt" />
<Content Include="App_Code\PaginationHelpers.cshtml" />
<Content Include="content\default.scss" />
<Content Include="res\css\default.scss" />
<None Include="bundleconfig.json" />
<None Include="compilerconfig.json" />
<None Include="compilerconfig.json.defaults">
<DependentUpon>compilerconfig.json</DependentUpon>
</None>
<Content Include="content\rtl.scss" />
<Content Include="content\dark.scss" />
<Content Include="res\css\rtl.scss" />
<Content Include="res\css\dark.scss" />
<None Include="Properties\PublishProfiles\Milestone 1 [DEV].pubxml" />
<Content Include="Scripts\bfs.js">
<DependentUpon>bfs.ts</DependentUpon>
</Content>
<Content Include="res\Web.config" />
<None Include="Scripts\jquery-2.2.3.intellisense.js" />
<Content Include="Scripts\bfs.js.map">
<DependentUpon>bfs.ts</DependentUpon>

View File

@ -101,7 +101,7 @@ public async Task<FrontPage> SelectFrontPage()
{ nameof(BuildModel.LabUrl), ConfigurationManager.AppSettings["site:OSGLab"] }
}).Sort(sortByCompileDate).Limit(1);
fp.CurrentOsg = (await query.ToListAsync())[0];
fp.CurrentCanary = (await query.ToListAsync())[0];
query = _buildCollection.Find(new BsonDocument
{

View File

@ -2,8 +2,8 @@
{
public class FrontPage
{
public BuildModel CurrentCanary { get; set; }
public BuildModel CurrentInsider { get; set; }
public BuildModel CurrentOsg { get; set; }
public BuildModel CurrentRelease { get; set; }
}
}

View File

@ -6,6 +6,13 @@ var BuildFeed;
link.parentElement.classList.toggle("open");
}
BuildFeed.DropdownClick = DropdownClick;
function SwitchLanguage(ev) {
ev.preventDefault();
var link = this;
document.cookie = "lang=" + link.dataset["lang"] + "; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/";
location.reload(true);
}
BuildFeed.SwitchLanguage = SwitchLanguage;
function BuildFeedSetup(ev) {
var ddParents = document.getElementsByClassName("dropdown-parent");
for (var i = 0; i < ddParents.length; i++) {
@ -16,6 +23,10 @@ var BuildFeed;
}
}
}
var ddLangs = document.getElementById("settings-lang-menu").getElementsByTagName("a");
for (var i = 0; i < ddLangs.length; i++) {
ddLangs[i].addEventListener("click", SwitchLanguage);
}
}
BuildFeed.BuildFeedSetup = BuildFeedSetup;
})(BuildFeed || (BuildFeed = {}));

View File

@ -1 +1 @@
{"version":3,"file":"bfs.js","sourceRoot":"","sources":["bfs.ts"],"names":[],"mappings":"AAAA,IAAO,SAAS,CA2Bf;AA3BD,WAAO,SAAS,EAChB,CAAC;IACE,uBAA8B,EAAc;QAEzC,EAAE,CAAC,cAAc,EAAE,CAAC;QAEpB,IAAM,IAAI,GAAG,IAAyB,CAAC;QACvC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IANe,uBAAa,gBAM5B,CAAA;IAED,wBAA+B,EAAS;QAErC,IAAM,SAAS,GAAG,QAAQ,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,CAAC;QAErE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EACzC,CAAC;YACE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EACvD,CAAC;gBACE,IAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBAEtC,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,KAAK,GAAG,CAAC,CACxB,CAAC;oBACE,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;gBAC/C,CAAC;YACJ,CAAC;QACJ,CAAC;IACJ,CAAC;IAhBe,wBAAc,iBAgB7B,CAAA;AACJ,CAAC,EA3BM,SAAS,KAAT,SAAS,QA2Bf;AAED,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC"}
{"version":3,"file":"bfs.js","sourceRoot":"","sources":["bfs.ts"],"names":[],"mappings":"AAAA,IAAO,SAAS,CAyCf;AAzCD,WAAO,SAAS,EAChB,CAAC;IACE,uBAA8B,EAAc;QAEzC,EAAE,CAAC,cAAc,EAAE,CAAC;QAEpB,IAAM,IAAI,GAAG,IAAyB,CAAC;QACvC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IANe,uBAAa,gBAM5B,CAAA;IAED,wBAA+B,EAAc;QAE1C,EAAE,CAAC,cAAc,EAAE,CAAC;QAEpB,IAAM,IAAI,GAAG,IAAyB,CAAC;QACvC,QAAQ,CAAC,MAAM,GAAG,UAAQ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,oDAAiD,CAAC;QAChG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAPe,wBAAc,iBAO7B,CAAA;IAED,wBAA+B,EAAS;QAErC,IAAM,SAAS,GAAG,QAAQ,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,CAAC;QACrE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EACzC,CAAC;YACE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EACvD,CAAC;gBACE,IAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBAEtC,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,KAAK,GAAG,CAAC,CACxB,CAAC;oBACE,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;gBAC/C,CAAC;YACJ,CAAC;QACJ,CAAC;QAED,IAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACxF,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EACvC,CAAC;YACE,OAAO,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACxD,CAAC;IACJ,CAAC;IArBe,wBAAc,iBAqB7B,CAAA;AACJ,CAAC,EAzCM,SAAS,KAAT,SAAS,QAyCf;AAED,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC"}

View File

@ -1 +1 @@
var BuildFeed;(function(n){function t(n){n.preventDefault();var t=this;t.parentElement.classList.toggle("open")}function i(){for(var i,u,r=document.getElementsByClassName("dropdown-parent"),n=0;n<r.length;n++)for(i=0;i<r[n].childNodes.length;i++)u=r[n].childNodes[i],u.nodeName==="A"&&u.addEventListener("click",t)}n.DropdownClick=t;n.BuildFeedSetup=i})(BuildFeed||(BuildFeed={}));window.addEventListener("load",BuildFeed.BuildFeedSetup);
var BuildFeed;(function(n){function t(n){n.preventDefault();var t=this;t.parentElement.classList.toggle("open")}function i(n){n.preventDefault();var t=this;document.cookie="lang="+t.dataset.lang+"; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/";location.reload(!0)}function r(){for(var r,f,e,u=document.getElementsByClassName("dropdown-parent"),n=0;n<u.length;n++)for(r=0;r<u[n].childNodes.length;r++)f=u[n].childNodes[r],f.nodeName==="A"&&f.addEventListener("click",t);for(e=document.getElementById("settings-lang-menu").getElementsByTagName("a"),n=0;n<e.length;n++)e[n].addEventListener("click",i)}n.DropdownClick=t;n.SwitchLanguage=i;n.BuildFeedSetup=r})(BuildFeed||(BuildFeed={}));window.addEventListener("load",BuildFeed.BuildFeedSetup);

View File

@ -8,10 +8,18 @@
link.parentElement.classList.toggle("open");
}
export function SwitchLanguage(ev: MouseEvent)
{
ev.preventDefault();
const link = this as HTMLAnchorElement;
document.cookie = `lang=${link.dataset["lang"]}; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/`;
location.reload(true);
}
export function BuildFeedSetup(ev: Event)
{
const ddParents = document.getElementsByClassName("dropdown-parent");
for (let i = 0; i < ddParents.length; i++)
{
for (let j = 0; j < ddParents[i].childNodes.length; j++)
@ -24,6 +32,12 @@
}
}
}
const ddLangs = document.getElementById("settings-lang-menu").getElementsByTagName("a");
for (let i = 0; i < ddLangs.length; i++)
{
ddLangs[i].addEventListener("click", SwitchLanguage);
}
}
}

View File

@ -1,6 +1,6 @@
@model BuildFeed.Models.ViewModel.Front.FrontPage
@{
ViewBag.Title = $"{BuildFeed.Local.Common.SiteName}";
ViewBag.Title = $"{BuildFeed.Local.Common.SiteName} | Windows 10 Build Tracker";
}
@section Head
{
@ -13,13 +13,13 @@
<div class="latest-flex">
<a href="@Url.Action("ViewBuild", new
{
Model.CurrentOsg.Id
Model.CurrentCanary.Id
})" class="latest-flex-item latest-flex-red">
<h3 class="latest-flex-title">Current OSG</h3>
<h3 class="latest-flex-title">Current Canary</h3>
<div class="latest-flex-detail">
<p class="latest-flex-build">@(Model.CurrentOsg.MajorVersion).@(Model.CurrentOsg.MinorVersion).@(Model.CurrentOsg.Number).@(Model.CurrentOsg.Revision)</p>
<p class="latest-flex-lab">@Model.CurrentOsg.Lab</p>
<p class="latest-flex-time">@Model.CurrentOsg.BuildTime.Value.ToString("HH:mm tt on dddd, dd MMMM yyyy")</p>
<p class="latest-flex-build">@(Model.CurrentCanary.MajorVersion).@(Model.CurrentCanary.MinorVersion).@(Model.CurrentCanary.Number).@(Model.CurrentCanary.Revision)</p>
<p class="latest-flex-lab">@Model.CurrentCanary.Lab</p>
<p class="latest-flex-time">@Model.CurrentCanary.BuildTime.Value.ToString("HH:mmtt, dddd dd MMMM yyyy")</p>
</div>
</a>
<a href="@Url.Action("ViewBuild", new
@ -30,7 +30,7 @@
<div class="latest-flex-detail">
<p class="latest-flex-build">@(Model.CurrentInsider.MajorVersion).@(Model.CurrentInsider.MinorVersion).@(Model.CurrentInsider.Number).@(Model.CurrentInsider.Revision)</p>
<p class="latest-flex-lab">@Model.CurrentInsider.Lab</p>
<p class="latest-flex-time">@Model.CurrentInsider.BuildTime.Value.ToString("HH:mm tt on dddd, dd MMMM yyyy")</p>
<p class="latest-flex-time">@Model.CurrentInsider.BuildTime.Value.ToString("HH:mmtt, dddd dd MMMM yyyy")</p>
</div>
</a>
<a href="@Url.Action("ViewBuild", new
@ -41,7 +41,7 @@
<div class="latest-flex-detail">
<p class="latest-flex-build">@(Model.CurrentRelease.MajorVersion).@(Model.CurrentRelease.MinorVersion).@(Model.CurrentRelease.Number).@(Model.CurrentRelease.Revision)</p>
<p class="latest-flex-lab">@Model.CurrentRelease.Lab</p>
<p class="latest-flex-time">@Model.CurrentRelease.BuildTime.Value.ToString("HH:mm tt on dddd, dd MMMM yyyy")</p>
<p class="latest-flex-time">@Model.CurrentRelease.BuildTime.Value.ToString("HH:mmtt, dddd dd MMMM yyyy")</p>
</div>
</a>
</div>
@ -49,7 +49,7 @@
<h3>@BuildFeed.Local.Front.Share</h3>
<div class="addthis_sharing_toolbox"></div>
<br />
<h3>Frequently asked questions</h3>
<h3>About BuildFeed</h3>
<h4>Who runs BuildFeed? Is this supported by Microsoft?</h4>
<p>BuildFeed is ran and maintained by a group of enthusiasts, without the support of Microsoft. We've certainly had sources shut down by changes at Microsoft in the past, and I'm sure we will in the future.</p>
<h4>How does BuildFeed get its data?</h4>

View File

@ -1,5 +1,6 @@
@model IEnumerable<BuildFeed.Models.BuildModel>
@using BuildFeed.Code
@using BuildFeed.Models
@using Humanizer;
@{
ViewBag.Title = string.Format("{0}{1} | {2}", string.Format(BuildFeed.Local.Front.BuildsFrom, ViewBag.ItemId), ViewBag.PageNumber == 1 ? "" : string.Format(BuildFeed.Local.Common.PageTitleSegment, ViewBag.PageNumber), BuildFeed.Local.Common.SiteName);
@ -33,12 +34,20 @@
}
<h3>@BuildFeed.Local.Front.Share</h3>
<div class="addthis_sharing_toolbox"></div>
<br />
<h3>@BuildFeed.Local.Front.Listing</h3>
<div class="row">
@foreach (var build in Model)
<div class="build-group-listing">
@foreach (BuildModel build in Model)
{
<div class="col-md-2 col-sm-3 col-xs-6 build-group">
<h3 class="build-group-title no-wrapping" title="@build.Lab"><a href="@Url.Action("ViewBuild", new {id = build.Id})">@string.Format("{0}.{1}.{2}.{3}", build.MajorVersion, build.MinorVersion, build.Number, build.Revision)</a></h3>
<div class="build-group">
<h3 class="build-group-title" title="@build.Lab">
<a href="@Url.Action("ViewBuild", new
{
id = build.Id
})">
@($"{build.MajorVersion}.{build.MinorVersion}.{build.Number}.{build.Revision}")
</a>
</h3>
@if (User.Identity.IsAuthenticated)
{
<p>
@ -56,7 +65,7 @@
<span title="@build.BuildTime.Value.Humanize()"><i class="fa fa-clock-o fa-fw"></i> @build.BuildTime.Value.ToShortTimeString()</span><br />
}
</p>
<p>
<p class="build-group-p">
@if (build.IsLeaked)
{
<span class="label label-success label-build-status">@BuildFeed.Local.Front.Public</span>
@ -68,5 +77,8 @@
</p>
</div>
}
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
</div>
@PaginationHelpers.PaginationBlock((int)ViewBag.PageNumber, (int)ViewBag.PageCount, "viewLab", ViewContext.RouteData.Values)

View File

@ -1,70 +1,81 @@
@model IEnumerable<BuildFeed.Models.BuildModel>
@using BuildFeed.Code
@using BuildFeed.Models
@using Humanizer;
@{
ViewBag.Title = string.Format("{0}{1} | {2}", ViewBag.ItemId, ViewBag.PageNumber == 1 ? "" : string.Format(BuildFeed.Local.Common.PageTitleSegment, ViewBag.PageNumber), @BuildFeed.Local.Common.SiteName);
ViewBag.Title = string.Format("{0}{1} | {2}", ViewBag.ItemId, ViewBag.PageNumber == 1 ? "" : string.Format(BuildFeed.Local.Common.PageTitleSegment, ViewBag.PageNumber), @BuildFeed.Local.Common.SiteName);
}
@section head
{
@if (ViewBag.MetaItem != null)
{
<meta name="description" content="@ViewBag.MetaItem.MetaDescription" />
<meta property="og:description" content="@ViewBag.MetaItem.MetaDescription" />
}
@if (ViewBag.MetaItem != null)
{
<meta name="description" content="@ViewBag.MetaItem.MetaDescription" />
<meta property="og:description" content="@ViewBag.MetaItem.MetaDescription" />
}
@if (ViewBag.PageNumber != 1)
{
<meta name="robots" content="noindex, follow" />
}
@if (ViewBag.PageNumber != 1)
{
<meta name="robots" content="noindex, follow" />
}
}
<h1>@ViewBag.ItemId</h1>
@if (ViewBag.MetaItem != null && !string.IsNullOrWhiteSpace(ViewBag.MetaItem.PageContent))
{
<h3>@BuildFeed.Local.Front.About</h3>
@Html.Raw(ViewBag.MetaItem.PageContent)
<h3>@BuildFeed.Local.Front.About</h3>
@Html.Raw(ViewBag.MetaItem.PageContent)
}
<h3>@BuildFeed.Local.Front.Share</h3>
<div class="addthis_sharing_toolbox"></div>
<br />
<h3>@BuildFeed.Local.Front.Listing</h3>
<div class="row">
@foreach (var build in Model)
{
<div class="col-md-2 col-sm-3 col-xs-6 build-group">
<h3 class="build-group-title no-wrapping" title="@build.Lab"><a href="@Url.Action("ViewBuild", new {id = build.Id})">@string.Format("{0}.{1}.{2}.{3}", build.MajorVersion, build.MinorVersion, build.Number, build.Revision)</a></h3>
@if (User.Identity.IsAuthenticated)
<div class="build-group-listing">
@foreach (BuildModel build in Model)
{
<div class="build-group">
<h3 class="build-group-title" title="@build.Lab">
<a href="@Url.Action("ViewBuild", new
{
id = build.Id
})">
@($"{build.MajorVersion}.{build.MinorVersion}.{build.Number}.{build.Revision}")
</a>
</h3>
@if (User.Identity.IsAuthenticated)
{
<p>
<a href="@Url.Action("editBuild", new { id = build.Id })" class="btn btn-primary btn-xs">@BuildFeed.Local.Front.Edit</a>
@if (Roles.IsUserInRole("Administrators"))
{
<a href="@Url.Action("DeleteBuild", new { id = build.Id })" class="btn btn-danger btn-xs">@BuildFeed.Local.Front.Delete</a>
}
</p>
}
<p class="build-group-p">
@if (!string.IsNullOrEmpty(build.Lab))
{
<div class="no-wrapping" title="@build.Lab"><i class="fa fa-code-fork fa-fw"></i> @build.Lab</div>
}
@if (build.BuildTime.HasValue)
{
<span title="@build.BuildTime.Value.Humanize()"><i class="fa fa-calendar fa-fw"></i> @build.BuildTime.Value.ToLongDateWithoutDay()</span><br />
<span title="@build.BuildTime.Value.Humanize()"><i class="fa fa-clock-o fa-fw"></i> @build.BuildTime.Value.ToShortTimeString()</span><br />
}
</p>
<p>
@if (build.IsLeaked)
{
<span class="label label-success label-build-status">@BuildFeed.Local.Front.Public</span>
}
else
{
<span class="label label-danger label-build-status">@BuildFeed.Local.Front.Private</span>
}
<a href="@Url.Action("editBuild", new { id = build.Id })" class="btn btn-primary btn-xs">@BuildFeed.Local.Front.Edit</a>
@if (Roles.IsUserInRole("Administrators"))
{
<a href="@Url.Action("DeleteBuild", new { id = build.Id })" class="btn btn-danger btn-xs">@BuildFeed.Local.Front.Delete</a>
}
</p>
</div>
}
}
@if (!string.IsNullOrEmpty(build.Lab))
{
<p class="no-wrapping build-group-p" title="@build.Lab"><i class="fa fa-code-fork fa-fw"></i> @build.Lab</p>
}
@if (build.BuildTime.HasValue)
{
<p class="build-group-p">
<span title="@build.BuildTime.Value.Humanize()"><i class="fa fa-calendar fa-fw"></i> @build.BuildTime.Value.ToLongDateWithoutDay()</span>
</p>
<p class="build-group-p">
<span title="@build.BuildTime.Value.Humanize()"><i class="fa fa-clock-o fa-fw"></i> @build.BuildTime.Value.ToShortTimeString()</span>
</p>
}
<p class="build-group-p">
@if (build.IsLeaked)
{
<span class="label label-success label-build-status">@BuildFeed.Local.Front.Public</span>
}
else
{
<span class="label label-danger label-build-status">@BuildFeed.Local.Front.Private</span>
}
</p>
</div>
}
</div>
@PaginationHelpers.PaginationBlock((int)ViewBag.PageNumber, (int)ViewBag.PageCount, "viewSource", ViewContext.RouteData.Values)

View File

@ -35,12 +35,13 @@
}
<h3>@Front.Share</h3>
<div class="addthis_sharing_toolbox"></div>
<br />
<h3>@Front.Listing</h3>
<div class="row">
<div class="build-group-listing">
@foreach (BuildModel build in Model)
{
<div class="col-md-2 col-sm-3 col-xs-6 build-group">
<h3 class="build-group-title no-wrapping" title="@build.Lab">
<div class="build-group">
<h3 class="build-group-title" title="@($"{build.MajorVersion}.{build.MinorVersion}.{build.Number}.{build.Revision}")">
<a href="@Url.Action("ViewBuild", new
{
id = build.Id
@ -50,7 +51,7 @@
</h3>
@if (User.Identity.IsAuthenticated)
{
<p>
<p class="build-group-p">
<a href="@Url.Action("EditBuild", new
{
id = build.Id
@ -80,7 +81,7 @@
<br/>
}
</p>
<p>
<p class="build-group-p">
@if (build.IsLeaked)
{
<span class="label label-success label-build-status">@Front.Public</span>
@ -92,5 +93,8 @@
</p>
</div>
}
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
</div>
@PaginationHelpers.PaginationBlock((int) ViewBag.PageNumber, (int) ViewBag.PageCount, "viewYear", ViewContext.RouteData.Values)

View File

@ -20,11 +20,11 @@
<link rel="canonical" href="@Url.Action()" />
<meta name="application-name" content="@Common.SiteName" />
<link href="/content/default.min.css" rel="stylesheet" type="text/css" />
<link href="/content/dark.min.css" rel="stylesheet" type="text/css" />
<link href="/res/css/default.min.css" rel="stylesheet" type="text/css" />
<link href="/res/css/dark.min.css" rel="stylesheet" type="text/css" />
@if (isRtl)
{
<link href="/content/rtl.min.css" rel="stylesheet" type="text/css" />
<link href="/res/css/rtl.min.css" rel="stylesheet" type="text/css" />
}
<title>@ViewBag.Title</title>
@RenderSection("head", false)

View File

@ -65,5 +65,7 @@
@section Scripts
{
@Scripts.Render("~/bundles/jqueryval")
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script type="text/javascript" src="~/Scripts/jquery.validate.min.js"></script>
<script type="text/javascript" src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
}

View File

@ -1,20 +1,26 @@
[
{
"outputFileName": "res/css/dark.min.css",
"inputFiles": [
"res/css/dark.css"
]
},
{
"outputFileName": "res/css/default.min.css",
"inputFiles": [
"res/css/default.css"
]
},
{
"outputFileName": "res/css/rtl.min.css",
"inputFiles": [
"res/css/rtl.css"
]
},
{
"outputFileName": "Scripts/bfs.min.js",
"inputFiles": [
"Scripts/bfs.js"
]
},
{
"outputFileName": "content/default.min.css",
"inputFiles": [
"content/default.css"
]
},
{
"outputFileName": "content/dark.min.css",
"inputFiles": [
"content/dark.css"
]
}
]

View File

@ -1,17 +1,14 @@
[
[
{
"outputFile": "content/default.css",
"inputFile": "content/default.scss",
"sourceMap": false
"outputFile": "res/css/default.css",
"inputFile": "res/css/default.scss"
},
{
"outputFile": "content/rtl.css",
"inputFile": "content/rtl.scss",
"sourceMap": false
"outputFile": "res/css/dark.css",
"inputFile": "res/css/dark.scss"
},
{
"outputFile": "content/dark.css",
"inputFile": "content/dark.scss",
"sourceMap": false
"outputFile": "res/css/rtl.css",
"inputFile": "res/css/rtl.scss"
}
]

View File

@ -1 +0,0 @@
body{font-family:'Roboto',sans-serif;font-size:10pt;margin:0;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}a{text-decoration:none}h1{font-size:3em;font-weight:500}.container{width:1240px;max-width:80%;margin:0 auto}.no-wrapping{-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis;overflow:hidden}.eager-wrapping{-ms-word-wrap:break-word;word-wrap:break-word}header#page-header h1{font-weight:300;margin:.33em 0}nav#page-navigation #page-navigation-links{margin:0 -15px;padding:0;text-align:right}nav#page-navigation #page-navigation-links>li{display:inline-block;vertical-align:top}nav#page-navigation #page-navigation-links>li>a{display:block;padding:15px}nav#page-navigation button{display:none}.dropdown-parent{position:relative}.dropdown-parent .dropdown-menu{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;display:none;position:absolute;right:0;width:calc(80vw + 20px);max-width:1240px;padding:15px;text-align:left}.dropdown-parent .dropdown-menu h4{margin:0 0 .5em;font-size:1.2em;font-weight:500}.dropdown-parent .dropdown-menu .dropdown-menu-block{float:left;display:inline-block;vertical-align:top}.dropdown-parent .dropdown-menu .dropdown-menu-block ul{padding:0}.dropdown-parent .dropdown-menu .dropdown-menu-block li{list-style-type:none;line-height:2em;float:left;width:20%;min-width:100px;vertical-align:top}.dropdown-parent .dropdown-menu .dropdown-menu-block li>a{display:block;padding:0 1em}.dropdown-parent .dropdown-menu #settings-theme-menu{width:120px}.dropdown-parent .dropdown-menu #settings-lang-menu{width:calc(100% - 120px)}.dropdown-parent.open .dropdown-menu{display:block}article{padding:2em 0}article h1{font-size:5em;font-weight:300;text-align:center;margin:0 0 .33333em}article h3{font-size:2em;font-weight:bold;padding:0 0 .33333em;margin:0 0 .66667em;text-transform:uppercase;letter-spacing:.25em;border-bottom:1px solid}article .build-group-listing{display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;justify-content:center;margin:0 -.75em}article .build-group-listing .build-group{width:calc(16.66667% - 1.5em);min-width:160px;flex-grow:1;margin:0 .75em 1em;box-sizing:border-box}article .build-group-listing .build-group h3{font-size:1.75em;font-weight:300;padding:0;margin:0 0 .4em;letter-spacing:-.05em;border-bottom:0;text-transform:lowercase}article .build-group-listing .build-group p{font-size:1.1em;font-weight:300;margin:0 0 .66667em}article .build-group-listing .build-group-empty{width:calc(16.66667% - 1.5em);min-width:160px;flex-grow:1;margin:0 .75em;box-sizing:border-box}.latest-flex{display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;justify-content:space-between;margin-right:-1em}.latest-flex .latest-flex-item{width:calc(33.33333% - 1em);min-width:200px;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;background:#fff;margin-bottom:2em;flex-grow:1;margin-right:1em}.latest-flex .latest-flex-item h3.latest-flex-title{border-bottom:0;margin:0;padding:0;font-size:1.25em;font-weight:normal;text-align:center;padding:.5em;color:#fff}.latest-flex .latest-flex-item.latest-flex-red{border:1px solid #c00}.latest-flex .latest-flex-item.latest-flex-red h3.latest-flex-title{background:#c00}.latest-flex .latest-flex-item.latest-flex-yellow{border:1px solid #cc0}.latest-flex .latest-flex-item.latest-flex-yellow h3.latest-flex-title{background:#cc0}.latest-flex .latest-flex-item.latest-flex-green{border:1px solid #0c0}.latest-flex .latest-flex-item.latest-flex-green h3.latest-flex-title{background:#0c0}.latest-flex .latest-flex-item .latest-flex-detail{color:#373736;text-align:center;font-weight:300}.latest-flex .latest-flex-item .latest-flex-detail .latest-flex-build{font-size:2.5em;margin:.5em 0 .25em}.latest-flex .latest-flex-item .latest-flex-detail .latest-flex-lab{font-size:1.5em;margin:0 0 .5em}.latest-full{display:block;background:#00c;font-weight:normal;text-align:center;color:#fff;margin:0 0 2em;padding:.5em}ul.pagination{text-align:center;margin:0 0 1em;padding:0;display:flex;justify-content:center}ul.pagination>li{list-style:none;width:1.5em;line-height:1.5em;margin:0 .25em}ul.pagination>li>a,ul.pagination>li>span{display:block;border-radius:.5em}ul.pagination>li>span{cursor:not-allowed}footer#page-footer{padding-top:1.33333em;font-size:.85em}footer#page-footer .footer-flex{display:flex}footer#page-footer .footer-flex .footer-flex-item{width:50%;min-width:200px;text-align:center}footer#page-footer .footer-flex .footer-flex-item:last-child{text-align:right}footer#page-footer .footer-flex .footer-flex-item:first-child{text-align:left}footer#page-footer p{margin:0 0 .4em}

8
BuildFeed/res/Web.config Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" />
</staticContent>
</system.webServer>
</configuration>

View File

@ -93,11 +93,13 @@ article {
font-weight: 300;
text-align: center;
margin: 0 0 0.33333em; }
article h1.eager-wrapping {
font-size: 4em; }
article h3 {
font-size: 2em;
font-weight: bold;
padding: 0 0 0.33333em;
margin: 0 0 0.66667em;
margin: 0.33333em 0 0.66667em;
text-transform: uppercase;
letter-spacing: 0.25em;
border-bottom: 1px solid; }
@ -109,8 +111,7 @@ article {
justify-content: center;
margin: 0 -0.75em; }
article .build-group-listing .build-group {
width: calc(16.66667% - 1.5em);
min-width: 160px;
width: 160px;
flex-grow: 1;
margin: 0 0.75em 1em;
box-sizing: border-box; }
@ -127,8 +128,7 @@ article {
font-weight: 300;
margin: 0 0 0.66667em; }
article .build-group-listing .build-group-empty {
width: calc(16.66667% - 1.5em);
min-width: 160px;
width: 160px;
flex-grow: 1;
margin: 0 0.75em;
box-sizing: border-box; }
@ -139,17 +139,15 @@ article {
-webkit-flex-wrap: wrap;
flex-wrap: wrap;
justify-content: space-between;
margin-right: -1em; }
margin: 2em -2em 0 0; }
.latest-flex .latest-flex-item {
width: calc(33.33333% - 1em);
min-width: 200px;
width: 240px;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
background: #fff;
margin-bottom: 2em;
flex-grow: 1;
margin-right: 1em; }
margin: 0 2em 2em 0; }
.latest-flex .latest-flex-item h3.latest-flex-title {
border-bottom: 0;
margin: 0;
@ -157,39 +155,42 @@ article {
font-size: 1.25em;
font-weight: normal;
text-align: center;
padding: 0.5em;
padding: 0.4em 0.5em;
margin: -1px;
color: #fff; }
.latest-flex .latest-flex-item.latest-flex-red {
border: 1px solid #c00; }
border: 0.16667em solid #FF2626; }
.latest-flex .latest-flex-item.latest-flex-red h3.latest-flex-title {
background: #c00; }
background: #FF2626; }
.latest-flex .latest-flex-item.latest-flex-yellow {
border: 1px solid #cc0; }
border: 0.16667em solid #FF9F19; }
.latest-flex .latest-flex-item.latest-flex-yellow h3.latest-flex-title {
background: #cc0; }
background: #FF9F19; }
.latest-flex .latest-flex-item.latest-flex-green {
border: 1px solid #0c0; }
border: 0.16667em solid #12B23F; }
.latest-flex .latest-flex-item.latest-flex-green h3.latest-flex-title {
background: #0c0; }
background: #12B23F; }
.latest-flex .latest-flex-item .latest-flex-detail {
color: #373736;
text-align: center;
font-weight: 300; }
.latest-flex .latest-flex-item .latest-flex-detail .latest-flex-build {
font-size: 2.5em;
margin: 0.5em 0 0.25em; }
font-size: 2.33333em;
margin: 0.33333em 0 0.16667em; }
.latest-flex .latest-flex-item .latest-flex-detail .latest-flex-lab {
font-size: 1.5em;
margin: 0 0 0.5em; }
.latest-flex .latest-flex-item .latest-flex-detail .latest-flex-time {
margin: 0 0 0.75em; }
.latest-full {
display: block;
background: #00c;
background: #1274B2;
font-weight: normal;
text-align: center;
color: #fff;
margin: 0 0 2em;
padding: 0.5em; }
padding: 0.66667em; }
ul.pagination {
text-align: center;
@ -213,11 +214,15 @@ footer#page-footer {
padding-top: 1.33333em;
font-size: 0.85em; }
footer#page-footer .footer-flex {
display: flex; }
display: flex;
-ms-flex-wrap: wrap;
-webkit-flex-wrap: wrap;
flex-wrap: wrap; }
footer#page-footer .footer-flex .footer-flex-item {
width: 50%;
min-width: 200px;
text-align: center; }
text-align: center;
flex-grow: 1; }
footer#page-footer .footer-flex .footer-flex-item:last-child {
text-align: right; }
footer#page-footer .footer-flex .footer-flex-item:first-child {

1
BuildFeed/res/css/default.min.css vendored Normal file
View File

@ -0,0 +1 @@
body{font-family:'Roboto',sans-serif;font-size:10pt;margin:0;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}a{text-decoration:none}h1{font-size:3em;font-weight:500}.container{width:1240px;max-width:80%;margin:0 auto}.no-wrapping{-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis;overflow:hidden}.eager-wrapping{-ms-word-wrap:break-word;word-wrap:break-word}header#page-header h1{font-weight:300;margin:.33em 0}nav#page-navigation #page-navigation-links{margin:0 -15px;padding:0;text-align:right}nav#page-navigation #page-navigation-links>li{display:inline-block;vertical-align:top}nav#page-navigation #page-navigation-links>li>a{display:block;padding:15px}nav#page-navigation button{display:none}.dropdown-parent{position:relative}.dropdown-parent .dropdown-menu{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;display:none;position:absolute;right:0;width:calc(80vw + 20px);max-width:1240px;padding:15px;text-align:left}.dropdown-parent .dropdown-menu h4{margin:0 0 .5em;font-size:1.2em;font-weight:500}.dropdown-parent .dropdown-menu .dropdown-menu-block{float:left;display:inline-block;vertical-align:top}.dropdown-parent .dropdown-menu .dropdown-menu-block ul{padding:0}.dropdown-parent .dropdown-menu .dropdown-menu-block li{list-style-type:none;line-height:2em;float:left;width:20%;min-width:100px;vertical-align:top}.dropdown-parent .dropdown-menu .dropdown-menu-block li>a{display:block;padding:0 1em}.dropdown-parent .dropdown-menu #settings-theme-menu{width:120px}.dropdown-parent .dropdown-menu #settings-lang-menu{width:calc(100% - 120px)}.dropdown-parent.open .dropdown-menu{display:block}article{padding:2em 0}article h1{font-size:5em;font-weight:300;text-align:center;margin:0 0 .33333em}article h1.eager-wrapping{font-size:4em}article h3{font-size:2em;font-weight:bold;padding:0 0 .33333em;margin:.33333em 0 .66667em;text-transform:uppercase;letter-spacing:.25em;border-bottom:1px solid}article .build-group-listing{display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;justify-content:center;margin:0 -.75em}article .build-group-listing .build-group{width:160px;flex-grow:1;margin:0 .75em 1em;box-sizing:border-box}article .build-group-listing .build-group h3{font-size:1.75em;font-weight:300;padding:0;margin:0 0 .4em;letter-spacing:-.05em;border-bottom:0;text-transform:lowercase}article .build-group-listing .build-group p{font-size:1.1em;font-weight:300;margin:0 0 .66667em}article .build-group-listing .build-group-empty{width:160px;flex-grow:1;margin:0 .75em;box-sizing:border-box}.latest-flex{display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;justify-content:space-between;margin:2em -2em 0 0}.latest-flex .latest-flex-item{width:240px;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;background:#fff;flex-grow:1;margin:0 2em 2em 0}.latest-flex .latest-flex-item h3.latest-flex-title{border-bottom:0;margin:0;padding:0;font-size:1.25em;font-weight:normal;text-align:center;padding:.4em .5em;margin:-1px;color:#fff}.latest-flex .latest-flex-item.latest-flex-red{border:.16667em solid #ff2626}.latest-flex .latest-flex-item.latest-flex-red h3.latest-flex-title{background:#ff2626}.latest-flex .latest-flex-item.latest-flex-yellow{border:.16667em solid #ff9f19}.latest-flex .latest-flex-item.latest-flex-yellow h3.latest-flex-title{background:#ff9f19}.latest-flex .latest-flex-item.latest-flex-green{border:.16667em solid #12b23f}.latest-flex .latest-flex-item.latest-flex-green h3.latest-flex-title{background:#12b23f}.latest-flex .latest-flex-item .latest-flex-detail{color:#373736;text-align:center;font-weight:300}.latest-flex .latest-flex-item .latest-flex-detail .latest-flex-build{font-size:2.33333em;margin:.33333em 0 .16667em}.latest-flex .latest-flex-item .latest-flex-detail .latest-flex-lab{font-size:1.5em;margin:0 0 .5em}.latest-flex .latest-flex-item .latest-flex-detail .latest-flex-time{margin:0 0 .75em}.latest-full{display:block;background:#1274b2;font-weight:normal;text-align:center;color:#fff;margin:0 0 2em;padding:.66667em}ul.pagination{text-align:center;margin:0 0 1em;padding:0;display:flex;justify-content:center}ul.pagination>li{list-style:none;width:1.5em;line-height:1.5em;margin:0 .25em}ul.pagination>li>a,ul.pagination>li>span{display:block;border-radius:.5em}ul.pagination>li>span{cursor:not-allowed}footer#page-footer{padding-top:1.33333em;font-size:.85em}footer#page-footer .footer-flex{display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap}footer#page-footer .footer-flex .footer-flex-item{width:50%;min-width:200px;text-align:center;flex-grow:1}footer#page-footer .footer-flex .footer-flex-item:last-child{text-align:right}footer#page-footer .footer-flex .footer-flex-item:first-child{text-align:left}footer#page-footer p{margin:0 0 .4em}

View File

@ -158,6 +158,11 @@ article
font-weight: 300;
text-align: center;
margin: 0 0 #{(1em / 3)};
&.eager-wrapping
{
font-size: 4em;
}
}
h3
@ -165,7 +170,7 @@ article
font-size: 2em;
font-weight: bold;
padding: 0 0 #{(1em / 3)};
margin: 0 0 #{(2em / 3)};
margin: #{(1em / 3)} 0 #{(2em / 3)};
text-transform: uppercase;
letter-spacing: #{(1em / 4)};
border-bottom: 1px solid;
@ -182,8 +187,7 @@ article
.build-group
{
width: calc(#{(100% / 6)} - 1.5em);
min-width: 160px;
width: 160px;
flex-grow: 1;
margin: 0 0.75em 1em;
box-sizing: border-box;
@ -209,8 +213,7 @@ article
.build-group-empty
{
width: calc(#{(100% / 6)} - 1.5em);
min-width: 160px;
width: 160px;
flex-grow: 1;
margin: 0 0.75em;
box-sizing: border-box;
@ -225,19 +228,17 @@ article
-webkit-flex-wrap: wrap;
flex-wrap: wrap;
justify-content: space-between;
margin-right: -1em;
margin: 2em -2em 0 0;
.latest-flex-item
{
width: calc(#{(100% / 3)} - 1em);
min-width: 200px;
width: 240px;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
background: #fff;
margin-bottom: 2em;
flex-grow: 1;
margin-right: 1em;
margin: 0 2em 2em 0;
h3.latest-flex-title
{
@ -247,37 +248,38 @@ article
font-size: 1.25em;
font-weight: normal;
text-align: center;
padding: 0.5em;
padding: 0.4em 0.5em;
margin: -1px;
color: #fff;
}
&.latest-flex-red
{
border: 1px solid #c00;
border: #{(1em / 6)} solid #FF2626;
h3.latest-flex-title
{
background: #c00;
background: #FF2626;
}
}
&.latest-flex-yellow
{
border: 1px solid #cc0;
border: #{(1em / 6)} solid #FF9F19;
h3.latest-flex-title
{
background: #cc0;
background: #FF9F19;
}
}
&.latest-flex-green
{
border: 1px solid #0c0;
border: #{(1em / 6)} solid #12B23F;
h3.latest-flex-title
{
background: #0c0;
background: #12B23F;
}
}
@ -289,15 +291,20 @@ article
.latest-flex-build
{
font-size: 2.5em;
margin: 0.5em 0 0.25em;
font-size: #{(7em / 3)};
margin: #{(1em / 3)} 0 #{(1em / 6)};
}
.latest-flex-lab
{
{
font-size: 1.5em;
margin: 0 0 0.5em;
}
.latest-flex-time
{
margin: 0 0 0.75em;
}
}
}
}
@ -305,12 +312,12 @@ article
.latest-full
{
display: block;
background: #00c;
background: #1274B2;
font-weight: normal;
text-align: center;
color: #fff;
margin: 0 0 2em;
padding: 0.5em;
padding: #{(2em / 3)};
}
ul.pagination
@ -350,12 +357,16 @@ footer#page-footer
.footer-flex
{
display: flex;
-ms-flex-wrap: wrap;
-webkit-flex-wrap: wrap;
flex-wrap: wrap;
.footer-flex-item
{
width: 50%;
min-width: 200px;
text-align: center;
flex-grow: 1;
&:last-child
{