Bug fixes; Code style

This commit is contained in:
Thomas Hounsell 2016-11-05 01:36:36 +00:00
parent 24e12c8741
commit 7583968109
54 changed files with 540 additions and 1094 deletions

View File

@ -1,11 +1,11 @@
 // ReSharper disable InconsistentNaming // ReSharper disable InconsistentNaming
namespace BuildFeed.Local namespace BuildFeed.Local
{ {
public class InvariantTerms public class InvariantTerms
{ {
public const string SiteName = "BuildFeed";
public const string DeveloperName = "Thomas Hounsell"; public const string DeveloperName = "Thomas Hounsell";
public const string ProductName = "Windows NT"; public const string ProductName = "Windows NT";
public const string SiteName = "BuildFeed";
} }
} }

View File

@ -11,10 +11,12 @@
namespace BuildFeed.Model namespace BuildFeed.Model
{ {
[DataObject, BsonIgnoreExtraElements] [DataObject]
[BsonIgnoreExtraElements]
public class Build public class Build
{ {
[Key, BsonId] [Key]
[BsonId]
public Guid Id { get; set; } public Guid Id { get; set; }
public long? LegacyId { get; set; } public long? LegacyId { get; set; }
@ -66,7 +68,7 @@ public class Build
public string LabUrl { get; set; } public string LabUrl { get; set; }
public bool IsLeaked => SourceType == TypeOfSource.PublicRelease || SourceType == TypeOfSource.InternalLeak || SourceType == TypeOfSource.UpdateGDR || SourceType == TypeOfSource.UpdateLDR; public bool IsLeaked => (SourceType == TypeOfSource.PublicRelease) || (SourceType == TypeOfSource.InternalLeak) || (SourceType == TypeOfSource.UpdateGDR) || (SourceType == TypeOfSource.UpdateLDR);
public string FullBuildString public string FullBuildString
{ {
@ -154,8 +156,8 @@ public ProjectFamily Family
{ {
return ProjectFamily.Windows7; return ProjectFamily.Windows7;
} }
if (MajorVersion == 6 if ((MajorVersion == 6)
&& Number >= 5000) && (Number >= 5000))
{ {
return ProjectFamily.WindowsVista; return ProjectFamily.WindowsVista;
} }
@ -163,18 +165,18 @@ public ProjectFamily Family
{ {
return ProjectFamily.Longhorn; return ProjectFamily.Longhorn;
} }
if (MajorVersion == 5 if ((MajorVersion == 5)
&& Number >= 3000) && (Number >= 3000))
{ {
return ProjectFamily.Server2003; return ProjectFamily.Server2003;
} }
if (MajorVersion == 5 if ((MajorVersion == 5)
&& Number >= 2205) && (Number >= 2205))
{ {
return ProjectFamily.WindowsXP; return ProjectFamily.WindowsXP;
} }
if (MajorVersion == 5 if ((MajorVersion == 5)
&& MinorVersion == 50) && (MinorVersion == 50))
{ {
return ProjectFamily.Neptune; return ProjectFamily.Neptune;
} }

View File

@ -16,10 +16,10 @@ public async Task<BuildVersion[]> SelectAllVersions(int limit = -1, int skip = 0
new BsonElement(nameof(BuildVersion.Major), $"${nameof(Build.MajorVersion)}"), new BsonElement(nameof(BuildVersion.Major), $"${nameof(Build.MajorVersion)}"),
new BsonElement(nameof(BuildVersion.Minor), $"${nameof(Build.MinorVersion)}") new BsonElement(nameof(BuildVersion.Minor), $"${nameof(Build.MinorVersion)}")
})).Sort(new BsonDocument })).Sort(new BsonDocument
{ {
new BsonElement($"_id.{nameof(BuildVersion.Major)}", -1), new BsonElement($"_id.{nameof(BuildVersion.Major)}", -1),
new BsonElement($"_id.{nameof(BuildVersion.Minor)}", -1) new BsonElement($"_id.{nameof(BuildVersion.Minor)}", -1)
}).Skip(skip); }).Skip(skip);
if (limit > 0) if (limit > 0)
{ {

View File

@ -53,8 +53,8 @@ public async Task<List<Build>> SelectYear(int year, int limit = -1, int skip = 0
public async Task<long> SelectYearCount(int year) public async Task<long> SelectYearCount(int year)
=> =>
await await
_buildCollection.CountAsync(Builders<Build>.Filter.And(Builders<Build>.Filter.Gte(b => b.BuildTime, new DateTime(year, 1, 1, 0, 0, 0, DateTimeKind.Utc)), _buildCollection.CountAsync(Builders<Build>.Filter.And(Builders<Build>.Filter.Gte(b => b.BuildTime, new DateTime(year, 1, 1, 0, 0, 0, DateTimeKind.Utc)),
Builders<Build>.Filter.Lte(b => b.BuildTime, new DateTime(year, 12, 31, 23, 59, 59, DateTimeKind.Utc)))); Builders<Build>.Filter.Lte(b => b.BuildTime, new DateTime(year, 12, 31, 23, 59, 59, DateTimeKind.Utc))));
} }
} }

View File

@ -232,7 +232,7 @@ public async Task Insert(Build item)
[DataObjectMethod(DataObjectMethodType.Insert, false)] [DataObjectMethod(DataObjectMethodType.Insert, false)]
public async Task InsertAll(IEnumerable<Build> items) public async Task InsertAll(IEnumerable<Build> items)
{ {
List<Build> generatedItems = new List<Build>(); var generatedItems = new List<Build>();
foreach (Build item in items) foreach (Build item in items)
{ {
item.Id = Guid.NewGuid(); item.Id = Guid.NewGuid();

View File

@ -31,9 +31,9 @@ public class MetaItemModel
public class MetaItem public class MetaItem
{ {
private const string META_COLLECTION_NAME = "metaitem"; private const string META_COLLECTION_NAME = "metaitem";
private readonly BuildRepository _bModel;
private readonly IMongoCollection<MetaItemModel> _metaCollection; private readonly IMongoCollection<MetaItemModel> _metaCollection;
private readonly BuildRepository _bModel;
public MetaItem() public MetaItem()
{ {
@ -57,13 +57,22 @@ public MetaItem()
} }
[DataObjectMethod(DataObjectMethodType.Select, false)] [DataObjectMethod(DataObjectMethodType.Select, false)]
public async Task<IEnumerable<MetaItemModel>> Select() { return await _metaCollection.Find(new BsonDocument()).ToListAsync(); } public async Task<IEnumerable<MetaItemModel>> Select()
{
return await _metaCollection.Find(new BsonDocument()).ToListAsync();
}
[DataObjectMethod(DataObjectMethodType.Select, true)] [DataObjectMethod(DataObjectMethodType.Select, true)]
public async Task<IEnumerable<MetaItemModel>> SelectByType(MetaType type) { return await _metaCollection.Find(f => f.Id.Type == type).ToListAsync(); } public async Task<IEnumerable<MetaItemModel>> SelectByType(MetaType type)
{
return await _metaCollection.Find(f => f.Id.Type == type).ToListAsync();
}
[DataObjectMethod(DataObjectMethodType.Select, false)] [DataObjectMethod(DataObjectMethodType.Select, false)]
public async Task<MetaItemModel> SelectById(MetaItemKey id) { return await _metaCollection.Find(f => f.Id.Type == id.Type && f.Id.Value == id.Value).SingleOrDefaultAsync(); } public async Task<MetaItemModel> SelectById(MetaItemKey id)
{
return await _metaCollection.Find(f => (f.Id.Type == id.Type) && (f.Id.Value == id.Value)).SingleOrDefaultAsync();
}
[DataObjectMethod(DataObjectMethodType.Select, false)] [DataObjectMethod(DataObjectMethodType.Select, false)]
public async Task<IEnumerable<string>> SelectUnusedLabs() public async Task<IEnumerable<string>> SelectUnusedLabs()
@ -102,16 +111,28 @@ where usedYears.All(ul => ul.Id.Value != y.ToString())
} }
[DataObjectMethod(DataObjectMethodType.Insert, true)] [DataObjectMethod(DataObjectMethodType.Insert, true)]
public async Task Insert(MetaItemModel item) { await _metaCollection.InsertOneAsync(item); } public async Task Insert(MetaItemModel item)
{
await _metaCollection.InsertOneAsync(item);
}
[DataObjectMethod(DataObjectMethodType.Update, true)] [DataObjectMethod(DataObjectMethodType.Update, true)]
public async Task Update(MetaItemModel item) { await _metaCollection.ReplaceOneAsync(f => f.Id.Type == item.Id.Type && f.Id.Value == item.Id.Value, item); } public async Task Update(MetaItemModel item)
{
await _metaCollection.ReplaceOneAsync(f => (f.Id.Type == item.Id.Type) && (f.Id.Value == item.Id.Value), item);
}
[DataObjectMethod(DataObjectMethodType.Insert, false)] [DataObjectMethod(DataObjectMethodType.Insert, false)]
public async Task InsertAll(IEnumerable<MetaItemModel> items) { await _metaCollection.InsertManyAsync(items); } public async Task InsertAll(IEnumerable<MetaItemModel> items)
{
await _metaCollection.InsertManyAsync(items);
}
[DataObjectMethod(DataObjectMethodType.Delete, true)] [DataObjectMethod(DataObjectMethodType.Delete, true)]
public async Task DeleteById(MetaItemKey id) { await _metaCollection.DeleteOneAsync(f => f.Id.Type == id.Type && f.Id.Value == id.Value); } public async Task DeleteById(MetaItemKey id)
{
await _metaCollection.DeleteOneAsync(f => (f.Id.Type == id.Type) && (f.Id.Value == id.Value));
}
} }
public class MetaItemKey public class MetaItemKey
@ -119,7 +140,9 @@ public class MetaItemKey
public MetaType Type { get; set; } public MetaType Type { get; set; }
public string Value { get; set; } public string Value { get; set; }
public MetaItemKey() { } public MetaItemKey()
{
}
public MetaItemKey(string id) public MetaItemKey(string id)
{ {
@ -128,7 +151,10 @@ public MetaItemKey(string id)
Value = items[1]; Value = items[1];
} }
public override string ToString() { return $"{Type}:{Value}"; } public override string ToString()
{
return $"{Type}:{Value}";
}
} }
public enum MetaType public enum MetaType

View File

@ -3,10 +3,10 @@
@using BuildFeed.Code @using BuildFeed.Code
@helper PaginationBlock(int currentPage, int totalPages, string view, RouteValueDictionary rd) @helper PaginationBlock(int currentPage, int totalPages, string view, RouteValueDictionary rd)
{ {
string multiView = view + "Page"; string multiView = view + "Page";
if (totalPages > 1) if (totalPages > 1)
{ {
<div class="text-center"> <div class="text-center">
<ul class="pagination"> <ul class="pagination">
@if (currentPage == 2) @if (currentPage == 2)
@ -69,7 +69,10 @@ if (totalPages > 1)
["page"] = i ["page"] = i
}; };
<li @(i == currentPage ? "class=active" : "")>@MvcIntrinsics.Html.ActionLink(i.ToString(), multiView, rvd)</li> <li @(i == currentPage
? "class=active"
: "")>
@MvcIntrinsics.Html.ActionLink(i.ToString(), multiView, rvd)</li>
} }
@ -99,5 +102,5 @@ if (totalPages > 1)
} }
</ul> </ul>
</div> </div>
} }
} }

View File

@ -4,6 +4,9 @@ namespace BuildFeed
{ {
public class FilterConfig public class FilterConfig
{ {
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); } public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
} }
} }

View File

@ -9,7 +9,10 @@ public class baseController : BaseController
{ {
[Authorize(Roles = "Administrators")] [Authorize(Roles = "Administrators")]
// GET: admin/base // GET: admin/base
public ActionResult index() { return View(); } public ActionResult index()
{
return View();
}
[Authorize(Users = "hounsell")] [Authorize(Users = "hounsell")]
public ActionResult setup() public ActionResult setup()
@ -27,6 +30,9 @@ public ActionResult setup()
} }
[Authorize(Users = "hounsell")] [Authorize(Users = "hounsell")]
public ActionResult exception() { throw new Exception("This is a test exception"); } public ActionResult exception()
{
throw new Exception("This is a test exception");
}
} }
} }

View File

@ -12,7 +12,10 @@ public class metaController : BaseController
{ {
private readonly MetaItem _mModel; private readonly MetaItem _mModel;
public metaController() { _mModel = new MetaItem(); } public metaController()
{
_mModel = new MetaItem();
}
// GET: admin/meta // GET: admin/meta
public async Task<ActionResult> index() public async Task<ActionResult> index()

View File

@ -84,7 +84,8 @@
} }
} }
$(function() { $(function()
{
var btnsGrps = $.trumbowyg.btnsGrps; var btnsGrps = $.trumbowyg.btnsGrps;
$("#@Html.IdFor(model => model.PageContent)") $("#@Html.IdFor(model => model.PageContent)")
@ -101,7 +102,8 @@
}); });
$("#@Html.IdFor(model => model.MetaDescription)") $("#@Html.IdFor(model => model.MetaDescription)")
.keyup(function() { .keyup(function()
{
updateMetaCount(); updateMetaCount();
}); });

View File

@ -61,46 +61,42 @@
: mu.LastLockoutDate.Humanize()) : mu.LastLockoutDate.Humanize())
</td> </td>
<td class="text-right"> <td class="text-right">
@( @(mu.IsApproved
mu.IsApproved ? Html.ActionLink("Unapprove", "unapprove", new
? Html.ActionLink("Unapprove", "unapprove", new {
{ id = mu.ProviderUserKey
id = mu.ProviderUserKey }, new
}, new {
{ @class = "button delete-button",
@class = "button delete-button", style = "width:70px;"
style = "width:70px;" })
}) : Html.ActionLink("Approve", "approve", new
: Html.ActionLink("Approve", "approve", new {
{ id = mu.ProviderUserKey
id = mu.ProviderUserKey }, new
}, new {
{ @class = "button add-button",
@class = "button add-button", style = "width:70px;"
style = "width:70px;" }))
})
)
</td> </td>
<td class="text-right"> <td class="text-right">
@( @(!mu.IsLockedOut
!mu.IsLockedOut ? Html.ActionLink("Lock", "lock", new
? Html.ActionLink("Lock", "lock", new {
{ id = mu.ProviderUserKey
id = mu.ProviderUserKey }, new
}, new {
{ @class = "button delete-button",
@class = "button delete-button", style = "width:70px;"
style = "width:70px;" })
}) : Html.ActionLink("Unlock", "unlock", new
: Html.ActionLink("Unlock", "unlock", new {
{ id = mu.ProviderUserKey
id = mu.ProviderUserKey }, new
}, new {
{ @class = "button add-button",
@class = "button add-button", style = "width:70px;"
style = "width:70px;" }))
})
)
</td> </td>
</tr> </tr>
} }

View File

@ -27,7 +27,7 @@
<system.webServer> <system.webServer>
<handlers> <handlers>
<remove name="BlockViewHandler"/> <remove name="BlockViewHandler" />
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /> <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers> </handlers>
</system.webServer> </system.webServer>

View File

@ -1,4 +1,5 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<users> <users>
<user>77FAD24B9B2579631630796D246267C3</user> <user>77FAD24B9B2579631630796D246267C3</user>
</users> </users>

View File

@ -46,6 +46,19 @@
<DefineConstants>TRACE</DefineConstants> <DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<TypeScriptTarget>ES6</TypeScriptTarget>
<TypeScriptJSXEmit>None</TypeScriptJSXEmit>
<TypeScriptCompileOnSaveEnabled>True</TypeScriptCompileOnSaveEnabled>
<TypeScriptNoImplicitAny>False</TypeScriptNoImplicitAny>
<TypeScriptModuleKind>ES6</TypeScriptModuleKind>
<TypeScriptRemoveComments>False</TypeScriptRemoveComments>
<TypeScriptOutFile />
<TypeScriptOutDir />
<TypeScriptGeneratesDeclarations>False</TypeScriptGeneratesDeclarations>
<TypeScriptNoEmitOnError>True</TypeScriptNoEmitOnError>
<TypeScriptSourceMap>True</TypeScriptSourceMap>
<TypeScriptMapRoot />
<TypeScriptSourceRoot />
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="HtmlAgilityPack, Version=1.4.9.5, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL"> <Reference Include="HtmlAgilityPack, Version=1.4.9.5, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL">
@ -206,6 +219,7 @@
<ItemGroup> <ItemGroup>
<Content Include="BingSiteAuth.xml" /> <Content Include="BingSiteAuth.xml" />
<Content Include="browserconfig.xml" /> <Content Include="browserconfig.xml" />
<Content Include="gulpfile.js" />
<Content Include="res\card\Longhorn.png" /> <Content Include="res\card\Longhorn.png" />
<Content Include="res\card\Redstone2.png" /> <Content Include="res\card\Redstone2.png" />
<Content Include="res\card\Redstone.png" /> <Content Include="res\card\Redstone.png" />
@ -213,32 +227,8 @@
<Content Include="res\card\Threshold.png" /> <Content Include="res\card\Threshold.png" />
<Content Include="res\card\Windows7.png" /> <Content Include="res\card\Windows7.png" />
<Content Include="res\card\WindowsVista.png" /> <Content Include="res\card\WindowsVista.png" />
<Content Include="res\css\dark.css">
<DependentUpon>dark.scss</DependentUpon>
</Content>
<Content Include="res\css\dark.min.css">
<DependentUpon>dark.css</DependentUpon>
</Content>
<Content Include="res\css\default.css">
<DependentUpon>default.scss</DependentUpon>
</Content>
<Content Include="res\css\default.min.css">
<DependentUpon>default.css</DependentUpon>
</Content>
<Content Include="content\icons-2x.png" /> <Content Include="content\icons-2x.png" />
<Content Include="content\icons.png" /> <Content Include="content\icons.png" />
<Content Include="res\css\light.css">
<DependentUpon>light.scss</DependentUpon>
</Content>
<Content Include="res\css\light.min.css">
<DependentUpon>light.css</DependentUpon>
</Content>
<Content Include="res\css\rtl.css">
<DependentUpon>rtl.scss</DependentUpon>
</Content>
<Content Include="res\css\rtl.min.css">
<DependentUpon>rtl.css</DependentUpon>
</Content>
<Content Include="content\tile\wide.png" /> <Content Include="content\tile\wide.png" />
<Content Include="content\tile\large.png" /> <Content Include="content\tile\large.png" />
<Content Include="content\tile\square.png" /> <Content Include="content\tile\square.png" />
@ -257,16 +247,37 @@
<Content Include="Areas\admin\Views\users\admins.cshtml" /> <Content Include="Areas\admin\Views\users\admins.cshtml" />
<Content Include="Areas\admin\Views\meta\index.cshtml" /> <Content Include="Areas\admin\Views\meta\index.cshtml" />
<Content Include="Areas\admin\Views\meta\create.cshtml" /> <Content Include="Areas\admin\Views\meta\create.cshtml" />
<Content Include="res\css\dark.css">
<DependentUpon>dark.scss</DependentUpon>
</Content>
<Content Include="res\css\dark.css.map">
<DependentUpon>dark.css</DependentUpon>
</Content>
<Content Include="res\css\default.css">
<DependentUpon>default.scss</DependentUpon>
</Content>
<Content Include="res\css\default.css.map">
<DependentUpon>default.css</DependentUpon>
</Content>
<Content Include="res\css\light.css">
<DependentUpon>light.scss</DependentUpon>
</Content>
<Content Include="res\css\light.css.map">
<DependentUpon>light.css</DependentUpon>
</Content>
<Content Include="res\css\rtl.css">
<DependentUpon>rtl.scss</DependentUpon>
</Content>
<Content Include="res\css\rtl.css.map">
<DependentUpon>rtl.css</DependentUpon>
</Content>
<Content Include="robots.txt" /> <Content Include="robots.txt" />
<Content Include="App_Code\PaginationHelpers.cshtml" /> <Content Include="App_Code\PaginationHelpers.cshtml" />
<Content Include="res\css\default.scss" /> <Content Include="res\css\default.scss" />
<None Include="bundleconfig.json" /> <None Include="bundleconfig.json" />
<None Include="compilerconfig.json" />
<None Include="compilerconfig.json.defaults">
<DependentUpon>compilerconfig.json</DependentUpon>
</None>
<Content Include="res\css\rtl.scss" /> <Content Include="res\css\rtl.scss" />
<Content Include="res\css\dark.scss" /> <Content Include="res\css\dark.scss" />
<Content Include="package.json" />
<None Include="Properties\PublishProfiles\Milestone 1 [DEV].pubxml" /> <None Include="Properties\PublishProfiles\Milestone 1 [DEV].pubxml" />
<Content Include="res\ts\bfs.js"> <Content Include="res\ts\bfs.js">
<DependentUpon>bfs.ts</DependentUpon> <DependentUpon>bfs.ts</DependentUpon>
@ -445,12 +456,11 @@
</PropertyGroup> </PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
<TypeScriptTarget>ES5</TypeScriptTarget> <TypeScriptTarget>ES6</TypeScriptTarget>
<TypeScriptJSXEmit>None</TypeScriptJSXEmit> <TypeScriptJSXEmit>None</TypeScriptJSXEmit>
<TypeScriptCompileOnSaveEnabled>True</TypeScriptCompileOnSaveEnabled> <TypeScriptCompileOnSaveEnabled>True</TypeScriptCompileOnSaveEnabled>
<TypeScriptNoImplicitAny>False</TypeScriptNoImplicitAny> <TypeScriptNoImplicitAny>False</TypeScriptNoImplicitAny>
<TypeScriptModuleKind> <TypeScriptModuleKind>ES6</TypeScriptModuleKind>
</TypeScriptModuleKind>
<TypeScriptRemoveComments>True</TypeScriptRemoveComments> <TypeScriptRemoveComments>True</TypeScriptRemoveComments>
<TypeScriptOutFile /> <TypeScriptOutFile />
<TypeScriptOutDir /> <TypeScriptOutDir />

View File

@ -7,6 +7,9 @@ public class CustomContentTypeAttribute : ActionFilterAttribute
{ {
public string ContentType { get; set; } public string ContentType { get; set; }
public override void OnResultExecuted(ResultExecutedContext filterContext) { filterContext.HttpContext.Response.ContentType = ContentType; } public override void OnResultExecuted(ResultExecutedContext filterContext)
{
filterContext.HttpContext.Response.ContentType = ContentType;
}
} }
} }

View File

@ -6,7 +6,10 @@ namespace BuildFeed.Code.Options
{ {
public class Locale public class Locale
{ {
public static readonly Locale[] AvailableLocales = { private const string LANG_COOKIE_NAME = "bf_lang";
public static readonly Locale[] AvailableLocales =
{
new Locale("ar"), new Locale("ar"),
//new Locale("bn"), //new Locale("bn"),
new Locale("cs"), new Locale("cs"),
@ -41,8 +44,6 @@ public class Locale
new Locale("zh-hant") new Locale("zh-hant")
}; };
private const string LANG_COOKIE_NAME = "bf_lang";
public string DisplayName => Info.NativeName; public string DisplayName => Info.NativeName;
public CultureInfo Info { get; set; } public CultureInfo Info { get; set; }
@ -65,7 +66,7 @@ public static CultureInfo DetectCulture(HttpContextBase context)
CultureInfo ci = (CultureInfo)CultureInfo.GetCultureInfo(langCookie).Clone(); CultureInfo ci = (CultureInfo)CultureInfo.GetCultureInfo(langCookie).Clone();
// Get Gregorian Calendar in locale if available // Get Gregorian Calendar in locale if available
Calendar gc = ci.OptionalCalendars.FirstOrDefault(c => c is GregorianCalendar && ((GregorianCalendar)c).CalendarType == GregorianCalendarTypes.Localized); Calendar gc = ci.OptionalCalendars.FirstOrDefault(c => c is GregorianCalendar && (((GregorianCalendar)c).CalendarType == GregorianCalendarTypes.Localized));
if (gc != null) if (gc != null)
{ {
ci.DateTimeFormat.Calendar = gc; ci.DateTimeFormat.Calendar = gc;
@ -74,7 +75,9 @@ public static CultureInfo DetectCulture(HttpContextBase context)
return ci; return ci;
} }
catch (CultureNotFoundException) { } catch (CultureNotFoundException)
{
}
} }
return CultureInfo.CurrentCulture; return CultureInfo.CurrentCulture;

View File

@ -16,10 +16,13 @@ public class Theme
private readonly SiteTheme _siteTheme; private readonly SiteTheme _siteTheme;
public string CookieValue => _siteTheme.ToString(); public string CookieValue => _siteTheme.ToString();
public string CssPath => $"~/res/css/{_siteTheme.ToString().ToLower()}.min.css"; public string CssPath => $"~/res/css/{_siteTheme.ToString().ToLower()}.css";
public string DisplayName => MvcExtensions.GetDisplayTextForEnum(_siteTheme); public string DisplayName => MvcExtensions.GetDisplayTextForEnum(_siteTheme);
public Theme(SiteTheme st) { _siteTheme = st; } public Theme(SiteTheme st)
{
_siteTheme = st;
}
public static SiteTheme DetectTheme(HttpContextBase context) public static SiteTheme DetectTheme(HttpContextBase context)
{ {

View File

@ -15,11 +15,11 @@ public override void OnResultExecuted(ResultExecutedContext filterContext)
bool isRtl = CultureInfo.CurrentUICulture.TextInfo.IsRightToLeft; bool isRtl = CultureInfo.CurrentUICulture.TextInfo.IsRightToLeft;
Theme theme = new Theme(Theme.DetectTheme(filterContext.HttpContext)); Theme theme = new Theme(Theme.DetectTheme(filterContext.HttpContext));
filterContext.HttpContext.Response.PushPromise("/res/css/default.min.css"); filterContext.HttpContext.Response.PushPromise("/res/css/default.css");
filterContext.HttpContext.Response.PushPromise(VirtualPathUtility.ToAbsolute(theme.CssPath)); filterContext.HttpContext.Response.PushPromise(VirtualPathUtility.ToAbsolute(theme.CssPath));
if (isRtl) if (isRtl)
{ {
filterContext.HttpContext.Response.PushPromise("/res/css/rtl.min.css"); filterContext.HttpContext.Response.PushPromise("/res/css/rtl.css");
} }
filterContext.HttpContext.Response.PushPromise("/res/ts/bfs.min.js"); filterContext.HttpContext.Response.PushPromise("/res/ts/bfs.min.js");
} }

View File

@ -1,6 +1,4 @@
using System; using System.Globalization;
using System.Globalization;
using System.Linq;
using System.Web.Mvc; using System.Web.Mvc;
using System.Web.Routing; using System.Web.Routing;
using BuildFeed.Code.Options; using BuildFeed.Code.Options;

View File

@ -6,8 +6,8 @@
using System.Web.Security; using System.Web.Security;
using BuildFeed.Code; using BuildFeed.Code;
using BuildFeed.Local; using BuildFeed.Local;
using BuildFeed.Model.Api;
using BuildFeed.Model; using BuildFeed.Model;
using BuildFeed.Model.Api;
using BuildFeed.Model.View; using BuildFeed.Model.View;
namespace BuildFeed.Controllers namespace BuildFeed.Controllers
@ -16,7 +16,10 @@ public class ApiController : System.Web.Http.ApiController
{ {
private readonly BuildRepository _bModel; private readonly BuildRepository _bModel;
public ApiController() { _bModel = new BuildRepository(); } public ApiController()
{
_bModel = new BuildRepository();
}
public async Task<Build[]> GetBuilds(int limit = 20, int skip = 0) public async Task<Build[]> GetBuilds(int limit = 20, int skip = 0)
{ {
@ -51,7 +54,7 @@ public async Task<Build[]> GetBuildsByLab(string lab, int limit = 20, int skip =
public async Task<IEnumerable<string>> GetWin10Labs() public async Task<IEnumerable<string>> GetWin10Labs()
{ {
List<string> labs = new List<string>(); var labs = new List<string>();
labs.AddRange(await _bModel.SelectLabsForVersion(6, 4)); labs.AddRange(await _bModel.SelectLabsForVersion(6, 4));
labs.AddRange(await _bModel.SelectLabsForVersion(10, 0)); labs.AddRange(await _bModel.SelectLabsForVersion(10, 0));
@ -94,7 +97,7 @@ public async Task<IEnumerable<SearchResult>> GetSearchResult(string id)
} }
const int maxResults = 16; const int maxResults = 16;
List<SearchResult> results = new List<SearchResult>(); var results = new List<SearchResult>();
results.AddRange(from s in (from c in Enum.GetValues(typeof(TypeOfSource)).Cast<TypeOfSource>() results.AddRange(from s in (from c in Enum.GetValues(typeof(TypeOfSource)).Cast<TypeOfSource>()
select new select new
@ -118,7 +121,10 @@ orderby s.Text.ToLower().IndexOf(id.ToLower(), StringComparison.Ordinal) ascendi
Group = VariantTerms.Search_Source Group = VariantTerms.Search_Source
}); });
if (results.Count >= maxResults) return results.Take(maxResults); if (results.Count >= maxResults)
{
return results.Take(maxResults);
}
results.AddRange(from v in await _bModel.SelectAllVersions() results.AddRange(from v in await _bModel.SelectAllVersions()
where $"{v.Major}.{v.Minor}".StartsWith(id) where $"{v.Major}.{v.Minor}".StartsWith(id)
@ -138,7 +144,10 @@ orderby s.Text.ToLower().IndexOf(id.ToLower(), StringComparison.Ordinal) ascendi
Group = VariantTerms.Search_Version Group = VariantTerms.Search_Version
}); });
if (results.Count >= maxResults) return results.Take(maxResults); if (results.Count >= maxResults)
{
return results.Take(maxResults);
}
results.AddRange(from y in await _bModel.SelectAllYears() results.AddRange(from y in await _bModel.SelectAllYears()
where y.ToString().Contains(id) where y.ToString().Contains(id)
@ -157,7 +166,10 @@ orderby y descending
Group = VariantTerms.Search_Year Group = VariantTerms.Search_Year
}); });
if (results.Count >= maxResults) return results.Take(maxResults); if (results.Count >= maxResults)
{
return results.Take(maxResults);
}
results.AddRange(from l in await _bModel.SearchLabs(id) results.AddRange(from l in await _bModel.SearchLabs(id)
select new SearchResult select new SearchResult
@ -174,7 +186,10 @@ orderby y descending
Group = VariantTerms.Search_Lab Group = VariantTerms.Search_Lab
}); });
if (results.Count >= maxResults) return results.Take(maxResults); if (results.Count >= maxResults)
{
return results.Take(maxResults);
}
results.AddRange(from b in await _bModel.Select() results.AddRange(from b in await _bModel.Select()
where b.FullBuildString.ToLower().Contains(id.ToLower()) where b.FullBuildString.ToLower().Contains(id.ToLower())

View File

@ -29,7 +29,8 @@ public FrontController()
[Route("", Order = 1)] [Route("", Order = 1)]
#if !DEBUG #if !DEBUG
[OutputCache(Duration = 600, VaryByParam = "none", VaryByCustom = "userName;lang;theme"), OutputCachePush(Order = 2)] [OutputCache(Duration = 600, VaryByParam = "none", VaryByCustom = "userName;lang;theme")]
[OutputCachePush(Order = 2)]
#endif #endif
public async Task<ActionResult> Index() public async Task<ActionResult> Index()
{ {
@ -39,7 +40,8 @@ public async Task<ActionResult> Index()
[Route("page-{page:int:min(1)}/", Order = 0)] [Route("page-{page:int:min(1)}/", Order = 0)]
#if !DEBUG #if !DEBUG
[OutputCache(Duration = 600, VaryByParam = "page", VaryByCustom = "userName;lang;theme"), OutputCachePush(Order = 2)] [OutputCache(Duration = 600, VaryByParam = "page", VaryByCustom = "userName;lang;theme")]
[OutputCachePush(Order = 2)]
#endif #endif
public async Task<ActionResult> IndexPage(int page) public async Task<ActionResult> IndexPage(int page)
{ {
@ -48,15 +50,20 @@ public async Task<ActionResult> IndexPage(int page)
ViewBag.PageNumber = page; ViewBag.PageNumber = page;
ViewBag.PageCount = Math.Ceiling(Convert.ToDouble(await _bModel.SelectAllGroupsCount()) / Convert.ToDouble(PAGE_SIZE)); ViewBag.PageCount = Math.Ceiling(Convert.ToDouble(await _bModel.SelectAllGroupsCount()) / Convert.ToDouble(PAGE_SIZE));
if (ViewBag.PageNumber > ViewBag.PageCount) return new HttpNotFoundResult(); if (ViewBag.PageNumber > ViewBag.PageCount)
{
return new HttpNotFoundResult();
}
return View("Pages", buildGroups); return View("Pages", buildGroups);
} }
[Route("group/{major}.{minor}.{number}.{revision}/", Order = 1), Route("group/{major}.{minor}.{number}/", Order = 5)] [Route("group/{major}.{minor}.{number}.{revision}/", Order = 1)]
[Route("group/{major}.{minor}.{number}/", Order = 5)]
// for when there is no revision // for when there is no revision
#if !DEBUG #if !DEBUG
[OutputCache(Duration = 600, VaryByParam = "none", VaryByCustom = "userName;lang;theme"), OutputCachePush(Order = 2)] [OutputCache(Duration = 600, VaryByParam = "none", VaryByCustom = "userName;lang;theme")]
[OutputCachePush(Order = 2)]
#endif #endif
public async Task<ActionResult> ViewGroup(uint major, uint minor, uint number, uint? revision = null) public async Task<ActionResult> ViewGroup(uint major, uint minor, uint number, uint? revision = null)
{ {
@ -81,12 +88,17 @@ public async Task<ActionResult> ViewGroup(uint major, uint minor, uint number, u
[Route("build/{id:guid}/", Name = "Build")] [Route("build/{id:guid}/", Name = "Build")]
#if !DEBUG #if !DEBUG
[OutputCache(Duration = 600, VaryByParam = "none", VaryByCustom = "userName;lang;theme"), OutputCachePush(Order = 2)] [OutputCache(Duration = 600, VaryByParam = "none", VaryByCustom = "userName;lang;theme")]
[OutputCachePush(Order = 2)]
#endif #endif
public async Task<ActionResult> ViewBuild(Guid id) public async Task<ActionResult> ViewBuild(Guid id)
{ {
Build b = await _bModel.SelectById(id); Build b = await _bModel.SelectById(id);
if (b == null) return new HttpNotFoundResult(); if (b == null)
{
return new HttpNotFoundResult();
}
return View(b); return View(b);
} }
@ -94,7 +106,11 @@ public async Task<ActionResult> ViewBuild(Guid id)
public async Task<ActionResult> ViewBuild(long id) public async Task<ActionResult> ViewBuild(long id)
{ {
Build b = await _bModel.SelectByLegacyId(id); Build b = await _bModel.SelectByLegacyId(id);
if (b == null) return new HttpNotFoundResult(); if (b == null)
{
return new HttpNotFoundResult();
}
return RedirectToAction(nameof(ViewBuild), return RedirectToAction(nameof(ViewBuild),
new new
{ {
@ -104,13 +120,16 @@ public async Task<ActionResult> ViewBuild(long id)
[Route("twitter/{id:guid}/", Name = "Twitter")] [Route("twitter/{id:guid}/", Name = "Twitter")]
#if !DEBUG #if !DEBUG
[OutputCache(Duration = 600, VaryByParam = "none")] [OutputCache(Duration = 600, VaryByParam = "none", VaryByCustom = "userName;lang;theme")]
[CustomContentType(ContentType = "image/png", Order = 2)] [CustomContentType(ContentType = "image/png", Order = 2)]
#endif #endif
public async Task<ActionResult> TwitterCard(Guid id) public async Task<ActionResult> TwitterCard(Guid id)
{ {
Build b = await _bModel.SelectById(id); Build b = await _bModel.SelectById(id);
if (b == null) return new HttpNotFoundResult(); if (b == null)
{
return new HttpNotFoundResult();
}
string path = Path.Combine(Server.MapPath("~/res/card/"), $"{b.Family}.png"); string path = Path.Combine(Server.MapPath("~/res/card/"), $"{b.Family}.png");
bool backExists = System.IO.File.Exists(path); bool backExists = System.IO.File.Exists(path);
@ -128,7 +147,10 @@ public async Task<ActionResult> TwitterCard(Guid id)
gr.SmoothingMode = SmoothingMode.HighQuality; gr.SmoothingMode = SmoothingMode.HighQuality;
gr.PixelOffsetMode = PixelOffsetMode.HighQuality; gr.PixelOffsetMode = PixelOffsetMode.HighQuality;
if (!backExists) gr.FillRectangle(new SolidBrush(Color.FromArgb(0x24, 0x24, 0x23)), 0, 0, 1120, 600); if (!backExists)
{
gr.FillRectangle(new SolidBrush(Color.FromArgb(0x24, 0x24, 0x23)), 0, 0, 1120, 600);
}
int left = 40; int left = 40;
using (GraphicsPath gp = new GraphicsPath()) using (GraphicsPath gp = new GraphicsPath())
@ -153,7 +175,10 @@ public async Task<ActionResult> TwitterCard(Guid id)
left = Convert.ToInt32(bounds.Width); left = Convert.ToInt32(bounds.Width);
left += 44; left += 44;
if (b.Revision.HasValue) gp.AddString($".{b.Revision}", new FontFamily("Segoe UI Light"), 0, 160, new Point(left, 220), StringFormat.GenericTypographic); if (b.Revision.HasValue)
{
gp.AddString($".{b.Revision}", new FontFamily("Segoe UI Light"), 0, 160, new Point(left, 220), StringFormat.GenericTypographic);
}
gr.DrawPath(new Pen(new SolidBrush(Color.FromArgb(0x24, 0x24, 0x23)), 4), gp); gr.DrawPath(new Pen(new SolidBrush(Color.FromArgb(0x24, 0x24, 0x23)), 4), gp);
gr.FillPath(Brushes.White, gp); gr.FillPath(Brushes.White, gp);
@ -187,7 +212,11 @@ public async Task<ActionResult> TwitterCard(Guid id)
public async Task<ActionResult> TwitterCard(long id) public async Task<ActionResult> TwitterCard(long id)
{ {
Build b = await _bModel.SelectByLegacyId(id); Build b = await _bModel.SelectByLegacyId(id);
if (b == null) return new HttpNotFoundResult(); if (b == null)
{
return new HttpNotFoundResult();
}
return RedirectToAction(nameof(TwitterCard), return RedirectToAction(nameof(TwitterCard),
new new
{ {
@ -197,7 +226,8 @@ public async Task<ActionResult> TwitterCard(long id)
[Route("lab/{lab}/", Order = 1, Name = "Lab Root")] [Route("lab/{lab}/", Order = 1, Name = "Lab Root")]
#if !DEBUG #if !DEBUG
[OutputCache(Duration = 600, VaryByParam = "none", VaryByCustom = "userName;lang;theme"), OutputCachePush(Order = 2)] [OutputCache(Duration = 600, VaryByParam = "none", VaryByCustom = "userName;lang;theme")]
[OutputCachePush(Order = 2)]
#endif #endif
public async Task<ActionResult> ViewLab(string lab) public async Task<ActionResult> ViewLab(string lab)
{ {
@ -206,7 +236,8 @@ public async Task<ActionResult> ViewLab(string lab)
[Route("lab/{lab}/page-{page:int:min(2)}/", Order = 0)] [Route("lab/{lab}/page-{page:int:min(2)}/", Order = 0)]
#if !DEBUG #if !DEBUG
[OutputCache(Duration = 600, VaryByParam = "page", VaryByCustom = "userName;lang;theme"), OutputCachePush(Order = 2)] [OutputCache(Duration = 600, VaryByParam = "page", VaryByCustom = "userName;lang;theme")]
[OutputCachePush(Order = 2)]
#endif #endif
public async Task<ActionResult> ViewLabPage(string lab, int page) public async Task<ActionResult> ViewLabPage(string lab, int page)
{ {
@ -222,14 +253,18 @@ public async Task<ActionResult> ViewLabPage(string lab, int page)
ViewBag.PageNumber = page; ViewBag.PageNumber = page;
ViewBag.PageCount = Math.Ceiling(Convert.ToDouble(await _bModel.SelectLabCount(lab)) / Convert.ToDouble(PAGE_SIZE)); ViewBag.PageCount = Math.Ceiling(Convert.ToDouble(await _bModel.SelectLabCount(lab)) / Convert.ToDouble(PAGE_SIZE));
if (ViewBag.PageNumber > ViewBag.PageCount) return new HttpNotFoundResult(); if (ViewBag.PageNumber > ViewBag.PageCount)
{
return new HttpNotFoundResult();
}
return View("viewLab", builds); return View("viewLab", builds);
} }
[Route("source/{source}/", Order = 1, Name = "Source Root")] [Route("source/{source}/", Order = 1, Name = "Source Root")]
#if !DEBUG #if !DEBUG
[OutputCache(Duration = 600, VaryByParam = "none", VaryByCustom = "userName;lang;theme"), OutputCachePush(Order = 2)] [OutputCache(Duration = 600, VaryByParam = "none", VaryByCustom = "userName;lang;theme")]
[OutputCachePush(Order = 2)]
#endif #endif
public async Task<ActionResult> ViewSource(TypeOfSource source) public async Task<ActionResult> ViewSource(TypeOfSource source)
{ {
@ -238,7 +273,8 @@ public async Task<ActionResult> ViewSource(TypeOfSource source)
[Route("source/{source}/page-{page:int:min(2)}/", Order = 0)] [Route("source/{source}/page-{page:int:min(2)}/", Order = 0)]
#if !DEBUG #if !DEBUG
[OutputCache(Duration = 600, VaryByParam = "page", VaryByCustom = "userName;lang;theme"), OutputCachePush(Order = 2)] [OutputCache(Duration = 600, VaryByParam = "page", VaryByCustom = "userName;lang;theme")]
[OutputCachePush(Order = 2)]
#endif #endif
public async Task<ActionResult> ViewSourcePage(TypeOfSource source, int page) public async Task<ActionResult> ViewSourcePage(TypeOfSource source, int page)
{ {
@ -254,14 +290,18 @@ public async Task<ActionResult> ViewSourcePage(TypeOfSource source, int page)
ViewBag.PageNumber = page; ViewBag.PageNumber = page;
ViewBag.PageCount = Math.Ceiling(Convert.ToDouble(await _bModel.SelectSourceCount(source)) / Convert.ToDouble(PAGE_SIZE)); ViewBag.PageCount = Math.Ceiling(Convert.ToDouble(await _bModel.SelectSourceCount(source)) / Convert.ToDouble(PAGE_SIZE));
if (ViewBag.PageNumber > ViewBag.PageCount) return new HttpNotFoundResult(); if (ViewBag.PageNumber > ViewBag.PageCount)
{
return new HttpNotFoundResult();
}
return View("viewSource", builds); return View("viewSource", builds);
} }
[Route("year/{year}/", Order = 1, Name = "Year Root")] [Route("year/{year}/", Order = 1, Name = "Year Root")]
#if !DEBUG #if !DEBUG
[OutputCache(Duration = 600, VaryByParam = "none", VaryByCustom = "userName;lang;theme"), OutputCachePush(Order = 2)] [OutputCache(Duration = 600, VaryByParam = "none", VaryByCustom = "userName;lang;theme")]
[OutputCachePush(Order = 2)]
#endif #endif
public async Task<ActionResult> ViewYear(int year) public async Task<ActionResult> ViewYear(int year)
{ {
@ -270,7 +310,8 @@ public async Task<ActionResult> ViewYear(int year)
[Route("year/{year}/page-{page:int:min(2)}/", Order = 0)] [Route("year/{year}/page-{page:int:min(2)}/", Order = 0)]
#if !DEBUG #if !DEBUG
[OutputCache(Duration = 600, VaryByParam = "page", VaryByCustom = "userName;lang;theme"), OutputCachePush(Order = 2)] [OutputCache(Duration = 600, VaryByParam = "page", VaryByCustom = "userName;lang;theme")]
[OutputCachePush(Order = 2)]
#endif #endif
public async Task<ActionResult> ViewYearPage(int year, int page) public async Task<ActionResult> ViewYearPage(int year, int page)
{ {
@ -286,14 +327,18 @@ public async Task<ActionResult> ViewYearPage(int year, int page)
ViewBag.PageNumber = page; ViewBag.PageNumber = page;
ViewBag.PageCount = Math.Ceiling(await _bModel.SelectYearCount(year) / Convert.ToDouble(PAGE_SIZE)); ViewBag.PageCount = Math.Ceiling(await _bModel.SelectYearCount(year) / Convert.ToDouble(PAGE_SIZE));
if (ViewBag.PageNumber > ViewBag.PageCount) return new HttpNotFoundResult(); if (ViewBag.PageNumber > ViewBag.PageCount)
{
return new HttpNotFoundResult();
}
return View("viewYear", builds); return View("viewYear", builds);
} }
[Route("version/{major}.{minor}/", Order = 1, Name = "Version Root")] [Route("version/{major}.{minor}/", Order = 1, Name = "Version Root")]
#if !DEBUG #if !DEBUG
[OutputCache(Duration = 600, VaryByParam = "none", VaryByCustom = "userName;lang;theme"), OutputCachePush(Order = 2)] [OutputCache(Duration = 600, VaryByParam = "none", VaryByCustom = "userName;lang;theme")]
[OutputCachePush(Order = 2)]
#endif #endif
public async Task<ActionResult> ViewVersion(uint major, uint minor) public async Task<ActionResult> ViewVersion(uint major, uint minor)
{ {
@ -302,7 +347,8 @@ public async Task<ActionResult> ViewVersion(uint major, uint minor)
[Route("version/{major}.{minor}/page-{page:int:min(2)}/", Order = 0)] [Route("version/{major}.{minor}/page-{page:int:min(2)}/", Order = 0)]
#if !DEBUG #if !DEBUG
[OutputCache(Duration = 600, VaryByParam = "none", VaryByCustom = "userName;lang;theme"), OutputCachePush(Order = 2)] [OutputCache(Duration = 600, VaryByParam = "none", VaryByCustom = "userName;lang;theme")]
[OutputCachePush(Order = 2)]
#endif #endif
public async Task<ActionResult> ViewVersionPage(uint major, uint minor, int page) public async Task<ActionResult> ViewVersionPage(uint major, uint minor, int page)
{ {
@ -319,12 +365,16 @@ public async Task<ActionResult> ViewVersionPage(uint major, uint minor, int page
ViewBag.PageNumber = page; ViewBag.PageNumber = page;
ViewBag.PageCount = Math.Ceiling(Convert.ToDouble(await _bModel.SelectVersionCount(major, minor)) / Convert.ToDouble(PAGE_SIZE)); ViewBag.PageCount = Math.Ceiling(Convert.ToDouble(await _bModel.SelectVersionCount(major, minor)) / Convert.ToDouble(PAGE_SIZE));
if (ViewBag.PageNumber > ViewBag.PageCount) return new HttpNotFoundResult(); if (ViewBag.PageNumber > ViewBag.PageCount)
{
return new HttpNotFoundResult();
}
return View("viewVersion", builds); return View("viewVersion", builds);
} }
[Route("add/"), Authorize] [Route("add/")]
[Authorize]
public ActionResult AddBuild() public ActionResult AddBuild()
{ {
Build b = new Build Build b = new Build
@ -334,7 +384,9 @@ public ActionResult AddBuild()
return View("EditBuild", b); return View("EditBuild", b);
} }
[Route("add/"), Authorize, HttpPost] [Route("add/")]
[Authorize]
[HttpPost]
public async Task<ActionResult> AddBuild(Build build) public async Task<ActionResult> AddBuild(Build build)
{ {
if (ModelState.IsValid) if (ModelState.IsValid)
@ -343,8 +395,16 @@ public async Task<ActionResult> AddBuild(Build build)
{ {
build.Added = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc); build.Added = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc);
build.Modified = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc); build.Modified = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc);
if (build.BuildTime.HasValue) build.BuildTime = DateTime.SpecifyKind(build.BuildTime.Value, DateTimeKind.Utc); if (build.BuildTime.HasValue)
if (build.LeakDate.HasValue) build.LeakDate = DateTime.SpecifyKind(build.LeakDate.Value, DateTimeKind.Utc); {
build.BuildTime = DateTime.SpecifyKind(build.BuildTime.Value, DateTimeKind.Utc);
}
if (build.LeakDate.HasValue)
{
build.LeakDate = DateTime.SpecifyKind(build.LeakDate.Value, DateTimeKind.Utc);
}
await _bModel.Insert(build); await _bModel.Insert(build);
} }
catch catch
@ -360,22 +420,33 @@ public async Task<ActionResult> AddBuild(Build build)
return View("EditBuild", build); return View("EditBuild", build);
} }
[Route("edit/{id}/"), Authorize] [Route("edit/{id}/")]
[Authorize]
public async Task<ActionResult> EditBuild(Guid id) public async Task<ActionResult> EditBuild(Guid id)
{ {
Build b = await _bModel.SelectById(id); Build b = await _bModel.SelectById(id);
return View(b); return View(b);
} }
[Route("edit/{id}/"), Authorize, HttpPost] [Route("edit/{id}/")]
[Authorize]
[HttpPost]
public async Task<ActionResult> EditBuild(Guid id, Build build) public async Task<ActionResult> EditBuild(Guid id, Build build)
{ {
if (ModelState.IsValid) if (ModelState.IsValid)
{ {
try try
{ {
if (build.BuildTime.HasValue) build.BuildTime = DateTime.SpecifyKind(build.BuildTime.Value, DateTimeKind.Utc); if (build.BuildTime.HasValue)
if (build.LeakDate.HasValue) build.LeakDate = DateTime.SpecifyKind(build.LeakDate.Value, DateTimeKind.Utc); {
build.BuildTime = DateTime.SpecifyKind(build.BuildTime.Value, DateTimeKind.Utc);
}
if (build.LeakDate.HasValue)
{
build.LeakDate = DateTime.SpecifyKind(build.LeakDate.Value, DateTimeKind.Utc);
}
await _bModel.Update(build); await _bModel.Update(build);
} }
catch catch
@ -392,7 +463,8 @@ public async Task<ActionResult> EditBuild(Guid id, Build build)
return View(build); return View(build);
} }
[Route("delete/{id}/"), Authorize(Roles = "Administrators")] [Route("delete/{id}/")]
[Authorize(Roles = "Administrators")]
public async Task<ActionResult> DeleteBuild(Guid id) public async Task<ActionResult> DeleteBuild(Guid id)
{ {
await _bModel.DeleteById(id); await _bModel.DeleteById(id);

View File

@ -14,7 +14,10 @@ public class RssController : BaseController
private const int RSS_SIZE = 25; private const int RSS_SIZE = 25;
private readonly BuildRepository _bModel; private readonly BuildRepository _bModel;
public RssController() { _bModel = new BuildRepository(); } public RssController()
{
_bModel = new BuildRepository();
}
[Route("rss/compiled")] [Route("rss/compiled")]
public async Task<ActionResult> Index() public async Task<ActionResult> Index()
@ -31,7 +34,8 @@ public async Task<ActionResult> Index()
Title = build.AlternateBuildString, Title = build.AlternateBuildString,
Link = new Uri($"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}"), Link = new Uri($"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}"),
Permalink = $"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}", Permalink = $"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}",
Categories = { Categories =
{
build.Family.ToString() build.Family.ToString()
}, },
PublishDate = DateTime.SpecifyKind(build.BuildTime.GetValueOrDefault(), DateTimeKind.Utc) PublishDate = DateTime.SpecifyKind(build.BuildTime.GetValueOrDefault(), DateTimeKind.Utc)
@ -61,7 +65,8 @@ public async Task<ActionResult> Added()
Title = build.AlternateBuildString, Title = build.AlternateBuildString,
Link = new Uri($"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}"), Link = new Uri($"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}"),
Permalink = $"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}", Permalink = $"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}",
Categories = { Categories =
{
build.Family.ToString() build.Family.ToString()
}, },
PublishDate = DateTime.SpecifyKind(build.Added, DateTimeKind.Utc) PublishDate = DateTime.SpecifyKind(build.Added, DateTimeKind.Utc)
@ -91,7 +96,8 @@ public async Task<ActionResult> Leaked()
Title = build.AlternateBuildString, Title = build.AlternateBuildString,
Link = new Uri($"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}"), Link = new Uri($"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}"),
Permalink = $"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}", Permalink = $"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}",
Categories = { Categories =
{
build.Family.ToString() build.Family.ToString()
}, },
PublishDate = DateTime.SpecifyKind(build.LeakDate.GetValueOrDefault(), DateTimeKind.Utc) PublishDate = DateTime.SpecifyKind(build.LeakDate.GetValueOrDefault(), DateTimeKind.Utc)
@ -121,7 +127,8 @@ public async Task<ActionResult> Version()
Title = build.AlternateBuildString, Title = build.AlternateBuildString,
Link = new Uri($"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}"), Link = new Uri($"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}"),
Permalink = $"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}", Permalink = $"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}",
Categories = { Categories =
{
build.Family.ToString() build.Family.ToString()
} }
}).ToList() }).ToList()
@ -150,7 +157,8 @@ public async Task<ActionResult> Lab(string lab)
Title = build.AlternateBuildString, Title = build.AlternateBuildString,
Link = new Uri($"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}"), Link = new Uri($"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}"),
Permalink = $"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}", Permalink = $"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}",
Categories = { Categories =
{
build.Family.ToString() build.Family.ToString()
} }
}).ToList() }).ToList()

View File

@ -18,12 +18,16 @@ public class SupportController : BaseController
{ {
private readonly BuildRepository _bModel; private readonly BuildRepository _bModel;
public SupportController() { _bModel = new BuildRepository(); } public SupportController()
{
_bModel = new BuildRepository();
}
[Route("login/")] [Route("login/")]
public ActionResult Login() => View(); public ActionResult Login() => View();
[HttpPost, Route("login/")] [HttpPost]
[Route("login/")]
public ActionResult Login(LoginUser ru) public ActionResult Login(LoginUser ru)
{ {
if (ModelState.IsValid) if (ModelState.IsValid)
@ -57,10 +61,13 @@ public ActionResult Login(LoginUser ru)
return View(ru); return View(ru);
} }
[Authorize, Route("password/")] [Authorize]
[Route("password/")]
public ActionResult Password() => View(); public ActionResult Password() => View();
[HttpPost, Authorize, Route("password/")] [HttpPost]
[Authorize]
[Route("password/")]
public ActionResult Password(ChangePassword cp) public ActionResult Password(ChangePassword cp)
{ {
if (ModelState.IsValid) if (ModelState.IsValid)
@ -92,7 +99,8 @@ public ActionResult Logout()
[Route("register/")] [Route("register/")]
public ActionResult Register() => View(); public ActionResult Register() => View();
[HttpPost, Route("register/")] [HttpPost]
[Route("register/")]
public ActionResult Register(RegistrationUser ru) public ActionResult Register(RegistrationUser ru)
{ {
if (ModelState.IsValid) if (ModelState.IsValid)
@ -134,12 +142,12 @@ public async Task<ActionResult> Rss()
[Route("sitemap/")] [Route("sitemap/")]
#if !DEBUG #if !DEBUG
// [OutputCache(Duration = 3600, VaryByParam = "none", VaryByCustom = "userName")] [OutputCache(Duration = 3600, VaryByParam = "none", VaryByCustom = "userName;lang;theme")]
#endif #endif
public async Task<ActionResult> Sitemap() public async Task<ActionResult> Sitemap()
{ {
List<Build> builds = await _bModel.SelectBuildsByOrder(); List<Build> builds = await _bModel.SelectBuildsByOrder();
Dictionary<string, SitemapPagedAction[]> actions = new Dictionary<string, SitemapPagedAction[]> var actions = new Dictionary<string, SitemapPagedAction[]>
{ {
{ {
"Pages", new[] "Pages", new[]
@ -278,12 +286,12 @@ into lab
[Route("xml-sitemap/")] [Route("xml-sitemap/")]
#if !DEBUG #if !DEBUG
// [OutputCache(Duration = 3600, VaryByParam = "none", VaryByCustom = "userName")] [OutputCache(Duration = 3600, VaryByParam = "none", VaryByCustom = "userName;lang;theme")]
#endif #endif
public async Task<ActionResult> XmlSitemap() public async Task<ActionResult> XmlSitemap()
{ {
XNamespace xn = XNamespace.Get("http://www.sitemaps.org/schemas/sitemap/0.9"); XNamespace xn = XNamespace.Get("http://www.sitemaps.org/schemas/sitemap/0.9");
List<XElement> xlist = new List<XElement>(); var xlist = new List<XElement>();
// home page // home page
XElement home = new XElement(xn + "url"); XElement home = new XElement(xn + "url");

View File

@ -25,7 +25,7 @@
</appSettings> </appSettings>
<system.webServer> <system.webServer>
<handlers> <handlers>
<remove name="BlockViewHandler"/> <remove name="BlockViewHandler" />
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /> <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers> </handlers>
</system.webServer> </system.webServer>

View File

@ -4,11 +4,11 @@
@{ @{
bool isRtl = CultureInfo.CurrentUICulture.TextInfo.IsRightToLeft; bool isRtl = CultureInfo.CurrentUICulture.TextInfo.IsRightToLeft;
Response.PushPromise("/res/css/default.min.css"); Response.PushPromise("/res/css/default.css");
Response.PushPromise(VirtualPathUtility.ToAbsolute(((Theme)ViewBag.Theme).CssPath)); Response.PushPromise(VirtualPathUtility.ToAbsolute(((Theme)ViewBag.Theme).CssPath));
if (isRtl) if (isRtl)
{ {
Response.PushPromise("/res/css/rtl.min.css"); Response.PushPromise("/res/css/rtl.css");
} }
Response.PushPromise("/res/ts/bfs.min.js"); Response.PushPromise("/res/ts/bfs.min.js");
@ -29,11 +29,11 @@
<link rel="canonical" href="@Url.Action()" /> <link rel="canonical" href="@Url.Action()" />
<meta name="application-name" content="@InvariantTerms.SiteName" /> <meta name="application-name" content="@InvariantTerms.SiteName" />
<link href="/res/css/default.min.css" rel="stylesheet" type="text/css" /> <link href="/res/css/default.css" rel="stylesheet" type="text/css" />
<link href="@(VirtualPathUtility.ToAbsolute(((Theme) ViewBag.Theme).CssPath))" rel="stylesheet" type="text/css" /> <link href="@(VirtualPathUtility.ToAbsolute(((Theme) ViewBag.Theme).CssPath))" rel="stylesheet" type="text/css" />
@if (isRtl) @if (isRtl)
{ {
<link href="/res/css/rtl.min.css" rel="stylesheet" type="text/css" /> <link href="/res/css/rtl.css" rel="stylesheet" type="text/css" />
} }
<title>@ViewBag.Title</title> <title>@ViewBag.Title</title>
@RenderSection("head", false) @RenderSection("head", false)

View File

@ -20,11 +20,11 @@
<link rel="icon" href="~/favicon.ico" /> <link rel="icon" href="~/favicon.ico" />
<meta name="application-name" content="@InvariantTerms.SiteName" /> <meta name="application-name" content="@InvariantTerms.SiteName" />
<link href="/res/css/default.min.css" rel="stylesheet" type="text/css" /> <link href="/res/css/default.css" rel="stylesheet" type="text/css" />
<link href="@(VirtualPathUtility.ToAbsolute(((Theme) ViewBag.Theme).CssPath))" rel="stylesheet" type="text/css" /> <link href="@(VirtualPathUtility.ToAbsolute(((Theme) ViewBag.Theme).CssPath))" rel="stylesheet" type="text/css" />
@if (isRtl) @if (isRtl)
{ {
<link href="/res/css/rtl.min.css" rel="stylesheet" type="text/css" /> <link href="/res/css/rtl.css" rel="stylesheet" type="text/css" />
} }
<title>@VariantTerms.Common_Error | @InvariantTerms.SiteName</title> <title>@VariantTerms.Common_Error | @InvariantTerms.SiteName</title>
<script type="text/javascript"> <script type="text/javascript">

View File

@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<configuration> <configuration>
<appSettings file="settings.config"> <appSettings file="settings.config">
<add key="webpages:Version" value="3.0.0.0" /> <add key="webpages:Version" value="3.0.0.0" />

View File

@ -1,21 +1,22 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<browserconfig> <browserconfig>
<msapplication> <msapplication>
<tile> <tile>
<square70x70logo src="content/tile/tiny.png"/> <square70x70logo src="content/tile/tiny.png" />
<square150x150logo src="content/tile/square.png"/> <square150x150logo src="content/tile/square.png" />
<wide310x150logo src="content/tile/wide.png"/> <wide310x150logo src="content/tile/wide.png" />
<square310x310logo src="content/tile/large.png"/> <square310x310logo src="content/tile/large.png" />
<TileColor>#272b30</TileColor> <TileColor>#272b30</TileColor>
</tile> </tile>
<notification> <notification>
<polling-uri src="http://notifications.buildmypinnedsite.com/?feed=https://buildfeed.net/rss/Added/&amp;id=1"/> <polling-uri src="http://notifications.buildmypinnedsite.com/?feed=https://buildfeed.net/rss/Added/&amp;id=1" />
<polling-uri2 src="http://notifications.buildmypinnedsite.com/?feed=https://buildfeed.net/rss/Added/&amp;id=2"/> <polling-uri2 src="http://notifications.buildmypinnedsite.com/?feed=https://buildfeed.net/rss/Added/&amp;id=2" />
<polling-uri3 src="http://notifications.buildmypinnedsite.com/?feed=https://buildfeed.net/rss/Added/&amp;id=3"/> <polling-uri3 src="http://notifications.buildmypinnedsite.com/?feed=https://buildfeed.net/rss/Added/&amp;id=3" />
<polling-uri4 src="http://notifications.buildmypinnedsite.com/?feed=https://buildfeed.net/rss/Added/&amp;id=4"/> <polling-uri4 src="http://notifications.buildmypinnedsite.com/?feed=https://buildfeed.net/rss/Added/&amp;id=4" />
<polling-uri5 src="http://notifications.buildmypinnedsite.com/?feed=https://buildfeed.net/rss/Added/&amp;id=5"/> <polling-uri5 src="http://notifications.buildmypinnedsite.com/?feed=https://buildfeed.net/rss/Added/&amp;id=5" />
<frequency>30</frequency> <frequency>30</frequency>
<cycle>1</cycle> <cycle>1</cycle>
</notification> </notification>
</msapplication> </msapplication>
</browserconfig> </browserconfig>

View File

@ -1,32 +1,8 @@
[ [
{
"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": "res/ts/bfs.min.js", "outputFileName": "res/ts/bfs.min.js",
"inputFiles": [ "inputFiles": [
"res/ts/bfs.js" "res/ts/bfs.js"
] ]
},
{
"outputFileName": "res/css/light.min.css",
"inputFiles": [
"res/css/light.css"
]
} }
] ]

View File

@ -1,18 +0,0 @@
[
{
"outputFile": "res/css/default.css",
"inputFile": "res/css/default.scss"
},
{
"outputFile": "res/css/dark.css",
"inputFile": "res/css/dark.scss"
},
{
"outputFile": "res/css/rtl.css",
"inputFile": "res/css/rtl.scss"
},
{
"outputFile": "res/css/light.css",
"inputFile": "res/css/light.scss"
}
]

View File

@ -1,49 +0,0 @@
{
"compilers": {
"less": {
"autoPrefix": "",
"cssComb": "none",
"ieCompat": true,
"strictMath": false,
"strictUnits": false,
"relativeUrls": true,
"rootPath": "",
"sourceMapRoot": "",
"sourceMapBasePath": "",
"sourceMap": false
},
"sass": {
"includePath": "",
"indentType": "space",
"indentWidth": 2,
"outputStyle": "nested",
"Precision": 5,
"relativeUrls": true,
"sourceMapRoot": "",
"sourceMap": true
},
"stylus": {
"sourceMap": false
},
"babel": {
"sourceMap": false
},
"coffeescript": {
"bare": false,
"runtimeMode": "node",
"sourceMap": false
}
},
"minifiers": {
"css": {
"enabled": true,
"termSemicolons": true,
"gzip": false
},
"javascript": {
"enabled": true,
"termSemicolons": true,
"gzip": false
}
}
}

22
BuildFeed/gulpfile.js Normal file
View File

@ -0,0 +1,22 @@
/// <binding BeforeBuild='sass-compile' ProjectOpened='watch-sass' />
var gulp = require("gulp");
var sass = require("gulp-sass");
var cleanCss = require("gulp-clean-css");
var sourceMaps = require("gulp-sourcemaps");
gulp.task("sass-compile",
function ()
{
gulp.src("./res/css/*.scss")
.pipe(sourceMaps.init())
.pipe(sass())
.pipe(cleanCss())
.pipe(sourceMaps.write("./"))
.pipe(gulp.dest("./res/css/"));
});
gulp.task("watch-sass",
function ()
{
gulp.watch("./res/scss/*.scss", ["sass-compile"]);
});

12
BuildFeed/package.json Normal file
View File

@ -0,0 +1,12 @@
{
"version": "1.0.0",
"name": "buildfeed",
"private": true,
"devDependencies": {
"gulp": "3.9.1",
"gulp-sass": "2.3.2",
"gulp-clean-css": "2.0.13",
"gulp-sourcemaps": "2.1.1"
}
}

View File

@ -1,79 +1,80 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="google.analytics.TypeScript.DefinitelyTyped" version="0.3.8" targetFramework="net462" /> <package id="google.analytics.TypeScript.DefinitelyTyped" version="0.3.8" targetFramework="net462" />
<package id="HtmlAgilityPack" version="1.4.9.5" targetFramework="net462" /> <package id="HtmlAgilityPack" version="1.4.9.5" targetFramework="net462" />
<package id="Humanizer" version="2.1.0" targetFramework="net462" /> <package id="Humanizer" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.af" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.af" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.ar" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.ar" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.bg" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.bg" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.bn-BD" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.bn-BD" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.cs" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.cs" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.da" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.da" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.de" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.de" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.el" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.el" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.es" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.es" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.fa" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.fa" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.fi-FI" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.fi-FI" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.fr" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.fr" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.fr-BE" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.fr-BE" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.he" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.he" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.hr" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.hr" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.hu" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.hu" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.id" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.id" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.it" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.it" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.ja" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.ja" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.nb" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.nb" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.nb-NO" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.nb-NO" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.nl" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.nl" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.pl" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.pl" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.pt" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.pt" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.ro" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.ro" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.ru" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.ru" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.sk" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.sk" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.sl" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.sl" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.sr" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.sr" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.sr-Latn" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.sr-Latn" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.sv" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.sv" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.tr" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.tr" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.uk" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.uk" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.uz-Cyrl-UZ" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.uz-Cyrl-UZ" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.uz-Latn-UZ" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.uz-Latn-UZ" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.vi" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.vi" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.zh-CN" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.zh-CN" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.zh-Hans" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.zh-Hans" version="2.1.0" targetFramework="net462" />
<package id="Humanizer.Core.zh-Hant" version="2.1.0" targetFramework="net462" /> <package id="Humanizer.Core.zh-Hant" version="2.1.0" targetFramework="net462" />
<package id="jQuery" version="2.2.4" targetFramework="net462" /> <package id="jQuery" version="2.2.4" targetFramework="net462" />
<package id="jquery.TypeScript.DefinitelyTyped" version="3.1.0" targetFramework="net462" /> <package id="jquery.TypeScript.DefinitelyTyped" version="3.1.0" targetFramework="net462" />
<package id="jQuery.Validation" version="1.15.1" targetFramework="net462" /> <package id="jQuery.Validation" version="1.15.1" targetFramework="net462" />
<package id="jsrender.TypeScript.DefinitelyTyped" version="0.1.8" targetFramework="net461" /> <package id="jsrender.TypeScript.DefinitelyTyped" version="0.1.8" targetFramework="net461" />
<package id="Microsoft.ApplicationInsights" version="2.1.0" targetFramework="net461" /> <package id="Microsoft.ApplicationInsights" version="2.1.0" targetFramework="net461" />
<package id="Microsoft.ApplicationInsights.Agent.Intercept" version="2.0.1" targetFramework="net461" /> <package id="Microsoft.ApplicationInsights.Agent.Intercept" version="2.0.1" targetFramework="net461" />
<package id="Microsoft.ApplicationInsights.DependencyCollector" version="2.1.0" targetFramework="net461" /> <package id="Microsoft.ApplicationInsights.DependencyCollector" version="2.1.0" targetFramework="net461" />
<package id="Microsoft.ApplicationInsights.PerfCounterCollector" version="2.1.0" targetFramework="net461" /> <package id="Microsoft.ApplicationInsights.PerfCounterCollector" version="2.1.0" targetFramework="net461" />
<package id="Microsoft.ApplicationInsights.Web" version="2.1.0" targetFramework="net461" /> <package id="Microsoft.ApplicationInsights.Web" version="2.1.0" targetFramework="net461" />
<package id="Microsoft.ApplicationInsights.WindowsServer" version="2.1.0" targetFramework="net461" /> <package id="Microsoft.ApplicationInsights.WindowsServer" version="2.1.0" targetFramework="net461" />
<package id="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel" version="2.1.0" targetFramework="net461" /> <package id="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel" version="2.1.0" targetFramework="net461" />
<package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net462" /> <package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net462" />
<package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net462" /> <package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net462" />
<package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net462" /> <package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net462" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net462" /> <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net462" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net462" /> <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net462" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net462" /> <package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net462" />
<package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net462" /> <package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net462" />
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.1" targetFramework="net462" /> <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.1" targetFramework="net462" />
<package id="Microsoft.CSharp" version="4.0.1" targetFramework="net462" /> <package id="Microsoft.CSharp" version="4.0.1" targetFramework="net462" />
<package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.3" targetFramework="net462" /> <package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.3" targetFramework="net462" />
<package id="Microsoft.Net.Compilers" version="1.3.2" targetFramework="net462" developmentDependency="true" /> <package id="Microsoft.Net.Compilers" version="1.3.2" targetFramework="net462" developmentDependency="true" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net462" /> <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net462" />
<package id="MongoDB.Bson" version="2.2.4" targetFramework="net462" /> <package id="MongoDB.Bson" version="2.2.4" targetFramework="net462" />
<package id="MongoDB.Driver" version="2.2.4" targetFramework="net462" /> <package id="MongoDB.Driver" version="2.2.4" targetFramework="net462" />
<package id="MongoDB.Driver.Core" version="2.2.4" targetFramework="net462" /> <package id="MongoDB.Driver.Core" version="2.2.4" targetFramework="net462" />
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net462" /> <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net462" />
<package id="System.Collections" version="4.0.11" targetFramework="net462" /> <package id="System.Collections" version="4.0.11" targetFramework="net462" />
<package id="System.Linq" version="4.1.0" targetFramework="net462" /> <package id="System.Linq" version="4.1.0" targetFramework="net462" />
<package id="System.Runtime" version="4.1.0" targetFramework="net462" /> <package id="System.Runtime" version="4.1.0" targetFramework="net462" />
<package id="System.Threading" version="4.0.11" targetFramework="net462" /> <package id="System.Threading" version="4.0.11" targetFramework="net462" />
<package id="System.Xml.XDocument" version="4.0.11" targetFramework="net462" /> <package id="System.Xml.XDocument" version="4.0.11" targetFramework="net462" />
<package id="WilderMinds.RssSyndication" version="1.0.4" targetFramework="net462" /> <package id="WilderMinds.RssSyndication" version="1.0.4" targetFramework="net462" />
</packages> </packages>

View File

@ -1,73 +1,2 @@
body { body{background-color:#f6f5f3;color:#373736}a{color:#fff}#page-footer a,h1>a{color:#373736}#page-content,#page-navigation #page-navigation-links>li a,#page-navigation button{color:#f6f5f3}table thead th{border-bottom-color:#f6f5f3}#page-content{background-color:#373736}#page-content h3{border-bottom-color:#ccc}#page-navigation{background-color:#242423;color:#f6f5f3}#page-navigation #page-navigation-links>li.open>a,#page-navigation #page-navigation-links>li>a:hover{background-color:#373736}.dropdown-menu{background-color:#242423;-moz-box-shadow:0 5px 10px rgba(0,0,0,.15);-webkit-box-shadow:0 5px 10px rgba(0,0,0,.15);box-shadow:0 5px 10px rgba(0,0,0,.15)}.dropdown-menu a:active,.dropdown-menu a:focus,.dropdown-menu a:hover{background-color:#373736}article{-moz-box-shadow:0 5px 10px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.15) inset;box-shadow:0 5px 10px rgba(0,0,0,.15) inset}article .build-details-comments a,article .build-group>h3>a,article a.more-link,article h1,article h3{color:#d6d5d3}ul.pagination>li.active>a{background:#f6f5f3;color:#242423!important}ul.pagination>li:active:not(.disabled)>a,ul.pagination>li:focus:not(.disabled)>a,ul.pagination>li:hover:not(.disabled)>a{background:#d6d5d3;color:#373736!important}#modal-search-overlay #modal-search{background-color:#242423}#modal-search-overlay #modal-search h3{color:#f6f5f3}#modal-search-overlay #modal-search>#modal-search-box>#modal-search-button,#modal-search-overlay #modal-search>#modal-search-box>#modal-search-input{background-color:#373736;color:#f6f5f3;border-color:#d6d5d3}
background-color: #f6f5f3; /*# sourceMappingURL=dark.css.map */
color: #373736; }
a {
color: #fff; }
h1 > a,
#page-footer a {
color: #373736; }
table thead th {
border-bottom-color: #f6f5f3; }
#page-content {
background-color: #373736;
color: #f6f5f3; }
#page-content h3 {
border-bottom-color: #ccc; }
#page-navigation {
background-color: #242423;
color: #f6f5f3; }
#page-navigation button {
color: #f6f5f3; }
#page-navigation #page-navigation-links > li a {
color: #f6f5f3; }
#page-navigation #page-navigation-links > li.open > a,
#page-navigation #page-navigation-links > li > a:hover {
background-color: #373736; }
.dropdown-menu {
background-color: #242423;
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.15);
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.15);
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.15); }
.dropdown-menu a:hover,
.dropdown-menu a:focus,
.dropdown-menu a:active {
background-color: #373736; }
article {
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.15) inset;
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.15) inset;
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.15) inset; }
article h1, article h3 {
color: #d6d5d3; }
article .build-group > h3 > a,
article a.more-link,
article .build-details-comments a {
color: #d6d5d3; }
ul.pagination > li.active > a {
background: #f6f5f3;
color: #242423 !important; }
ul.pagination > li:hover:not(.disabled) > a,
ul.pagination > li:focus:not(.disabled) > a,
ul.pagination > li:active:not(.disabled) > a {
background: #d6d5d3;
color: #373736 !important; }
#modal-search-overlay #modal-search {
background-color: #242423; }
#modal-search-overlay #modal-search h3 {
color: #f6f5f3; }
#modal-search-overlay #modal-search > #modal-search-box > #modal-search-input,
#modal-search-overlay #modal-search > #modal-search-box > #modal-search-button {
background-color: #373736;
color: #f6f5f3;
border-color: #d6d5d3; }
/*# sourceMappingURL=data:application/json;base64,ewoJInZlcnNpb24iOiAzLAoJImZpbGUiOiAiLi4vcmVzL2Nzcy9kYXJrLmNzcyIsCgkic291cmNlcyI6IFsKCQkiLi4vcmVzL2Nzcy9kYXJrLnNjc3MiCgldLAoJIm1hcHBpbmdzIjogIkFBQUEsQUFBQSxJQUFJLENBQ0o7RUFDRyxnQkFBZ0IsRUFBRSxPQUFRO0VBQzFCLEtBQUssRUFBRSxPQUFRLEdBQ2pCOztBQUVELEFBQUEsQ0FBQyxDQUNEO0VBQ0csS0FBSyxFQUFFLElBQUssR0FDZDs7QUFFRCxBQUFLLEVBQUgsR0FBRyxDQUFDO0FBQ04sQUFBYSxZQUFELENBQUMsQ0FBQyxDQUNkO0VBQ0csS0FBSyxFQUFFLE9BQVEsR0FDakI7O0FBRUQsQUFBWSxLQUFQLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDZDtFQUNHLG1CQUFtQixFQUFFLE9BQVEsR0FDL0I7O0FBRUQsQUFBQSxhQUFhLENBQ2I7RUFDRyxnQkFBZ0IsRUFBRSxPQUFRO0VBQzFCLEtBQUssRUFBRSxPQUFRLEdBTWpCO0VBVEQsQUFLRyxhQUxVLENBS1YsRUFBRSxDQUNGO0lBQ0csbUJBQW1CLEVBQUUsSUFBSyxHQUM1Qjs7QUFHSixBQUFBLGdCQUFnQixDQUNoQjtFQUNHLGdCQUFnQixFQUFFLE9BQVE7RUFDMUIsS0FBSyxFQUFFLE9BQVEsR0F1QmpCO0VBMUJELEFBS0csZ0JBTGEsQ0FLYixNQUFNLENBQ047SUFDRyxLQUFLLEVBQUUsT0FBUSxHQUNqQjtFQVJKLEFBY1MsZ0JBZE8sQ0FVYixzQkFBc0IsR0FFakIsRUFBRSxDQUVELENBQUMsQ0FDRDtJQUNHLEtBQUssRUFBRSxPQUFRLEdBQ2pCO0VBakJWLEFBbUJrQixnQkFuQkYsQ0FVYixzQkFBc0IsR0FFakIsRUFBRSxBQU9BLEtBQUssR0FBRyxDQUFDO0VBbkJuQixBQW9CWSxnQkFwQkksQ0FVYixzQkFBc0IsR0FFakIsRUFBRSxHQVFDLENBQUMsQUFBQSxNQUFNLENBQ1Q7SUFDRyxnQkFBZ0IsRUFBRSxPQUFRLEdBQzVCOztBQUtWLEFBQUEsY0FBYyxDQUNkO0VBQ0csZ0JBQWdCLEVBQUUsT0FBUTtFQUMxQixlQUFlLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQUk7RUFDaEMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQUk7RUFDbkMsVUFBVSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFJLEdBUTdCO0VBYkQsQUFPSSxjQVBVLENBT1gsQ0FBQyxBQUFBLE1BQU07RUFQVixBQVFJLGNBUlUsQ0FRWCxDQUFDLEFBQUEsTUFBTTtFQVJWLEFBU0ksY0FUVSxDQVNYLENBQUMsQUFBQSxPQUFPLENBQ1I7SUFDRyxnQkFBZ0IsRUFBRSxPQUFRLEdBQzVCOztBQUdKLEFBQUEsT0FBTyxDQUNQO0VBQ0csZUFBZSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFJLENBQWEsS0FBSztFQUNsRCxrQkFBa0IsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBSSxDQUFhLEtBQUs7RUFDckQsVUFBVSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFJLENBQWEsS0FBSyxHQWEvQztFQWpCRCxBQU1HLE9BTkksQ0FNSixFQUFFLEVBTkwsQUFNTyxPQU5BLENBTUEsRUFBRSxDQUNOO0lBQ0csS0FBSyxFQUFFLE9BQVEsR0FDakI7RUFUSixBQVd1QixPQVhoQixDQVdKLFlBQVksR0FBRyxFQUFFLEdBQUcsQ0FBQztFQVh4QixBQVlJLE9BWkcsQ0FZSixDQUFDLEFBQUEsVUFBVTtFQVpkLEFBYTJCLE9BYnBCLENBYUosdUJBQXVCLENBQUMsQ0FBQyxDQUN6QjtJQUNHLEtBQUssRUFBRSxPQUFRLEdBQ2pCOztBQUdKLEFBRWlCLEVBRmYsQUFBQSxXQUFXLEdBRVIsRUFBRSxBQUFBLE9BQU8sR0FBRyxDQUFDLENBQ2Y7RUFDRyxVQUFVLEVBQUUsT0FBUTtFQUNwQixLQUFLLEVBQUUsa0JBQW1CLEdBQzVCOztBQU5KLEFBUStCLEVBUjdCLEFBQUEsV0FBVyxHQVFSLEVBQUUsQUFBQSxNQUFNLEFBQUEsSUFBSyxDQUFBLEFBQUEsU0FBUyxJQUFJLENBQUM7QUFSaEMsQUFTK0IsRUFUN0IsQUFBQSxXQUFXLEdBU1IsRUFBRSxBQUFBLE1BQU0sQUFBQSxJQUFLLENBQUEsQUFBQSxTQUFTLElBQUksQ0FBQztBQVRoQyxBQVVnQyxFQVY5QixBQUFBLFdBQVcsR0FVUixFQUFFLEFBQUEsT0FBTyxBQUFBLElBQUssQ0FBQSxBQUFBLFNBQVMsSUFBSSxDQUFDLENBQzlCO0VBQ0csVUFBVSxFQUFFLE9BQVE7RUFDcEIsS0FBSyxFQUFFLGtCQUFtQixHQUM1Qjs7QUFHSixBQUFzQixxQkFBRCxDQUFDLGFBQWEsQ0FDbkM7RUFDRyxnQkFBZ0IsRUFBRSxPQUFRLEdBYzVCO0VBaEJELEFBSUcscUJBSmtCLENBQUMsYUFBYSxDQUloQyxFQUFFLENBQ0Y7SUFDRyxLQUFLLEVBQUUsT0FBUSxHQUNqQjtFQVBKLEFBU3lCLHFCQVRKLENBQUMsYUFBYSxHQVM5QixpQkFBaUIsR0FBRyxtQkFBbUI7RUFUNUMsQUFVeUIscUJBVkosQ0FBQyxhQUFhLEdBVTlCLGlCQUFpQixHQUFHLG9CQUFvQixDQUMxQztJQUNHLGdCQUFnQixFQUFFLE9BQVE7SUFDMUIsS0FBSyxFQUFFLE9BQVE7SUFDZixZQUFZLEVBQUUsT0FBUSxHQUN4QiIsCgkibmFtZXMiOiBbXQp9 */

View File

@ -0,0 +1 @@
{"version":3,"sources":["dark.scss"],"names":[],"mappings":"AAAA,KAEG,iBAAkB,QAClB,MAAO,QAGV,EAEG,MAAO,KAIV,eADA,KAGG,MAAO,QAQV,cAWA,6CAAA,wBAOM,MAAO,QAvBb,eAEG,oBAAqB,QAGxB,cAEG,iBAAkB,QAFrB,iBAOM,oBAAqB,KAI3B,iBAEG,iBAAkB,QAClB,MAAO,QAHV,kDAAA,mDAsBY,iBAAkB,QAM9B,eAEG,iBAAkB,QAClB,gBAAiB,EAAE,IAAI,KAAK,gBAC5B,mBAAoB,EAAE,IAAI,KAAK,gBAC/B,WAAY,EAAE,IAAI,KAAK,gBAL1B,wBAAA,uBAAA,uBAWM,iBAAkB,QAIxB,QAEG,gBAAiB,EAAE,IAAI,KAAK,gBAAiB,MAC7C,mBAAoB,EAAE,IAAI,KAAK,gBAAiB,MAChD,WAAY,EAAE,IAAI,KAAK,gBAAiB,MAJ3C,kCAAA,0BAAA,oBAAA,WAAA,WAQM,MAAO,QAWb,0BAIM,WAAY,QACZ,MAAO,kBALb,yCAAA,wCAAA,wCAYM,WAAY,QACZ,MAAO,kBAIb,oCAEG,iBAAkB,QAFrB,uCAMM,MAAO,QANb,2EAAA,0EAYM,iBAAkB,QAClB,MAAO,QACP,aAAc","file":"dark.css","sourcesContent":["body\r\n{\r\n background-color: #f6f5f3;\r\n color: #373736;\r\n}\r\n\r\na\r\n{\r\n color: #fff;\r\n}\r\n\r\nh1 > a,\r\n#page-footer a\r\n{\r\n color: #373736;\r\n}\r\n\r\ntable thead th\r\n{\r\n border-bottom-color: #f6f5f3;\r\n}\r\n\r\n#page-content\r\n{\r\n background-color: #373736;\r\n color: #f6f5f3;\r\n\r\n h3\r\n {\r\n border-bottom-color: #ccc;\r\n }\r\n}\r\n\r\n#page-navigation\r\n{\r\n background-color: #242423;\r\n color: #f6f5f3;\r\n\r\n button\r\n {\r\n color: #f6f5f3;\r\n }\r\n\r\n #page-navigation-links\r\n {\r\n > li\r\n {\r\n a\r\n {\r\n color: #f6f5f3;\r\n }\r\n\r\n &.open > a,\r\n > a:hover\r\n {\r\n background-color: #373736;\r\n }\r\n }\r\n }\r\n}\r\n\r\n.dropdown-menu\r\n{\r\n background-color: #242423;\r\n -moz-box-shadow: 0 5px 10px rgba(0,0,0,0.15);\r\n -webkit-box-shadow: 0 5px 10px rgba(0,0,0,0.15);\r\n box-shadow: 0 5px 10px rgba(0,0,0,0.15);\r\n\r\n a:hover,\r\n a:focus,\r\n a:active\r\n {\r\n background-color: #373736;\r\n }\r\n}\r\n\r\narticle\r\n{\r\n -moz-box-shadow: 0 5px 10px rgba(0,0,0,0.15) inset;\r\n -webkit-box-shadow: 0 5px 10px rgba(0,0,0,0.15) inset;\r\n box-shadow: 0 5px 10px rgba(0,0,0,0.15) inset;\r\n\r\n h1, h3\r\n {\r\n color: #d6d5d3;\r\n }\r\n\r\n .build-group > h3 > a,\r\n a.more-link,\r\n .build-details-comments a\r\n {\r\n color: #d6d5d3;\r\n }\r\n}\r\n\r\nul.pagination\r\n{\r\n > li.active > a\r\n {\r\n background: #f6f5f3;\r\n color: #242423 !important;\r\n }\r\n\r\n > li:hover:not(.disabled) > a,\r\n > li:focus:not(.disabled) > a,\r\n > li:active:not(.disabled) > a\r\n {\r\n background: #d6d5d3;\r\n color: #373736 !important;\r\n }\r\n}\r\n\r\n#modal-search-overlay #modal-search\r\n{\r\n background-color: #242423;\r\n\r\n h3\r\n {\r\n color: #f6f5f3;\r\n }\r\n\r\n > #modal-search-box > #modal-search-input,\r\n > #modal-search-box > #modal-search-button\r\n {\r\n background-color: #373736;\r\n color: #f6f5f3;\r\n border-color: #d6d5d3;\r\n }\r\n}\r\n"]}

View File

@ -1 +0,0 @@
body{background-color:#f6f5f3;color:#373736}a{color:#fff}h1>a,#page-footer a{color:#373736}table thead th{border-bottom-color:#f6f5f3}#page-content{background-color:#373736;color:#f6f5f3}#page-content h3{border-bottom-color:#ccc}#page-navigation{background-color:#242423;color:#f6f5f3}#page-navigation button{color:#f6f5f3}#page-navigation #page-navigation-links>li a{color:#f6f5f3}#page-navigation #page-navigation-links>li.open>a,#page-navigation #page-navigation-links>li>a:hover{background-color:#373736}.dropdown-menu{background-color:#242423;-moz-box-shadow:0 5px 10px rgba(0,0,0,.15);-webkit-box-shadow:0 5px 10px rgba(0,0,0,.15);box-shadow:0 5px 10px rgba(0,0,0,.15)}.dropdown-menu a:hover,.dropdown-menu a:focus,.dropdown-menu a:active{background-color:#373736}article{-moz-box-shadow:0 5px 10px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.15) inset;box-shadow:0 5px 10px rgba(0,0,0,.15) inset}article h1,article h3{color:#d6d5d3}article .build-group>h3>a,article a.more-link,article .build-details-comments a{color:#d6d5d3}ul.pagination>li.active>a{background:#f6f5f3;color:#242423 !important}ul.pagination>li:hover:not(.disabled)>a,ul.pagination>li:focus:not(.disabled)>a,ul.pagination>li:active:not(.disabled)>a{background:#d6d5d3;color:#373736 !important}#modal-search-overlay #modal-search{background-color:#242423}#modal-search-overlay #modal-search h3{color:#f6f5f3}#modal-search-overlay #modal-search>#modal-search-box>#modal-search-input,#modal-search-overlay #modal-search>#modal-search-box>#modal-search-button{background-color:#373736;color:#f6f5f3;border-color:#d6d5d3}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,73 +1,2 @@
body { body{background-color:#373736;color:#f6f5f3}a{color:#000}#page-footer a,h1>a{color:#f6f5f3}#page-content,#page-navigation #page-navigation-links>li a,#page-navigation button{color:#373736}table thead th{border-bottom-color:#373736}#page-content{background-color:#f6f5f3}#page-content h3{border-bottom-color:#ccc}#page-navigation{background-color:#e6e5e3;color:#373736}#page-navigation #page-navigation-links>li.open>a,#page-navigation #page-navigation-links>li>a:hover{background-color:#f6f5f3}.dropdown-menu{background-color:#e6e5e3;-moz-box-shadow:0 5px 10px rgba(0,0,0,.15);-webkit-box-shadow:0 5px 10px rgba(0,0,0,.15);box-shadow:0 5px 10px rgba(0,0,0,.15)}.dropdown-menu a:active,.dropdown-menu a:focus,.dropdown-menu a:hover{background-color:#f6f5f3}article{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}article .build-details-comments a,article .build-group>h3>a,article a.more-link,article h1,article h3{color:#242423}ul.pagination>li.active>a{background:#373736;color:#e6e5e3!important}ul.pagination>li:active:not(.disabled)>a,ul.pagination>li:focus:not(.disabled)>a,ul.pagination>li:hover:not(.disabled)>a{background:#242423;color:#f6f5f3!important}#modal-search-overlay #modal-search{background-color:#f6f5f3}#modal-search-overlay #modal-search h3{color:#373736}#modal-search-overlay #modal-search>#modal-search-box>#modal-search-button,#modal-search-overlay #modal-search>#modal-search-box>#modal-search-input{background-color:#fff;color:#373736;border-color:#242423}
background-color: #373736; /*# sourceMappingURL=light.css.map */
color: #f6f5f3; }
a {
color: #000; }
h1 > a,
#page-footer a {
color: #f6f5f3; }
table thead th {
border-bottom-color: #373736; }
#page-content {
background-color: #f6f5f3;
color: #373736; }
#page-content h3 {
border-bottom-color: #ccc; }
#page-navigation {
background-color: #e6e5e3;
color: #373736; }
#page-navigation button {
color: #373736; }
#page-navigation #page-navigation-links > li a {
color: #373736; }
#page-navigation #page-navigation-links > li.open > a,
#page-navigation #page-navigation-links > li > a:hover {
background-color: #f6f5f3; }
.dropdown-menu {
background-color: #e6e5e3;
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.15);
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.15);
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.15); }
.dropdown-menu a:hover,
.dropdown-menu a:focus,
.dropdown-menu a:active {
background-color: #f6f5f3; }
article {
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none; }
article h1, article h3 {
color: #242423; }
article .build-group > h3 > a,
article a.more-link,
article .build-details-comments a {
color: #242423; }
ul.pagination > li.active > a {
background: #373736;
color: #e6e5e3 !important; }
ul.pagination > li:hover:not(.disabled) > a,
ul.pagination > li:focus:not(.disabled) > a,
ul.pagination > li:active:not(.disabled) > a {
background: #242423;
color: #f6f5f3 !important; }
#modal-search-overlay #modal-search {
background-color: #f6f5f3; }
#modal-search-overlay #modal-search h3 {
color: #373736; }
#modal-search-overlay #modal-search > #modal-search-box > #modal-search-input,
#modal-search-overlay #modal-search > #modal-search-box > #modal-search-button {
background-color: #fff;
color: #373736;
border-color: #242423; }
/*# sourceMappingURL=data:application/json;base64,ewoJInZlcnNpb24iOiAzLAoJImZpbGUiOiAiLi4vcmVzL2Nzcy9saWdodC5jc3MiLAoJInNvdXJjZXMiOiBbCgkJIi4uL3Jlcy9jc3MvbGlnaHQuc2NzcyIKCV0sCgkibWFwcGluZ3MiOiAiQUFBQSxBQUFBLElBQUksQ0FDSjtFQUNHLGdCQUFnQixFQUFFLE9BQVE7RUFDMUIsS0FBSyxFQUFFLE9BQVEsR0FDakI7O0FBRUQsQUFBQSxDQUFDLENBQ0Q7RUFDRyxLQUFLLEVBQUUsSUFBSyxHQUNkOztBQUVELEFBQUssRUFBSCxHQUFHLENBQUM7QUFDTixBQUFhLFlBQUQsQ0FBQyxDQUFDLENBQ2Q7RUFDRyxLQUFLLEVBQUUsT0FBUSxHQUNqQjs7QUFFRCxBQUFZLEtBQVAsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUNkO0VBQ0csbUJBQW1CLEVBQUUsT0FBUSxHQUMvQjs7QUFFRCxBQUFBLGFBQWEsQ0FDYjtFQUNHLGdCQUFnQixFQUFFLE9BQVE7RUFDMUIsS0FBSyxFQUFFLE9BQVEsR0FNakI7RUFURCxBQUtHLGFBTFUsQ0FLVixFQUFFLENBQ0Y7SUFDRyxtQkFBbUIsRUFBRSxJQUFLLEdBQzVCOztBQUdKLEFBQUEsZ0JBQWdCLENBQ2hCO0VBQ0csZ0JBQWdCLEVBQUUsT0FBUTtFQUMxQixLQUFLLEVBQUUsT0FBUSxHQXVCakI7RUExQkQsQUFLRyxnQkFMYSxDQUtiLE1BQU0sQ0FDTjtJQUNHLEtBQUssRUFBRSxPQUFRLEdBQ2pCO0VBUkosQUFjUyxnQkFkTyxDQVViLHNCQUFzQixHQUVqQixFQUFFLENBRUQsQ0FBQyxDQUNEO0lBQ0csS0FBSyxFQUFFLE9BQVEsR0FDakI7RUFqQlYsQUFtQmtCLGdCQW5CRixDQVViLHNCQUFzQixHQUVqQixFQUFFLEFBT0EsS0FBSyxHQUFHLENBQUM7RUFuQm5CLEFBb0JZLGdCQXBCSSxDQVViLHNCQUFzQixHQUVqQixFQUFFLEdBUUMsQ0FBQyxBQUFBLE1BQU0sQ0FDVDtJQUNHLGdCQUFnQixFQUFFLE9BQVEsR0FDNUI7O0FBS1YsQUFBQSxjQUFjLENBQ2Q7RUFDRyxnQkFBZ0IsRUFBRSxPQUFRO0VBQzFCLGVBQWUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBSTtFQUNoQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBSTtFQUNuQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQUksR0FRN0I7RUFiRCxBQU9JLGNBUFUsQ0FPWCxDQUFDLEFBQUEsTUFBTTtFQVBWLEFBUUksY0FSVSxDQVFYLENBQUMsQUFBQSxNQUFNO0VBUlYsQUFTSSxjQVRVLENBU1gsQ0FBQyxBQUFBLE9BQU8sQ0FDUjtJQUNHLGdCQUFnQixFQUFFLE9BQVEsR0FDNUI7O0FBR0osQUFBQSxPQUFPLENBQ1A7RUFDRyxlQUFlLEVBQUUsSUFBSztFQUN0QixrQkFBa0IsRUFBRSxJQUFLO0VBQ3pCLFVBQVUsRUFBRSxJQUFLLEdBYW5CO0VBakJELEFBTUcsT0FOSSxDQU1KLEVBQUUsRUFOTCxBQU1PLE9BTkEsQ0FNQSxFQUFFLENBQ047SUFDRyxLQUFLLEVBQUUsT0FBUSxHQUNqQjtFQVRKLEFBV3VCLE9BWGhCLENBV0osWUFBWSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBWHhCLEFBWUksT0FaRyxDQVlKLENBQUMsQUFBQSxVQUFVO0VBWmQsQUFhMkIsT0FicEIsQ0FhSix1QkFBdUIsQ0FBQyxDQUFDLENBQ3pCO0lBQ0csS0FBSyxFQUFFLE9BQVEsR0FDakI7O0FBR0osQUFFaUIsRUFGZixBQUFBLFdBQVcsR0FFUixFQUFFLEFBQUEsT0FBTyxHQUFHLENBQUMsQ0FDZjtFQUNHLFVBQVUsRUFBRSxPQUFRO0VBQ3BCLEtBQUssRUFBRSxrQkFBbUIsR0FDNUI7O0FBTkosQUFRK0IsRUFSN0IsQUFBQSxXQUFXLEdBUVIsRUFBRSxBQUFBLE1BQU0sQUFBQSxJQUFLLENBQUEsQUFBQSxTQUFTLElBQUksQ0FBQztBQVJoQyxBQVMrQixFQVQ3QixBQUFBLFdBQVcsR0FTUixFQUFFLEFBQUEsTUFBTSxBQUFBLElBQUssQ0FBQSxBQUFBLFNBQVMsSUFBSSxDQUFDO0FBVGhDLEFBVWdDLEVBVjlCLEFBQUEsV0FBVyxHQVVSLEVBQUUsQUFBQSxPQUFPLEFBQUEsSUFBSyxDQUFBLEFBQUEsU0FBUyxJQUFJLENBQUMsQ0FDOUI7RUFDRyxVQUFVLEVBQUUsT0FBUTtFQUNwQixLQUFLLEVBQUUsa0JBQW1CLEdBQzVCOztBQUdKLEFBQXNCLHFCQUFELENBQUMsYUFBYSxDQUNuQztFQUNHLGdCQUFnQixFQUFFLE9BQVEsR0FjNUI7RUFoQkQsQUFJRyxxQkFKa0IsQ0FBQyxhQUFhLENBSWhDLEVBQUUsQ0FDRjtJQUNHLEtBQUssRUFBRSxPQUFRLEdBQ2pCO0VBUEosQUFTeUIscUJBVEosQ0FBQyxhQUFhLEdBUzlCLGlCQUFpQixHQUFHLG1CQUFtQjtFQVQ1QyxBQVV5QixxQkFWSixDQUFDLGFBQWEsR0FVOUIsaUJBQWlCLEdBQUcsb0JBQW9CLENBQzFDO0lBQ0csZ0JBQWdCLEVBQUUsSUFBSztJQUN2QixLQUFLLEVBQUUsT0FBUTtJQUNmLFlBQVksRUFBRSxPQUFRLEdBQ3hCIiwKCSJuYW1lcyI6IFtdCn0= */

View File

@ -0,0 +1 @@
{"version":3,"sources":["light.scss"],"names":[],"mappings":"AAAA,KAEG,iBAAkB,QAClB,MAAO,QAGV,EAEG,MAAO,KAIV,eADA,KAGG,MAAO,QAQV,cAWA,6CAAA,wBAOM,MAAO,QAvBb,eAEG,oBAAqB,QAGxB,cAEG,iBAAkB,QAFrB,iBAOM,oBAAqB,KAI3B,iBAEG,iBAAkB,QAClB,MAAO,QAHV,kDAAA,mDAsBY,iBAAkB,QAM9B,eAEG,iBAAkB,QAClB,gBAAiB,EAAE,IAAI,KAAK,gBAC5B,mBAAoB,EAAE,IAAI,KAAK,gBAC/B,WAAY,EAAE,IAAI,KAAK,gBAL1B,wBAAA,uBAAA,uBAWM,iBAAkB,QAIxB,QAEG,gBAAiB,KACjB,mBAAoB,KACpB,WAAY,KAJf,kCAAA,0BAAA,oBAAA,WAAA,WAQM,MAAO,QAWb,0BAIM,WAAY,QACZ,MAAO,kBALb,yCAAA,wCAAA,wCAYM,WAAY,QACZ,MAAO,kBAIb,oCAEG,iBAAkB,QAFrB,uCAMM,MAAO,QANb,2EAAA,0EAYM,iBAAkB,KAClB,MAAO,QACP,aAAc","file":"light.css","sourcesContent":["body\r\n{\r\n background-color: #373736;\r\n color: #f6f5f3;\r\n}\r\n\r\na\r\n{\r\n color: #000;\r\n}\r\n\r\nh1 > a,\r\n#page-footer a\r\n{\r\n color: #f6f5f3;\r\n}\r\n\r\ntable thead th\r\n{\r\n border-bottom-color: #373736;\r\n}\r\n\r\n#page-content\r\n{\r\n background-color: #f6f5f3;\r\n color: #373736;\r\n\r\n h3\r\n {\r\n border-bottom-color: #ccc;\r\n }\r\n}\r\n\r\n#page-navigation\r\n{\r\n background-color: #e6e5e3;\r\n color: #373736;\r\n\r\n button\r\n {\r\n color: #373736;\r\n }\r\n\r\n #page-navigation-links\r\n {\r\n > li\r\n {\r\n a\r\n {\r\n color: #373736;\r\n }\r\n\r\n &.open > a,\r\n > a:hover\r\n {\r\n background-color: #f6f5f3;\r\n }\r\n }\r\n }\r\n}\r\n\r\n.dropdown-menu\r\n{\r\n background-color: #e6e5e3;\r\n -moz-box-shadow: 0 5px 10px rgba(0,0,0,0.15);\r\n -webkit-box-shadow: 0 5px 10px rgba(0,0,0,0.15);\r\n box-shadow: 0 5px 10px rgba(0,0,0,0.15);\r\n\r\n a:hover,\r\n a:focus,\r\n a:active\r\n {\r\n background-color: #f6f5f3;\r\n }\r\n}\r\n\r\narticle\r\n{\r\n -moz-box-shadow: none;\r\n -webkit-box-shadow: none;\r\n box-shadow: none;\r\n\r\n h1, h3\r\n {\r\n color: #242423;\r\n }\r\n\r\n .build-group > h3 > a,\r\n a.more-link,\r\n .build-details-comments a\r\n {\r\n color: #242423;\r\n }\r\n}\r\n\r\nul.pagination\r\n{\r\n > li.active > a\r\n {\r\n background: #373736;\r\n color: #e6e5e3 !important;\r\n }\r\n\r\n > li:hover:not(.disabled) > a,\r\n > li:focus:not(.disabled) > a,\r\n > li:active:not(.disabled) > a\r\n {\r\n background: #242423;\r\n color: #f6f5f3 !important;\r\n }\r\n}\r\n\r\n#modal-search-overlay #modal-search\r\n{\r\n background-color: #f6f5f3;\r\n\r\n h3\r\n {\r\n color: #373736;\r\n }\r\n\r\n > #modal-search-box > #modal-search-input,\r\n > #modal-search-box > #modal-search-button\r\n {\r\n background-color: #fff;\r\n color: #373736;\r\n border-color: #242423;\r\n }\r\n}\r\n"]}

View File

@ -1 +0,0 @@
body{background-color:#373736;color:#f6f5f3}a{color:#000}h1>a,#page-footer a{color:#f6f5f3}table thead th{border-bottom-color:#373736}#page-content{background-color:#f6f5f3;color:#373736}#page-content h3{border-bottom-color:#ccc}#page-navigation{background-color:#e6e5e3;color:#373736}#page-navigation button{color:#373736}#page-navigation #page-navigation-links>li a{color:#373736}#page-navigation #page-navigation-links>li.open>a,#page-navigation #page-navigation-links>li>a:hover{background-color:#f6f5f3}.dropdown-menu{background-color:#e6e5e3;-moz-box-shadow:0 5px 10px rgba(0,0,0,.15);-webkit-box-shadow:0 5px 10px rgba(0,0,0,.15);box-shadow:0 5px 10px rgba(0,0,0,.15)}.dropdown-menu a:hover,.dropdown-menu a:focus,.dropdown-menu a:active{background-color:#f6f5f3}article{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}article h1,article h3{color:#242423}article .build-group>h3>a,article a.more-link,article .build-details-comments a{color:#242423}ul.pagination>li.active>a{background:#373736;color:#e6e5e3 !important}ul.pagination>li:hover:not(.disabled)>a,ul.pagination>li:focus:not(.disabled)>a,ul.pagination>li:active:not(.disabled)>a{background:#242423;color:#f6f5f3 !important}#modal-search-overlay #modal-search{background-color:#f6f5f3}#modal-search-overlay #modal-search h3{color:#373736}#modal-search-overlay #modal-search>#modal-search-box>#modal-search-input,#modal-search-overlay #modal-search>#modal-search-box>#modal-search-button{background-color:#fff;color:#373736;border-color:#242423}

View File

@ -1,31 +1,2 @@
nav#page-navigation #page-navigation-links { nav#page-navigation #page-navigation-links{text-align:left}.dropdown-parent .dropdown-menu,nav#page-navigation #page-navigation-links>li>a{text-align:right}.dropdown-parent .dropdown-menu .dropdown-menu-block,.dropdown-parent .dropdown-menu .dropdown-menu-block li{float:right}.form-group label{text-align:left}article .build-group-listing .build-group h3{text-align:right}footer#page-footer .footer-flex .footer-flex-item:last-child{text-align:left}footer#page-footer .footer-flex .footer-flex-item:first-child{text-align:right}@media (max-width:640px){footer#page-footer .footer-flex .footer-flex-item:first-child,footer#page-footer .footer-flex .footer-flex-item:last-child{text-align:center}}
text-align: left; } /*# sourceMappingURL=rtl.css.map */
nav#page-navigation #page-navigation-links > li > a {
text-align: right; }
.dropdown-parent .dropdown-menu {
text-align: right; }
.dropdown-parent .dropdown-menu .dropdown-menu-block {
float: right; }
.dropdown-parent .dropdown-menu .dropdown-menu-block li {
float: right; }
.form-group label {
text-align: left; }
article .build-group-listing .build-group h3 {
text-align: right; }
footer#page-footer .footer-flex .footer-flex-item:last-child {
text-align: left; }
footer#page-footer .footer-flex .footer-flex-item:first-child {
text-align: right; }
@media (max-width: 640px) {
footer#page-footer .footer-flex .footer-flex-item:first-child {
text-align: center; }
footer#page-footer .footer-flex .footer-flex-item:last-child {
text-align: center; } }
/*# sourceMappingURL=data:application/json;base64,ewoJInZlcnNpb24iOiAzLAoJImZpbGUiOiAiLi4vcmVzL2Nzcy9ydGwuY3NzIiwKCSJzb3VyY2VzIjogWwoJCSIuLi9yZXMvY3NzL3J0bC5zY3NzIgoJXSwKCSJtYXBwaW5ncyI6ICJBQUFBLEFBQW9CLEdBQWpCLEFBQUEsZ0JBQWdCLENBQUMsc0JBQXNCLENBQzFDO0VBQ0csVUFBVSxFQUFFLElBQUssR0FNbkI7RUFSRCxBQUlVLEdBSlAsQUFBQSxnQkFBZ0IsQ0FBQyxzQkFBc0IsR0FJckMsRUFBRSxHQUFHLENBQUMsQ0FDUjtJQUNHLFVBQVUsRUFBRSxLQUFNLEdBQ3BCOztBQUdKLEFBQWlCLGdCQUFELENBQUMsY0FBYyxDQUMvQjtFQUNHLFVBQVUsRUFBRSxLQUFNLEdBV3BCO0VBYkQsQUFJRyxnQkFKYSxDQUFDLGNBQWMsQ0FJNUIsb0JBQW9CLENBQ3BCO0lBQ0csS0FBSyxFQUFFLEtBQU0sR0FNZjtJQVpKLEFBUU0sZ0JBUlUsQ0FBQyxjQUFjLENBSTVCLG9CQUFvQixDQUlqQixFQUFFLENBQ0Y7TUFDRyxLQUFLLEVBQUUsS0FBTSxHQUNmOztBQUlQLEFBQVksV0FBRCxDQUFDLEtBQUssQ0FDakI7RUFDRyxVQUFVLEVBQUUsSUFBSyxHQUNuQjs7QUFFRCxBQUEwQyxPQUFuQyxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxFQUFFLENBQzVDO0VBQ0csVUFBVSxFQUFFLEtBQU0sR0FDcEI7O0FBRUQsQUFBZ0MsTUFBMUIsQUFBQSxZQUFZLENBQUMsWUFBWSxDQUFDLGlCQUFpQixBQUc3QyxXQUFXLENBQ1o7RUFDRyxVQUFVLEVBQUUsSUFBSyxHQUNuQjs7QUFOSixBQUFnQyxNQUExQixBQUFBLFlBQVksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEFBUTdDLFlBQVksQ0FDYjtFQUNHLFVBQVUsRUFBRSxLQUFNLEdBQ3BCOztBQUdKLE1BQU0sRUFBTCxTQUFTLEVBQUUsS0FBSztFQUVkLEFBQWdDLE1BQTFCLEFBQUEsWUFBWSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQUFFN0MsWUFBWSxDQUNiO0lBQ0csVUFBVSxFQUFFLE1BQU8sR0FDckI7RUFMSixBQUFnQyxNQUExQixBQUFBLFlBQVksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEFBTzdDLFdBQVcsQ0FDWjtJQUNHLFVBQVUsRUFBRSxNQUFPLEdBQ3JCIiwKCSJuYW1lcyI6IFtdCn0= */

View File

@ -0,0 +1 @@
{"version":3,"sources":["rtl.scss"],"names":[],"mappings":"AAAA,2CAEG,WAAY,KAQf,gCAVA,gDAMM,WAAY,MAIlB,qDAAA,wDAMM,MAAO,MASb,kBAEG,WAAY,KAGf,6CAEG,WAAY,MAGf,6DAKM,WAAY,KALlB,8DAUM,WAAY,MAIlB,yBAEG,8DAAA,6DAIM,WAAY","file":"rtl.css","sourcesContent":["nav#page-navigation #page-navigation-links\r\n{\r\n text-align: left;\r\n\r\n > li > a\r\n {\r\n text-align: right;\r\n }\r\n}\r\n\r\n.dropdown-parent .dropdown-menu\r\n{\r\n text-align: right;\r\n\r\n .dropdown-menu-block\r\n {\r\n float: right;\r\n\r\n li\r\n {\r\n float: right;\r\n }\r\n }\r\n}\r\n\r\n.form-group label\r\n{\r\n text-align: left;\r\n}\r\n\r\narticle .build-group-listing .build-group h3\r\n{\r\n text-align: right;\r\n}\r\n\r\nfooter#page-footer .footer-flex .footer-flex-item\r\n{\r\n\r\n &:last-child\r\n {\r\n text-align: left;\r\n }\r\n\r\n &:first-child\r\n {\r\n text-align: right;\r\n }\r\n}\r\n\r\n@media (max-width: 640px)\r\n{\r\n footer#page-footer .footer-flex .footer-flex-item\r\n {\r\n &:first-child\r\n {\r\n text-align: center;\r\n }\r\n\r\n &:last-child\r\n {\r\n text-align: center;\r\n }\r\n }\r\n}\r\n"]}

View File

@ -1 +0,0 @@
nav#page-navigation #page-navigation-links{text-align:left;}nav#page-navigation #page-navigation-links>li>a{text-align:right;}.dropdown-parent .dropdown-menu{text-align:right;}.dropdown-parent .dropdown-menu .dropdown-menu-block{float:right;}.dropdown-parent .dropdown-menu .dropdown-menu-block li{float:right;}.form-group label{text-align:left;}article .build-group-listing .build-group h3{text-align:right;}footer#page-footer .footer-flex .footer-flex-item:last-child{text-align:left;}footer#page-footer .footer-flex .footer-flex-item:first-child{text-align:right;}@media(max-width:640px){footer#page-footer .footer-flex .footer-flex-item:first-child{text-align:center;}footer#page-footer .footer-flex .footer-flex-item:last-child{text-align:center;}}

View File

@ -1,44 +1,42 @@
/// <reference path="../../scripts/typings/google.analytics/ga.d.ts" />
/// <reference path="../../scripts/typings/jsrender/jsrender.d.ts" />
var BuildFeed; var BuildFeed;
(function (BuildFeed) { (function (BuildFeed) {
var ajax; let ajax;
var timeout; let timeout;
function MobileMenuToggle(ev) { function MobileMenuToggle(ev) {
ev.preventDefault(); ev.preventDefault();
var button = this; const button = this;
button.nextElementSibling.classList.toggle("open"); button.nextElementSibling.classList.toggle("open");
} }
BuildFeed.MobileMenuToggle = MobileMenuToggle; BuildFeed.MobileMenuToggle = MobileMenuToggle;
function DropdownClick(ev) { function DropdownClick(ev) {
ev.preventDefault(); ev.preventDefault();
var link = this; const link = this;
link.parentElement.classList.toggle("open"); link.parentElement.classList.toggle("open");
} }
BuildFeed.DropdownClick = DropdownClick; BuildFeed.DropdownClick = DropdownClick;
function SwitchTheme(ev) { function SwitchTheme(ev) {
ev.preventDefault(); ev.preventDefault();
var link = this; const link = this;
document.cookie = "bf_theme=" + link.dataset["theme"] + "; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/"; document.cookie = `bf_theme=${link.dataset["theme"]}; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/`;
location.reload(true); location.reload(true);
} }
BuildFeed.SwitchTheme = SwitchTheme; BuildFeed.SwitchTheme = SwitchTheme;
function SwitchLanguage(ev) { function SwitchLanguage(ev) {
ev.preventDefault(); ev.preventDefault();
var link = this; const link = this;
document.cookie = "bf_lang=" + link.dataset["lang"] + "; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/"; document.cookie = `bf_lang=${link.dataset["lang"]}; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/`;
location.reload(true); location.reload(true);
} }
BuildFeed.SwitchLanguage = SwitchLanguage; BuildFeed.SwitchLanguage = SwitchLanguage;
function OpenSearch(ev) { function OpenSearch(ev) {
ev.preventDefault(); ev.preventDefault();
var modal = document.getElementById("modal-search-overlay"); const modal = document.getElementById("modal-search-overlay");
modal.classList.add("open"); modal.classList.add("open");
} }
BuildFeed.OpenSearch = OpenSearch; BuildFeed.OpenSearch = OpenSearch;
function CloseSearch(ev) { function CloseSearch(ev) {
ev.preventDefault(); ev.preventDefault();
var modal = document.getElementById("modal-search-overlay"); const modal = document.getElementById("modal-search-overlay");
modal.classList.remove("open"); modal.classList.remove("open");
} }
BuildFeed.CloseSearch = CloseSearch; BuildFeed.CloseSearch = CloseSearch;
@ -48,7 +46,7 @@ var BuildFeed;
} }
BuildFeed.StopClick = StopClick; BuildFeed.StopClick = StopClick;
function InitiateSearch(ev) { function InitiateSearch(ev) {
var resultPane = document.getElementById("modal-search-result"); const resultPane = document.getElementById("modal-search-result");
resultPane.innerHTML = ""; resultPane.innerHTML = "";
if (typeof (timeout) !== "undefined") { if (typeof (timeout) !== "undefined") {
clearTimeout(timeout); clearTimeout(timeout);
@ -63,10 +61,10 @@ var BuildFeed;
if (typeof (timeout) !== "undefined") { if (typeof (timeout) !== "undefined") {
clearTimeout(timeout); clearTimeout(timeout);
} }
var modalInput = document.getElementById("modal-search-input"); const modalInput = document.getElementById("modal-search-input");
ajax = new XMLHttpRequest(); ajax = new XMLHttpRequest();
ajax.onreadystatechange = CompleteSearch; ajax.onreadystatechange = CompleteSearch;
ajax.open("GET", "/api/GetSearchResult/" + modalInput.value + "/", true); ajax.open("GET", `/api/GetSearchResult/${modalInput.value}/`, true);
ajax.setRequestHeader("accept", "application/json"); ajax.setRequestHeader("accept", "application/json");
ajax.send(null); ajax.send(null);
} }
@ -75,49 +73,49 @@ var BuildFeed;
if (ajax.readyState !== XMLHttpRequest.DONE || ajax.status !== 200) { if (ajax.readyState !== XMLHttpRequest.DONE || ajax.status !== 200) {
return; return;
} }
var resultPane = document.getElementById("modal-search-result"); const resultPane = document.getElementById("modal-search-result");
var templateContent = document.getElementById("result-template"); const templateContent = document.getElementById("result-template");
var template = jsrender.templates(templateContent.innerHTML); const template = jsrender.templates(templateContent.innerHTML);
var content = template.render(JSON.parse(ajax.responseText)); const content = template.render(JSON.parse(ajax.responseText));
resultPane.innerHTML = content; resultPane.innerHTML = content;
var resultLinks = resultPane.getElementsByTagName("a"); const resultLinks = resultPane.getElementsByTagName("a");
for (var i = 0; i < resultLinks.length; i++) { for (let i = 0; i < resultLinks.length; i++) {
resultLinks[i].addEventListener("click", function (mev) { resultLinks[i].addEventListener("click", (mev) => {
mev.preventDefault(); mev.preventDefault();
var modalInput = document.getElementById("modal-search-input"); const modalInput = document.getElementById("modal-search-input");
ga("send", "pageview", "/api/GetSearchResult/" + modalInput.value + "/"); ga("send", "pageview", `/api/GetSearchResult/${modalInput.value}/`);
location.assign(mev.currentTarget.href); location.assign(mev.currentTarget.href);
}); });
} }
} }
BuildFeed.CompleteSearch = CompleteSearch; BuildFeed.CompleteSearch = CompleteSearch;
function BuildFeedSetup(ev) { function BuildFeedSetup(ev) {
var ddParents = document.getElementsByClassName("dropdown-parent"); const ddParents = document.getElementsByClassName("dropdown-parent");
for (var i = 0; i < ddParents.length; i++) { for (let i = 0; i < ddParents.length; i++) {
for (var j = 0; j < ddParents[i].childNodes.length; j++) { for (let j = 0; j < ddParents[i].childNodes.length; j++) {
var el = ddParents[i].childNodes[j]; const el = ddParents[i].childNodes[j];
if (el.nodeName === "A") { if (el.nodeName === "A") {
el.addEventListener("click", DropdownClick); el.addEventListener("click", DropdownClick);
} }
} }
} }
var ddThemes = document.getElementById("settings-theme-menu").getElementsByTagName("a"); const ddThemes = document.getElementById("settings-theme-menu").getElementsByTagName("a");
for (var i = 0; i < ddThemes.length; i++) { for (let i = 0; i < ddThemes.length; i++) {
ddThemes[i].addEventListener("click", SwitchTheme); ddThemes[i].addEventListener("click", SwitchTheme);
} }
var ddLangs = document.getElementById("settings-lang-menu").getElementsByTagName("a"); const ddLangs = document.getElementById("settings-lang-menu").getElementsByTagName("a");
for (var i = 0; i < ddLangs.length; i++) { for (let i = 0; i < ddLangs.length; i++) {
ddLangs[i].addEventListener("click", SwitchLanguage); ddLangs[i].addEventListener("click", SwitchLanguage);
} }
var btnNav = document.getElementById("page-navigation-toggle"); const btnNav = document.getElementById("page-navigation-toggle");
btnNav.addEventListener("click", MobileMenuToggle); btnNav.addEventListener("click", MobileMenuToggle);
var btnSearch = document.getElementById("page-navigation-search"); const btnSearch = document.getElementById("page-navigation-search");
btnSearch.addEventListener("click", OpenSearch); btnSearch.addEventListener("click", OpenSearch);
var modalOverlay = document.getElementById("modal-search-overlay"); const modalOverlay = document.getElementById("modal-search-overlay");
modalOverlay.addEventListener("click", CloseSearch); modalOverlay.addEventListener("click", CloseSearch);
var modalDialog = document.getElementById("modal-search"); const modalDialog = document.getElementById("modal-search");
modalDialog.addEventListener("click", StopClick); modalDialog.addEventListener("click", StopClick);
var modalInput = document.getElementById("modal-search-input"); const modalInput = document.getElementById("modal-search-input");
modalInput.addEventListener("keyup", InitiateSearch); modalInput.addEventListener("keyup", InitiateSearch);
} }
BuildFeed.BuildFeedSetup = BuildFeedSetup; BuildFeed.BuildFeedSetup = BuildFeedSetup;

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
var BuildFeed;(function(n){function r(n){n.preventDefault();var t=this;t.nextElementSibling.classList.toggle("open")}function u(n){n.preventDefault();var t=this;t.parentElement.classList.toggle("open")}function f(n){n.preventDefault();var t=this;document.cookie="bf_theme="+t.dataset.theme+"; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/";location.reload(!0)}function e(n){n.preventDefault();var t=this;document.cookie="bf_lang="+t.dataset.lang+"; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/";location.reload(!0)}function o(n){n.preventDefault();var t=document.getElementById("modal-search-overlay");t.classList.add("open")}function s(n){n.preventDefault();var t=document.getElementById("modal-search-overlay");t.classList.remove("open")}function h(n){n.preventDefault();n.stopPropagation()}function c(){var n=document.getElementById("modal-search-result");n.innerHTML="";typeof i!="undefined"&&clearTimeout(i);typeof t!="undefined"&&t.readyState!==XMLHttpRequest.DONE&&t.abort();i=setInterval(l,200)}function l(){typeof i!="undefined"&&clearTimeout(i);var n=document.getElementById("modal-search-input");t=new XMLHttpRequest;t.onreadystatechange=a;t.open("GET","/api/GetSearchResult/"+n.value+"/",!0);t.setRequestHeader("accept","application/json");t.send(null)}function a(){var i,n;if(t.readyState===XMLHttpRequest.DONE&&t.status===200){var r=document.getElementById("modal-search-result"),u=document.getElementById("result-template"),f=jsrender.templates(u.innerHTML),e=f.render(JSON.parse(t.responseText));for(r.innerHTML=e,i=r.getElementsByTagName("a"),n=0;n<i.length;n++)i[n].addEventListener("click",function(n){n.preventDefault();var t=document.getElementById("modal-search-input");ga("send","pageview","/api/GetSearchResult/"+t.value+"/");location.assign(n.currentTarget.href)})}}function v(){for(var t,l,a,v,y,p,w,b,k,i=document.getElementsByClassName("dropdown-parent"),n=0;n<i.length;n++)for(t=0;t<i[n].childNodes.length;t++)l=i[n].childNodes[t],l.nodeName==="A"&&l.addEventListener("click",u);for(a=document.getElementById("settings-theme-menu").getElementsByTagName("a"),n=0;n<a.length;n++)a[n].addEventListener("click",f);for(v=document.getElementById("settings-lang-menu").getElementsByTagName("a"),n=0;n<v.length;n++)v[n].addEventListener("click",e);y=document.getElementById("page-navigation-toggle");y.addEventListener("click",r);p=document.getElementById("page-navigation-search");p.addEventListener("click",o);w=document.getElementById("modal-search-overlay");w.addEventListener("click",s);b=document.getElementById("modal-search");b.addEventListener("click",h);k=document.getElementById("modal-search-input");k.addEventListener("keyup",c)}var t,i;n.MobileMenuToggle=r;n.DropdownClick=u;n.SwitchTheme=f;n.SwitchLanguage=e;n.OpenSearch=o;n.CloseSearch=s;n.StopClick=h;n.InitiateSearch=c;n.SendSearch=l;n.CompleteSearch=a;n.BuildFeedSetup=v})(BuildFeed||(BuildFeed={}));window.addEventListener("load",BuildFeed.BuildFeedSetup); var BuildFeed;(function(n){function r(n){n.preventDefault();const t=this;t.nextElementSibling.classList.toggle("open")}function u(n){n.preventDefault();const t=this;t.parentElement.classList.toggle("open")}function f(n){n.preventDefault();const t=this;document.cookie=`bf_theme=${t.dataset.theme}; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/`;location.reload(!0)}function e(n){n.preventDefault();const t=this;document.cookie=`bf_lang=${t.dataset.lang}; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/`;location.reload(!0)}function o(n){n.preventDefault();const t=document.getElementById("modal-search-overlay");t.classList.add("open")}function s(n){n.preventDefault();const t=document.getElementById("modal-search-overlay");t.classList.remove("open")}function h(n){n.preventDefault();n.stopPropagation()}function c(){const n=document.getElementById("modal-search-result");n.innerHTML="";typeof i!="undefined"&&clearTimeout(i);typeof t!="undefined"&&t.readyState!==XMLHttpRequest.DONE&&t.abort();i=setInterval(l,200)}function l(){typeof i!="undefined"&&clearTimeout(i);const n=document.getElementById("modal-search-input");t=new XMLHttpRequest;t.onreadystatechange=a;t.open("GET",`/api/GetSearchResult/${n.value}/`,!0);t.setRequestHeader("accept","application/json");t.send(null)}function a(){if(t.readyState===XMLHttpRequest.DONE&&t.status===200){const n=document.getElementById("modal-search-result"),r=document.getElementById("result-template"),u=jsrender.templates(r.innerHTML),f=u.render(JSON.parse(t.responseText));n.innerHTML=f;const i=n.getElementsByTagName("a");for(let n=0;n<i.length;n++)i[n].addEventListener("click",n=>{n.preventDefault();const t=document.getElementById("modal-search-input");ga("send","pageview",`/api/GetSearchResult/${t.value}/`);location.assign(n.currentTarget.href)})}}function v(){const n=document.getElementsByClassName("dropdown-parent");for(let t=0;t<n.length;t++)for(let i=0;i<n[t].childNodes.length;i++){const r=n[t].childNodes[i];r.nodeName==="A"&&r.addEventListener("click",u)}const t=document.getElementById("settings-theme-menu").getElementsByTagName("a");for(let n=0;n<t.length;n++)t[n].addEventListener("click",f);const i=document.getElementById("settings-lang-menu").getElementsByTagName("a");for(let n=0;n<i.length;n++)i[n].addEventListener("click",e);const l=document.getElementById("page-navigation-toggle");l.addEventListener("click",r);const a=document.getElementById("page-navigation-search");a.addEventListener("click",o);const v=document.getElementById("modal-search-overlay");v.addEventListener("click",s);const y=document.getElementById("modal-search");y.addEventListener("click",h);const p=document.getElementById("modal-search-input");p.addEventListener("keyup",c)}let t,i;n.MobileMenuToggle=r;n.DropdownClick=u;n.SwitchTheme=f;n.SwitchLanguage=e;n.OpenSearch=o;n.CloseSearch=s;n.StopClick=h;n.InitiateSearch=c;n.SendSearch=l;n.CompleteSearch=a;n.BuildFeedSetup=v})(BuildFeed||(BuildFeed={}));window.addEventListener("load",BuildFeed.BuildFeedSetup);

View File

@ -22,7 +22,8 @@ module BuildFeed
link.parentElement.classList.toggle("open"); link.parentElement.classList.toggle("open");
} }
export function SwitchTheme(ev: MouseEvent) { export function SwitchTheme(ev: MouseEvent)
{
ev.preventDefault(); ev.preventDefault();
const link = this as HTMLAnchorElement; const link = this as HTMLAnchorElement;
@ -138,7 +139,8 @@ module BuildFeed
} }
const ddThemes = document.getElementById("settings-theme-menu").getElementsByTagName("a"); const ddThemes = document.getElementById("settings-theme-menu").getElementsByTagName("a");
for (let i = 0; i < ddThemes.length; i++) { for (let i = 0; i < ddThemes.length; i++)
{
ddThemes[i].addEventListener("click", SwitchTheme); ddThemes[i].addEventListener("click", SwitchTheme);
} }