Bugfixes; Component Update; Refactoring

Commented out qps-ploc to work on Mono.
This commit is contained in:
Thomas Hounsell 2016-11-06 21:22:11 +00:00
parent 7583968109
commit db1c655db0
28 changed files with 421 additions and 352 deletions

View File

@ -9,7 +9,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>MongoAuth</RootNamespace>
<AssemblyName>MongoAuth</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
@ -31,16 +31,16 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="MongoDB.Bson, Version=2.2.4.26, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\MongoDB.Bson.2.2.4\lib\net45\MongoDB.Bson.dll</HintPath>
<Reference Include="MongoDB.Bson, Version=2.3.0.157, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\MongoDB.Bson.2.3.0\lib\net45\MongoDB.Bson.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="MongoDB.Driver, Version=2.2.4.26, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\MongoDB.Driver.2.2.4\lib\net45\MongoDB.Driver.dll</HintPath>
<Reference Include="MongoDB.Driver, Version=2.3.0.157, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\MongoDB.Driver.2.3.0\lib\net45\MongoDB.Driver.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="MongoDB.Driver.Core, Version=2.2.4.26, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\MongoDB.Driver.Core.2.2.4\lib\net45\MongoDB.Driver.Core.dll</HintPath>
<Reference Include="MongoDB.Driver.Core, Version=2.3.0.157, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\MongoDB.Driver.Core.2.3.0\lib\net45\MongoDB.Driver.Core.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System" />

View File

@ -18,13 +18,13 @@ public class MongoMembershipProvider : MembershipProvider
private bool _enablePasswordReset = true;
private int _maxInvalidPasswordAttempts = 5;
private IMongoCollection<MongoMember> _memberCollection;
private int _minRequiredNonAlphanumericCharacters = 1;
private int _minRequriedPasswordLength = 12;
private int _passwordAttemptWindow = 60;
private bool _requiresUniqueEmail = true;
private IMongoCollection<MongoMember> _memberCollection;
public override string ApplicationName { get; set; }
public override bool EnablePasswordReset => _enablePasswordReset;
@ -97,7 +97,7 @@ public override bool ChangePassword(string username, string oldPassword, string
return false;
}
byte[] salt = new byte[24];
var salt = new byte[24];
byte[] hash = CalculateHash(newPassword, ref salt);
mm.PassSalt = salt;
@ -112,7 +112,10 @@ public override bool ChangePassword(string username, string oldPassword, string
return false;
}
public override bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer) { throw new NotImplementedException(); }
public override bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer)
{
throw new NotImplementedException();
}
public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
{
@ -139,7 +142,7 @@ public override MembershipUser CreateUser(string username, string password, stri
}
else
{
byte[] salt = new byte[24];
var salt = new byte[24];
byte[] hash = CalculateHash(password, ref salt);
MongoMember mm = new MongoMember
@ -179,12 +182,18 @@ public override bool DeleteUser(string username, bool deleteAllRelatedData)
Task<DeleteResult> task = _memberCollection.DeleteOneAsync(m => m.UserName.ToLower() == username.ToLower());
task.Wait();
return task.Result.IsAcknowledged && task.Result.DeletedCount == 1;
return task.Result.IsAcknowledged && (task.Result.DeletedCount == 1);
}
public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords) { throw new NotImplementedException(); }
public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords)
{
throw new NotImplementedException();
}
public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords) { throw new NotImplementedException(); }
public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords)
{
throw new NotImplementedException();
}
public override MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords)
{
@ -208,9 +217,15 @@ public override MembershipUserCollection GetAllUsers(int pageIndex, int pageSize
return muc;
}
public override int GetNumberOfUsersOnline() { throw new NotImplementedException(); }
public override int GetNumberOfUsersOnline()
{
throw new NotImplementedException();
}
public override string GetPassword(string username, string answer) { throw new NotImplementedException(); }
public override string GetPassword(string username, string answer)
{
throw new NotImplementedException();
}
public override MembershipUser GetUser(string username, bool userIsOnline)
{
@ -244,7 +259,10 @@ public override string GetUserNameByEmail(string email)
return task.Result.UserName;
}
public override string ResetPassword(string username, string answer) { throw new NotImplementedException(); }
public override string ResetPassword(string username, string answer)
{
throw new NotImplementedException();
}
public void ChangeApproval(Guid id, bool newStatus)
{
@ -254,8 +272,10 @@ public void ChangeApproval(Guid id, bool newStatus)
public void ChangeLockStatus(Guid id, bool newStatus)
{
List<UpdateDefinition<MongoMember>> updateDefinition = new List<UpdateDefinition<MongoMember>>();
updateDefinition.Add(Builders<MongoMember>.Update.Set(u => u.IsLockedOut, newStatus));
var updateDefinition = new List<UpdateDefinition<MongoMember>>
{
Builders<MongoMember>.Update.Set(u => u.IsLockedOut, newStatus)
};
if (newStatus)
{
@ -276,10 +296,13 @@ public override bool UnlockUser(string userName)
Task<UpdateResult> task = _memberCollection.UpdateOneAsync(Builders<MongoMember>.Filter.Eq(m => m.UserName.ToLower(), userName.ToLower()), Builders<MongoMember>.Update.Set(m => m.IsLockedOut, false));
task.Wait();
return task.Result.IsAcknowledged && task.Result.ModifiedCount == 1;
return task.Result.IsAcknowledged && (task.Result.ModifiedCount == 1);
}
public override void UpdateUser(MembershipUser user) { throw new NotImplementedException(); }
public override void UpdateUser(MembershipUser user)
{
throw new NotImplementedException();
}
public override bool ValidateUser(string username, string password)
{
@ -287,7 +310,7 @@ public override bool ValidateUser(string username, string password)
task.Wait();
MongoMember mm = task.Result;
if (mm == null
if ((mm == null)
|| !(mm.IsApproved && !mm.IsLockedOut))
{
return false;
@ -353,7 +376,7 @@ private static byte[] CalculateHash(string password, ref byte[] salt)
byte[] passwordBytes = Encoding.UTF8.GetBytes(password);
byte[] hashPlaintext = new byte[salt.Length + passwordBytes.Length];
var hashPlaintext = new byte[salt.Length + passwordBytes.Length];
passwordBytes.CopyTo(hashPlaintext, 0);
salt.CopyTo(hashPlaintext, passwordBytes.Length);

View File

@ -17,8 +17,8 @@ public class MongoRoleProvider : RoleProvider
{
private const string MEMBER_COLLECTION_NAME = "members";
private const string ROLE_COLLECTION_NAME = "roles";
private IMongoCollection<MongoRole> _roleCollection;
private IMongoCollection<MongoMember> _memberCollection;
private IMongoCollection<MongoRole> _roleCollection;
public override string ApplicationName
{
@ -61,7 +61,7 @@ public override void AddUsersToRoles(string[] usernames, string[] roleNames)
for (int i = 0; i < roles.Count; i++)
{
List<Guid> newUsers = new List<Guid>();
var newUsers = new List<Guid>();
if (roles[i].Users != null)
{
@ -98,8 +98,8 @@ public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
Task<MongoRole> role = _roleCollection.Find(r => r.RoleName == roleName).SingleOrDefaultAsync();
role.Wait();
if (role.Result != null
&& role.Result.Users.Length > 0
if ((role.Result != null)
&& (role.Result.Users.Length > 0)
&& throwOnPopulatedRole)
{
throw new ProviderException(Resources.RoleNotEmpty);
@ -145,7 +145,7 @@ public override string[] GetRolesForUser(string username)
return Array.Empty<string>();
}
Task<List<MongoRole>> role = _roleCollection.Find(r => r.Users != null && r.Users.Contains(user.Result.Id)).ToListAsync();
Task<List<MongoRole>> role = _roleCollection.Find(r => (r.Users != null) && r.Users.Contains(user.Result.Id)).ToListAsync();
role.Wait();
return role.Result.Select(r => r.RoleName).ToArray();
@ -174,8 +174,8 @@ public override bool IsUserInRole(string username, string roleName)
user.Wait();
role.Wait();
if (user.Result == null
|| role.Result?.Users == null)
if ((user.Result == null)
|| (role.Result?.Users == null))
{
return false;
}

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="MongoDB.Bson" version="2.2.4" targetFramework="net461" />
<package id="MongoDB.Driver" version="2.2.4" targetFramework="net461" />
<package id="MongoDB.Driver.Core" version="2.2.4" targetFramework="net461" />
<package id="MongoDB.Bson" version="2.3.0" targetFramework="net462" />
<package id="MongoDB.Driver" version="2.3.0" targetFramework="net462" />
<package id="MongoDB.Driver.Core" version="2.3.0" targetFramework="net462" />
</packages>

View File

@ -39,16 +39,16 @@
<HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="MongoDB.Bson, Version=2.2.4.26, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MongoDB.Bson.2.2.4\lib\net45\MongoDB.Bson.dll</HintPath>
<Reference Include="MongoDB.Bson, Version=2.3.0.157, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MongoDB.Bson.2.3.0\lib\net45\MongoDB.Bson.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="MongoDB.Driver, Version=2.2.4.26, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MongoDB.Driver.2.2.4\lib\net45\MongoDB.Driver.dll</HintPath>
<Reference Include="MongoDB.Driver, Version=2.3.0.157, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MongoDB.Driver.2.3.0\lib\net45\MongoDB.Driver.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="MongoDB.Driver.Core, Version=2.2.4.26, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MongoDB.Driver.Core.2.2.4\lib\net45\MongoDB.Driver.Core.dll</HintPath>
<Reference Include="MongoDB.Driver.Core, Version=2.3.0.157, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MongoDB.Driver.Core.2.3.0\lib\net45\MongoDB.Driver.Core.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System" />

View File

@ -1,6 +1,6 @@
namespace BuildFeed.Model
{
public class BuildGroup
public struct BuildGroup
{
public uint Major { get; set; }
public uint Minor { get; set; }

View File

@ -5,7 +5,7 @@
<package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net462" />
<package id="Microsoft.AspNet.WebPages" version="3.2.3" 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.Driver" version="2.2.4" targetFramework="net462" />
<package id="MongoDB.Driver.Core" version="2.2.4" targetFramework="net462" />
<package id="MongoDB.Bson" version="2.3.0" targetFramework="net462" />
<package id="MongoDB.Driver" version="2.3.0" targetFramework="net462" />
<package id="MongoDB.Driver.Core" version="2.3.0" targetFramework="net462" />
</packages>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
<Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.2\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.2\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
<Import Project="..\packages\Microsoft.Net.Compilers.1.3.2\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.3.2\build\Microsoft.Net.Compilers.props')" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props" Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
@ -97,8 +97,8 @@
<HintPath>..\packages\Microsoft.ApplicationInsights.2.1.0\lib\net46\Microsoft.ApplicationInsights.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll</HintPath>
<Reference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.2\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.CSharp" />
@ -106,16 +106,16 @@
<HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="MongoDB.Bson, Version=2.2.4.26, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MongoDB.Bson.2.2.4\lib\net45\MongoDB.Bson.dll</HintPath>
<Reference Include="MongoDB.Bson, Version=2.3.0.157, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MongoDB.Bson.2.3.0\lib\net45\MongoDB.Bson.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="MongoDB.Driver, Version=2.2.4.26, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MongoDB.Driver.2.2.4\lib\net45\MongoDB.Driver.dll</HintPath>
<Reference Include="MongoDB.Driver, Version=2.3.0.157, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MongoDB.Driver.2.3.0\lib\net45\MongoDB.Driver.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="MongoDB.Driver.Core, Version=2.2.4.26, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MongoDB.Driver.Core.2.2.4\lib\net45\MongoDB.Driver.Core.dll</HintPath>
<Reference Include="MongoDB.Driver.Core, Version=2.3.0.157, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MongoDB.Driver.Core.2.3.0\lib\net45\MongoDB.Driver.Core.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
@ -499,7 +499,7 @@
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Microsoft.Net.Compilers.1.3.2\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Net.Compilers.1.3.2\build\Microsoft.Net.Compilers.props'))" />
<Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />
<Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.2\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.2\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />
</Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

View File

@ -31,7 +31,7 @@ public class Locale
new Locale("pl"),
new Locale("pt"),
new Locale("pt-br"),
new Locale("qps-ploc"),
//new Locale("qps-ploc"),
new Locale("ro"),
new Locale("ru"),
new Locale("sk"),

View File

@ -344,6 +344,13 @@ interface JQueryPromise<T> extends JQueryGenericPromise<T> {
// Deprecated - given no typings
pipe(doneFilter?: (x: any) => any, failFilter?: (x: any) => any, progressFilter?: (x: any) => any): JQueryPromise<any>;
/**
* Return a Deferred's Promise object.
*
* @param target Object onto which the promise methods have to be attached
*/
promise(target?: any): JQueryPromise<T>;
}
/**
@ -2780,8 +2787,9 @@ interface JQuery {
/**
* Retrieve all the elements contained in the jQuery set, as an array.
* @name toArray
*/
toArray(): any[];
toArray(): HTMLElement[];
/**
* Remove the parents of the set of matched elements from the DOM, leaving the matched elements in their place.
@ -2837,8 +2845,9 @@ interface JQuery {
get(index: number): HTMLElement;
/**
* Retrieve the elements matched by the jQuery object.
* @alias toArray
*/
get(): any[];
get(): HTMLElement[];
/**
* Search for a given element from among the matched elements.

View File

@ -2,7 +2,7 @@
@using BuildFeed.Controllers
@using BuildFeed.Model.View
@using Humanizer
@model IEnumerable<FrontBuildGroup>
@model IEnumerable<BuildFeed.Model.View.FrontBuildGroup>
@{
ViewBag.Title = $"{string.Format(VariantTerms.Front_HomepageH1, InvariantTerms.ProductName)} {string.Format(VariantTerms.Common_TitlePage, (int)ViewBag.PageNumber)} | {InvariantTerms.SiteName}";
}
@ -52,5 +52,7 @@
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
</div>
@PaginationHelpers.PaginationBlock((int)ViewBag.PageNumber, (int)ViewBag.PageCount, nameof(FrontController.Index), ViewContext.RouteData.Values)

View File

@ -1,9 +1,9 @@
@using BuildFeed.Model
@model Build
@model BuildFeed.Model.Build
@{
ViewBag.Title = (string)ViewContext.RouteData.Values["action"] == "addBuild"
? $"{VariantTerms.Common_AddBuild} | {InvariantTerms.SiteName}"
: $"{VariantTerms.Front_EditBuild} {Model.FullBuildString} | {InvariantTerms.SiteName}";
? $"{VariantTerms.Common_AddBuild} | {InvariantTerms.SiteName}"
: $"{VariantTerms.Front_EditBuild} {Model.FullBuildString} | {InvariantTerms.SiteName}";
Html.EnableClientValidation();
Html.EnableUnobtrusiveJavaScript();
}
@ -149,8 +149,7 @@ else
? VariantTerms.Common_AddBuild
: VariantTerms.Front_EditBuild)" class="btn btn-primary" />
&ensp;
<a href="/" onclick="window.history
.back(); return false;" class="button">
<a href="/" onclick="window.history.back();return false;" class="button">
@VariantTerms.Front_ReturnToListing</a>
</div>
</div>
@ -167,9 +166,11 @@ else
<script src="~/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>
<script type="text/javascript">
jQuery(function($) {
jQuery(function($)
{
$.validator.addMethod('date',
function(value, element) {
function(value, element)
{
if (this.optional(element))
{
return true;
@ -188,7 +189,8 @@ else
});
});
$(function() {
$(function()
{
var btnsGrps = $.trumbowyg.btnsGrps;
$("#@Html.IdFor(model => model.SourceDetails)")
@ -207,7 +209,8 @@ else
$(".trumbowyg").addClass("trumbowyg-black");
$("#quickpaste")
.change(function() {
.change(function()
{
var regex =
/(([\d]{1,2})\.([\d]{1,2})\.)?([\d]{4,5})(\.([\d]{1,5}))?\.([a-zA-Z0-9._\(\)-]+?)\.(\d\d\d\d\d\d-\d\d\d\d)/;
var result = regex.exec($("#quickpaste").val());

View File

@ -14,9 +14,9 @@
@if (Model.CurrentCanary != null)
{
<a href="@Url.Action("ViewBuild", new
{
Model.CurrentCanary.Id
})" class="latest-flex-item latest-flex-red">
{
Model.CurrentCanary.Id
})" class="latest-flex-item latest-flex-red">
<h3 class="latest-flex-title">@VariantTerms.Front_CurrentCanary</h3>
<div class="latest-flex-detail">
<p class="latest-flex-build">@(Model.CurrentCanary.MajorVersion).@(Model.CurrentCanary.MinorVersion).@(Model.CurrentCanary.Number).@(Model.CurrentCanary.Revision)</p>

View File

@ -22,8 +22,8 @@
})">
@{
string metaDesc = Model.BuildTime.HasValue
? string.Format(VariantTerms.Meta_BuildDate, Model.Number, Model.Lab, Model.BuildTime.Value.ToLongDateWithoutDay())
: string.Format(VariantTerms.Meta_BuildNoDate, Model.Number, Model.Lab);
? string.Format(VariantTerms.Meta_BuildDate, Model.Number, Model.Lab, Model.BuildTime.Value.ToLongDateWithoutDay())
: string.Format(VariantTerms.Meta_BuildNoDate, Model.Number, Model.Lab);
}
<meta name="description" content="@metaDesc" />
<meta property="og:description" content="@metaDesc" />
@ -105,9 +105,9 @@
<div class="build-details-flex-value">
@Html.DisplayFor(model => model.SourceType, "Enumeration")<br />
<a href="@Url.Action("ViewSource", new
{
source = Model.SourceType
})" class="more-link">
{
source = Model.SourceType
})" class="more-link">
<i class="fa fa-plus-square-o fa-sm"></i>&nbsp;
@string.Format(VariantTerms.Front_MoreFromSource, MvcExtensions.GetDisplayTextForEnum(Model.SourceType))
</a>
@ -165,7 +165,8 @@
var disqus_shortname = 'buildfeed';
var disqus_url = 'https://buildfeed.net/actions/info/@((object)Model.LegacyId ?? Model.Id)/';
(function () {
(function()
{
var dsq = document.createElement('script');
dsq.type = 'text/javascript';
dsq.async = true;

View File

@ -64,4 +64,9 @@
}
</div>
}
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
</div>

View File

@ -1,11 +1,11 @@
@using BuildFeed.Code
@using BuildFeed.Model
@using Humanizer
@model IEnumerable<Build>
@model IEnumerable<BuildFeed.Model.Build>
@{
ViewBag.Title = string.Format("{0}{1} | {2}", string.Format(VariantTerms.Front_BuildsFrom, ViewBag.ItemId), ViewBag.PageNumber == 1
? ""
: string.Format(VariantTerms.Common_TitlePage, ViewBag.PageNumber), InvariantTerms.SiteName);
? ""
: string.Format(VariantTerms.Common_TitlePage, ViewBag.PageNumber), InvariantTerms.SiteName);
}
@section head
@ -29,7 +29,7 @@
}
<h1 class="eager-wrapping">@string.Format(VariantTerms.Front_BuildsFrom, ViewBag.ItemId)</h1>
@if (ViewBag.MetaItem != null && !string.IsNullOrWhiteSpace(ViewBag.MetaItem.PageContent))
@if ((ViewBag.MetaItem != null) && !string.IsNullOrWhiteSpace(ViewBag.MetaItem.PageContent))
{
<h3>@VariantTerms.Front_About</h3>
@Html.Raw(ViewBag.MetaItem.PageContent)
@ -92,5 +92,7 @@
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
</div>
@PaginationHelpers.PaginationBlock((int)ViewBag.PageNumber, (int)ViewBag.PageCount, "viewLab", ViewContext.RouteData.Values)

View File

@ -1,11 +1,11 @@
@using BuildFeed.Code
@using BuildFeed.Model
@using Humanizer
@model IEnumerable<Build>
@model IEnumerable<BuildFeed.Model.Build>
@{
ViewBag.Title = string.Format("{0}{1} | {2}", ViewBag.ItemId, ViewBag.PageNumber == 1
? ""
: string.Format(VariantTerms.Common_TitlePage, ViewBag.PageNumber), InvariantTerms.SiteName);
? ""
: string.Format(VariantTerms.Common_TitlePage, ViewBag.PageNumber), InvariantTerms.SiteName);
}
@section head
@ -23,7 +23,7 @@
}
<h1>@ViewBag.ItemId</h1>
@if (ViewBag.MetaItem != null && !string.IsNullOrWhiteSpace(ViewBag.MetaItem.PageContent))
@if ((ViewBag.MetaItem != null) && !string.IsNullOrWhiteSpace(ViewBag.MetaItem.PageContent))
{
<h3>@VariantTerms.Front_About</h3>
@Html.Raw(ViewBag.MetaItem.PageContent)
@ -88,5 +88,10 @@
</p>
</div>
}
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
</div>
@PaginationHelpers.PaginationBlock((int)ViewBag.PageNumber, (int)ViewBag.PageCount, "viewSource", ViewContext.RouteData.Values)

View File

@ -1,9 +1,9 @@
@using BuildFeed.Code
@using BuildFeed.Model
@using Humanizer
@model IEnumerable<Build>
@model IEnumerable<BuildFeed.Model.Build>
@{
ViewBag.Title = $"{InvariantTerms.ProductName} {ViewBag.ItemId}{(ViewBag.PageNumber == 1 ? "" : string.Format(VariantTerms.Common_TitlePage, ViewBag.PageNumber))} | {InvariantTerms.SiteName}";
ViewBag.Title = $"{InvariantTerms.ProductName} {ViewBag.ItemId} {(ViewBag.PageNumber == 1 ? "" : string.Format(VariantTerms.Common_TitlePage, ViewBag.PageNumber))} | {InvariantTerms.SiteName}";
}
@section head
@ -21,7 +21,7 @@
}
<h1>@string.Format("{0} {1}", InvariantTerms.ProductName, ViewBag.ItemId)</h1>
@if (ViewBag.MetaItem != null
@if ((ViewBag.MetaItem != null)
&& !string.IsNullOrWhiteSpace(ViewBag.MetaItem.PageContent))
{
<h3>@VariantTerms.Front_About</h3>
@ -89,5 +89,10 @@
</p>
</div>
}
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
</div>
@PaginationHelpers.PaginationBlock((int)ViewBag.PageNumber, (int)ViewBag.PageCount, "viewVersion", ViewContext.RouteData.Values)

View File

@ -1,11 +1,11 @@
@using BuildFeed.Code
@using BuildFeed.Model
@using Humanizer
@model IEnumerable<Build>
@model IEnumerable<BuildFeed.Model.Build>
@{
ViewBag.Title = string.Format("{0}{1} | {2}", string.Format(VariantTerms.Front_BuildsFrom, ViewBag.ItemId), ViewBag.PageNumber == 1
? ""
: string.Format(VariantTerms.Common_TitlePage, ViewBag.PageNumber), InvariantTerms.SiteName);
? ""
: string.Format(VariantTerms.Common_TitlePage, ViewBag.PageNumber), InvariantTerms.SiteName);
}
@section head
@ -29,7 +29,7 @@
}
<h1>@string.Format(VariantTerms.Front_BuildsFrom, ViewBag.ItemId)</h1>
@if (ViewBag.MetaItem != null && !string.IsNullOrWhiteSpace(ViewBag.MetaItem.PageContent))
@if ((ViewBag.MetaItem != null) && !string.IsNullOrWhiteSpace(ViewBag.MetaItem.PageContent))
{
<h3>@VariantTerms.Front_About</h3>
@Html.Raw(ViewBag.MetaItem.PageContent)
@ -97,5 +97,7 @@
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
</div>
@PaginationHelpers.PaginationBlock((int)ViewBag.PageNumber, (int)ViewBag.PageCount, "viewYear", ViewContext.RouteData.Values)

View File

@ -1,6 +1,4 @@
@using System.ComponentModel.DataAnnotations
@using BuildFeed.Code
@using BuildFeed.Code
@model Enum
@MvcExtensions.GetDisplayTextForEnum(ViewData.Model)

View File

@ -23,14 +23,14 @@
<meta name="format-detection" content="telephone=no" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,700" rel="stylesheet" type="text/css" />
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" type="text/css" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous" />
<link rel="shortcut icon" href="~/favicon.ico" />
<link rel="icon" href="~/favicon.ico" />
<link rel="canonical" href="@Url.Action()" />
<meta name="application-name" content="@InvariantTerms.SiteName" />
<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)
{
<link href="/res/css/rtl.css" rel="stylesheet" type="text/css" />
@ -38,18 +38,18 @@
<title>@ViewBag.Title</title>
@RenderSection("head", false)
<script type="text/javascript">
var appInsights = window.appInsights || function (config) {
function r(config) { t[config] = function () { var i = arguments; t.queue.push(function () { t[config].apply(t, i) }) } } var t = { config: config }, u = document, e = window, o = "script", s = u.createElement(o), i, f; for (s.src = config.url || "//az416426.vo.msecnd.net/scripts/a/ai.0.js", u.getElementsByTagName(o)[0].parentNode.appendChild(s), t.cookie = u.cookie, t.queue = [], i = ["Event", "Exception", "Metric", "PageView", "Trace"]; i.length;) r("track" + i.pop()); return r("setAuthenticatedUserContext"), r("clearAuthenticatedUserContext"), config.disableExceptionTracking || (i = "onerror", r("_" + i), f = e[i], e[i] = function (config, r, u, e, o) { var s = f && f(config, r, u, e, o); return s !== !0 && t["_" + i](config, r, u, e, o), s }), t
}({
instrumentationKey: "4632419f-7a2f-4ab5-8374-34384b650f42"
});
var appInsights = window.appInsights || function (config) {
function r(config) { t[config] = function () { var i = arguments; t.queue.push(function () { t[config].apply(t, i) }) } } var t = { config: config }, u = document, e = window, o = "script", s = u.createElement(o), i, f; for (s.src = config.url || "//az416426.vo.msecnd.net/scripts/a/ai.0.js", u.getElementsByTagName(o)[0].parentNode.appendChild(s), t.cookie = u.cookie, t.queue = [], i = ["Event", "Exception", "Metric", "PageView", "Trace"]; i.length;) r("track" + i.pop()); return r("setAuthenticatedUserContext"), r("clearAuthenticatedUserContext"), config.disableExceptionTracking || (i = "onerror", r("_" + i), f = e[i], e[i] = function (config, r, u, e, o) { var s = f && f(config, r, u, e, o); return s !== !0 && t["_" + i](config, r, u, e, o), s }), t
}({
instrumentationKey: "4632419f-7a2f-4ab5-8374-34384b650f42"
});
window.appInsights = appInsights;
appInsights.trackPageView();
window.appInsights = appInsights;
appInsights.trackPageView();
</script>
</head>
<body>
<script>
<script>
(function (i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () {
(i[r].q = i[r].q || []).push(arguments)
@ -57,187 +57,193 @@
m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', 'UA-55417692-1', 'auto');
ga('require', 'displayfeatures');
ga('require', 'linkid', 'linkid.js');
ga('send', 'pageview');
</script>
<header id="page-header">
<div class="container">
<h1>
@Html.ActionLink(InvariantTerms.SiteName, nameof(FrontController.Index), new
{
controller = "Front",
area = ""
})
</h1>
</div>
</header>
<nav id="page-navigation" role="navigation">
<div class="container">
<button id="page-navigation-toggle">
<i class="fa fa-bars"></i>&ensp;@VariantTerms.Common_ToggleNavigation
</button>
<ul id="page-navigation-links">
@if (!User.Identity.IsAuthenticated)
{
<li>
<a href="@Url.Action(nameof(SupportController.Login), new
ga('create', 'UA-55417692-1', 'auto');
ga('require', 'displayfeatures');
ga('require', 'linkid', 'linkid.js');
ga('send', 'pageview');
</script>
<header id="page-header">
<div class="container">
<h1>
@Html.ActionLink(InvariantTerms.SiteName, nameof(FrontController.Index), new
{
controller = "Front",
area = ""
})
</h1>
</div>
</header>
<nav id="page-navigation" role="navigation">
<div class="container">
<button id="page-navigation-toggle">
<i class="fa fa-bars"></i>&ensp;@VariantTerms.Common_ToggleNavigation
</button>
<ul id="page-navigation-links">
@if (!User.Identity.IsAuthenticated)
{
<li>
<a href="@Url.Action(nameof(SupportController.Login), new
{
controller = "Support",
area = ""
})" title="@VariantTerms.Common_LogIn">
<i class="fa fa-fw fa-user"></i> @VariantTerms.Common_LogIn
</a>
</li>
}
else
<i class="fa fa-fw fa-user"></i> @VariantTerms.Common_LogIn
</a>
</li>
}
else
{
if (Roles.IsUserInRole("Administrators"))
{
if (Roles.IsUserInRole("Administrators"))
{
<li>
<a href="@Url.Action("index", new
<li>
<a href="@Url.Action("index", new
{
controller = "base",
area = "admin"
})" title="@VariantTerms.Common_Admin">
<i class="fa fa-fw fa-cogs"></i> @VariantTerms.Common_Admin
</a>
</li>
}
<li>
<a href="@Url.Action(nameof(FrontController.AddBuild), new
{
controller = "Front",
area = ""
})" title="@VariantTerms.Common_AddBuild">
<i class="fa fa-fw fa-plus-square"></i> @VariantTerms.Common_AddBuild
</a>
</li>
<li>
<a href="@Url.Action(nameof(SupportController.Logout), new
{
controller = "Support",
area = ""
})" title="@VariantTerms.Common_LogOut">
<i class="fa fa-fw fa-user"></i> @VariantTerms.Common_LogOut
<i class="fa fa-fw fa-cogs"></i> @VariantTerms.Common_Admin
</a>
</li>
}
<li>
<a href="#" id="page-navigation-search" title="@VariantTerms.Search_Title">
<i class="fa fa-fw fa-search"></i> @VariantTerms.Search_Title
<a href="@Url.Action(nameof(FrontController.AddBuild), new
{
controller = "Front",
area = ""
})" title="@VariantTerms.Common_AddBuild">
<i class="fa fa-fw fa-plus-square"></i> @VariantTerms.Common_AddBuild
</a>
</li>
<li>
<a href="@Url.Action(nameof(SupportController.Rss), new
<a href="@Url.Action(nameof(SupportController.Logout), new
{
controller = "Support",
area = ""
})" title="@VariantTerms.Common_LogOut">
<i class="fa fa-fw fa-user"></i> @VariantTerms.Common_LogOut
</a>
</li>
}
<li>
<a href="#" id="page-navigation-search" title="@VariantTerms.Search_Title">
<i class="fa fa-fw fa-search"></i> @VariantTerms.Search_Title
</a>
</li>
<li>
<a href="@Url.Action(nameof(SupportController.Rss), new
{
controller = "Support",
area = ""
})" title="@VariantTerms.Common_RssFeeds">
<i class="fa fa-fw fa-rss"></i> @VariantTerms.Common_RssFeeds
</a>
</li>
<li>
<a href="https://twitter.com/buildfeed" title="@VariantTerms.Common_Twitter" target="_blank">
<i class="fa fa-fw fa-twitter"></i> @VariantTerms.Common_Twitter
</a>
</li>
<li class="dropdown-parent">
<a href="#">
<i class="fa fa-gear"></i>
</a>
<ul class="dropdown-menu">
<li id="settings-theme-menu" class="dropdown-menu-block">
<h4>@VariantTerms.Common_NavigationTheme</h4>
<ul>
@foreach (Theme item in Theme.AvailableThemes)
{
<li>
<a href="#" data-theme="@item.CookieValue">@item.DisplayName</a>
</li>
}
</ul>
</li>
<li id="settings-lang-menu" class="dropdown-menu-block">
<h4>@VariantTerms.Common_NavigationLanguage</h4>
<ul>
@foreach (Locale locale in Locale.AvailableLocales)
{
<li>
<a href="#" data-lang="@locale.LocaleId" dir="@(locale.Info.TextInfo.IsRightToLeft ? "rtl" : "ltr")">@locale.DisplayName</a>
</li>
}
</ul>
</li>
</ul>
</li>
</ul>
</div>
</nav>
<article id="page-content">
<div class="container">
@RenderBody()
</div>
</article>
<footer id="page-footer">
<div class="container">
<div class="footer-flex">
<div class="footer-flex-item">
<i class="fa fa-fw fa-rss"></i> @VariantTerms.Common_RssFeeds
</a>
</li>
<li>
<a href="https://twitter.com/buildfeed" title="@VariantTerms.Common_Twitter" target="_blank">
<i class="fa fa-fw fa-twitter"></i> @VariantTerms.Common_Twitter
</a>
</li>
<li class="dropdown-parent">
<a href="#">
<i class="fa fa-gear"></i>
</a>
<ul class="dropdown-menu">
<li id="settings-theme-menu" class="dropdown-menu-block">
<h4>@VariantTerms.Common_NavigationTheme</h4>
<ul>
@foreach (Theme item in Theme.AvailableThemes)
{
<li>
<a href="#" data-theme="@item.CookieValue">@item.DisplayName</a>
</li>
}
</ul>
</li>
<li id="settings-lang-menu" class="dropdown-menu-block">
<h4>@VariantTerms.Common_NavigationLanguage</h4>
<ul>
@foreach (Locale locale in Locale.AvailableLocales)
{
<li>
<a href="#" data-lang="@locale.LocaleId" dir="@(locale.Info.TextInfo.IsRightToLeft
? "rtl"
: "ltr")">
@locale.DisplayName</a>
</li>
}
</ul>
</li>
</ul>
</li>
</ul>
</div>
</nav>
<article id="page-content">
<div class="container">
@RenderBody()
</div>
</article>
<footer id="page-footer">
<div class="container">
<div class="footer-flex">
<div class="footer-flex-item">
<p>
<a href="@Url.Action(nameof(SupportController.Sitemap), new
{
controller = "Support",
area = ""
})">@VariantTerms.Common_Sitemap</a>
</p>
<p>
<i class="fa fa-language"></i>&ensp;
@CultureInfo.CurrentUICulture.NativeName
(<a href="@Url.Action(nameof(SupportController.Credits), new
{
controller = "Support",
area = ""
})">
@VariantTerms.Common_Credits
</a>)
</p>
</div>
<div class="footer-flex-item">
<p>
&copy; 2013 - @DateTime.Now.Year.ToString(), <span dir="ltr">@InvariantTerms.SiteName</span>
</p>
<p>
@Html.Raw(string.Format(VariantTerms.Common_DevelopedBy, $"<a href=\"https://twitter.com/tomhounsell\" target=\"_blank\" dir=\"ltr\">{InvariantTerms.DeveloperName}</a>"))
</p>
<p>
@Html.Raw(string.Format(VariantTerms.Common_ContributeOn, "<a href=\"https://github.com/hounsell/BuildFeed\" target=\"_blank\" dir=\"ltr\"><i class=\"fa fa-github\"></i>&ensp;GitHub</a>"))
</p>
</div>
@VariantTerms.Common_Sitemap</a>
</p>
<p>
<i class="fa fa-language"></i>&ensp;
@CultureInfo.CurrentUICulture.NativeName
(<a href="@Url.Action(nameof(SupportController.Credits), new
{
controller = "Support",
area = ""
})">
@VariantTerms.Common_Credits
</a>)
</p>
</div>
</div>
</footer>
<div id="modal-search-overlay">
<div id="modal-search">
<h3>@VariantTerms.Search_BuildFeed</h3>
<div id="modal-search-box">
<input id="modal-search-input" type="text" placeholder="@VariantTerms.Search_TypePlaceholder" />
<button id="modal-search-button"><i class="fa fa-search"></i></button>
<div class="footer-flex-item">
<p>
&copy; 2013 - @DateTime.Now.Year.ToString(), <span dir="ltr">@InvariantTerms.SiteName</span>
</p>
<p>
@Html.Raw(string.Format(VariantTerms.Common_DevelopedBy, $"<a href=\"https://twitter.com/tomhounsell\" target=\"_blank\" dir=\"ltr\">{InvariantTerms.DeveloperName}</a>"))
</p>
<p>
@Html.Raw(string.Format(VariantTerms.Common_ContributeOn, "<a href=\"https://github.com/hounsell/BuildFeed\" target=\"_blank\" dir=\"ltr\"><i class=\"fa fa-github\"></i>&ensp;GitHub</a>"))
</p>
</div>
<div id="modal-search-result"></div>
</div>
</div>
</footer>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jsrender/1.0.0-rc.70/jsrender.min.js"></script>
<script type="text/javascript" src="/res/ts/bfs.min.js"></script>
@RenderSection("scripts", false)
<script id="result-template" type="text/x-jsrender">
<a href="{{:Url}}" class="search-result-item" title="{{:Title}}">
<h4 class="search-result-heading no-wrapping">{{:Label}}</h4>
<p class="search-result-text">{{:Group}}</p>
</a>
</script>
<script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=ra-5431719a661cbfd0" async="async"></script>
<div id="modal-search-overlay">
<div id="modal-search">
<h3>@VariantTerms.Search_BuildFeed</h3>
<div id="modal-search-box">
<input id="modal-search-input" type="text" placeholder="@VariantTerms.Search_TypePlaceholder" />
<button id="modal-search-button">
<i class="fa fa-search"></i>
</button>
</div>
<div id="modal-search-result"></div>
</div>
</div>
<script type="text/javascript" t src="https://cdnjs.cloudflare.com/ajax/libs/jsrender/1.0.0-rc.70/jsrender.min.js" integrity="sha256-3UBtL0tzgKVuJU8ZZiWLXEWGEjXEr6Z023rpauMnBUE=" crossorigin="anonymous"></script>
<script type="text/javascript" src="/res/ts/bfs.min.js"></script>
@RenderSection("scripts", false)
<script id="result-template" type="text/x-jsrender">
<a href="{{:Url}}" class="search-result-item" title="{{:Title}}">
<h4 class="search-result-heading no-wrapping">{{:Label}}</h4>
<p class="search-result-text">{{:Group}}</p>
</a>
</script>
<script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=ra-5431719a661cbfd0" async="async"></script>
</body>
</html>

View File

@ -15,13 +15,13 @@
<meta name="format-detection" content="telephone=no" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,700" rel="stylesheet" type="text/css" />
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" type="text/css" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous" />
<link rel="shortcut icon" href="~/favicon.ico" />
<link rel="icon" href="~/favicon.ico" />
<meta name="application-name" content="@InvariantTerms.SiteName" />
<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)
{
<link href="/res/css/rtl.css" rel="stylesheet" type="text/css" />
@ -56,10 +56,10 @@
<div class="container">
<h1>
@Html.ActionLink(InvariantTerms.SiteName, nameof(FrontController.Index), new
{
controller = "Front",
area = ""
})
{
controller = "Front",
area = ""
})
</h1>
</div>
</header>
@ -96,7 +96,10 @@
@foreach (Locale locale in Locale.AvailableLocales)
{
<li>
<a href="#" data-lang="@locale.LocaleId" dir="@(locale.Info.TextInfo.IsRightToLeft ? "rtl" : "ltr")">@locale.DisplayName</a>
<a href="#" data-lang="@locale.LocaleId" dir="@(locale.Info.TextInfo.IsRightToLeft
? "rtl"
: "ltr")">
@locale.DisplayName</a>
</li>
}
</ul>
@ -112,9 +115,15 @@
<p>
@string.Format(VariantTerms.Common_ErrorContent, "<a href=\"https://github.com/hounsell/BuildFeed/issues\">GitHub</a>")
</p>
<p>Controller: <code>@Model.ControllerName</code></p>
<p>Action: <code>@Model.ActionName</code></p>
<p>Error: <code>@Model.Exception.Message</code></p>
<p>
Controller: <code>@Model.ControllerName</code>
</p>
<p>
Action: <code>@Model.ActionName</code>
</p>
<p>
Error: <code>@Model.Exception.Message</code>
</p>
</div>
</article>
<footer id="page-footer">
@ -140,9 +149,8 @@
</div>
</div>
</footer>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jsrender/1.0.0-rc.70/jsrender.min.js"></script>
<script type="text/javascript"t src="https://cdnjs.cloudflare.com/ajax/libs/jsrender/1.0.0-rc.70/jsrender.min.js" integrity="sha256-3UBtL0tzgKVuJU8ZZiWLXEWGEjXEr6Z023rpauMnBUE=" crossorigin="anonymous"></script>
<script type="text/javascript" src="~/res/ts/bfs.min.js"></script>
@RenderSection("scripts", false)
</body>
</html>
</html>

View File

@ -62,8 +62,8 @@
<dd>OBattler</dd>
<dt>Portugese - Brazilian (@System.Globalization.CultureInfo.GetCultureInfo("pt-br").NativeName) Translation</dt>
<dd>RichardG</dd>
<dt>Pseudo-localisation (@System.Globalization.CultureInfo.GetCultureInfo("qps-ploc").NativeName) Translation</dt>
<dd>Thomas Hounsell, with&ensp;<a target="_blank" rel="nofollow" href="http://www.pseudolocalize.com/"><i class="fa fa-globe"></i> Pseudolocalize!</a></dd>
@*<dt>Pseudo-localisation (@System.Globalization.CultureInfo.GetCultureInfo("qps-ploc").NativeName) Translation</dt>
<dd>Thomas Hounsell, with&ensp;<a target="_blank" rel="nofollow" href="http://www.pseudolocalize.com/"><i class="fa fa-globe"></i> Pseudolocalize!</a></dd>*@
<dt>Romanian (@System.Globalization.CultureInfo.GetCultureInfo("ro").NativeName) Translation</dt>
<dd>ovctvct&ensp;<a target="_blank" rel="nofollow" href="https://www.youtube.com/channel/UC9AC01rKiwDhVPvAsT93rjw"><i class="fa fa-youtube"></i></a></dd>
<dt>Russian (@System.Globalization.CultureInfo.GetCultureInfo("ru").NativeName) Translation</dt>

View File

@ -150,8 +150,8 @@
</runtime>
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
</compilers>
</system.codedom>
</configuration>

View File

@ -1,80 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="google.analytics.TypeScript.DefinitelyTyped" version="0.3.8" targetFramework="net462" />
<package id="HtmlAgilityPack" version="1.4.9.5" 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.af" 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.bn-BD" 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.de" 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.fa" 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-BE" 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.hu" 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.ja" 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.nl" 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.ro" 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.sl" 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.sv" 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.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.vi" 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-Hant" version="2.1.0" 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.Validation" version="1.15.1" targetFramework="net462" />
<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.Agent.Intercept" version="2.0.1" 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.Web" 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.AspNet.Mvc" version="5.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.Client" 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.WebPages" version="3.2.3" 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.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.Web.Infrastructure" version="1.0.0.0" 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.Core" version="2.2.4" 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.Linq" 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.Xml.XDocument" version="4.0.11" targetFramework="net462" />
<package id="WilderMinds.RssSyndication" version="1.0.4" 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="Humanizer" 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.ar" 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.cs" 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.el" 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.fi-FI" 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.he" 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.id" 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.nb" 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.pl" 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.ru" 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.sr" 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.tr" 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-Latn-UZ" 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-Hans" 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.TypeScript.DefinitelyTyped" version="3.1.2" 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="Microsoft.ApplicationInsights" version="2.1.0" 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.PerfCounterCollector" 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.TelemetryChannel" version="2.1.0" targetFramework="net461" />
<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.WebApi" 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.WebHost" version="5.2.3" targetFramework="net462" />
<package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net462" />
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.2" 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.Net.Compilers" version="1.3.2" targetFramework="net462" developmentDependency="true" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net462" />
<package id="MongoDB.Bson" version="2.3.0" targetFramework="net462" />
<package id="MongoDB.Driver" version="2.3.0" targetFramework="net462" />
<package id="MongoDB.Driver.Core" version="2.3.0" 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.Linq" 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.Xml.XDocument" version="4.0.11" targetFramework="net462" />
<package id="WilderMinds.RssSyndication" version="1.0.4" targetFramework="net462" />
</packages>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -194,7 +194,7 @@ nav#page-navigation
position: absolute;
left: -15px;
right: -15px;
max-width: 1240px;
max-width: 1270px;
padding: 15px;
text-align: left;
z-index: 10;
@ -613,6 +613,7 @@ ul.pagination
{
display: block;
border-radius: 0.5em;
text-decoration: none;
}
> span