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

View File

@ -18,13 +18,13 @@ public class MongoMembershipProvider : MembershipProvider
private bool _enablePasswordReset = true; private bool _enablePasswordReset = true;
private int _maxInvalidPasswordAttempts = 5; private int _maxInvalidPasswordAttempts = 5;
private IMongoCollection<MongoMember> _memberCollection;
private int _minRequiredNonAlphanumericCharacters = 1; private int _minRequiredNonAlphanumericCharacters = 1;
private int _minRequriedPasswordLength = 12; private int _minRequriedPasswordLength = 12;
private int _passwordAttemptWindow = 60; private int _passwordAttemptWindow = 60;
private bool _requiresUniqueEmail = true; private bool _requiresUniqueEmail = true;
private IMongoCollection<MongoMember> _memberCollection;
public override string ApplicationName { get; set; } public override string ApplicationName { get; set; }
public override bool EnablePasswordReset => _enablePasswordReset; public override bool EnablePasswordReset => _enablePasswordReset;
@ -97,7 +97,7 @@ public override bool ChangePassword(string username, string oldPassword, string
return false; return false;
} }
byte[] salt = new byte[24]; var salt = new byte[24];
byte[] hash = CalculateHash(newPassword, ref salt); byte[] hash = CalculateHash(newPassword, ref salt);
mm.PassSalt = salt; mm.PassSalt = salt;
@ -112,7 +112,10 @@ public override bool ChangePassword(string username, string oldPassword, string
return false; 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) 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 else
{ {
byte[] salt = new byte[24]; var salt = new byte[24];
byte[] hash = CalculateHash(password, ref salt); byte[] hash = CalculateHash(password, ref salt);
MongoMember mm = new MongoMember 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<DeleteResult> task = _memberCollection.DeleteOneAsync(m => m.UserName.ToLower() == username.ToLower());
task.Wait(); 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) 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; 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) public override MembershipUser GetUser(string username, bool userIsOnline)
{ {
@ -244,7 +259,10 @@ public override string GetUserNameByEmail(string email)
return task.Result.UserName; 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) 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) public void ChangeLockStatus(Guid id, bool newStatus)
{ {
List<UpdateDefinition<MongoMember>> updateDefinition = new List<UpdateDefinition<MongoMember>>(); var updateDefinition = new List<UpdateDefinition<MongoMember>>
updateDefinition.Add(Builders<MongoMember>.Update.Set(u => u.IsLockedOut, newStatus)); {
Builders<MongoMember>.Update.Set(u => u.IsLockedOut, newStatus)
};
if (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<UpdateResult> task = _memberCollection.UpdateOneAsync(Builders<MongoMember>.Filter.Eq(m => m.UserName.ToLower(), userName.ToLower()), Builders<MongoMember>.Update.Set(m => m.IsLockedOut, false));
task.Wait(); 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) public override bool ValidateUser(string username, string password)
{ {
@ -287,7 +310,7 @@ public override bool ValidateUser(string username, string password)
task.Wait(); task.Wait();
MongoMember mm = task.Result; MongoMember mm = task.Result;
if (mm == null if ((mm == null)
|| !(mm.IsApproved && !mm.IsLockedOut)) || !(mm.IsApproved && !mm.IsLockedOut))
{ {
return false; return false;
@ -353,7 +376,7 @@ private static byte[] CalculateHash(string password, ref byte[] salt)
byte[] passwordBytes = Encoding.UTF8.GetBytes(password); 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); passwordBytes.CopyTo(hashPlaintext, 0);
salt.CopyTo(hashPlaintext, passwordBytes.Length); 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 MEMBER_COLLECTION_NAME = "members";
private const string ROLE_COLLECTION_NAME = "roles"; private const string ROLE_COLLECTION_NAME = "roles";
private IMongoCollection<MongoRole> _roleCollection;
private IMongoCollection<MongoMember> _memberCollection; private IMongoCollection<MongoMember> _memberCollection;
private IMongoCollection<MongoRole> _roleCollection;
public override string ApplicationName public override string ApplicationName
{ {
@ -61,7 +61,7 @@ public override void AddUsersToRoles(string[] usernames, string[] roleNames)
for (int i = 0; i < roles.Count; i++) for (int i = 0; i < roles.Count; i++)
{ {
List<Guid> newUsers = new List<Guid>(); var newUsers = new List<Guid>();
if (roles[i].Users != null) 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(); Task<MongoRole> role = _roleCollection.Find(r => r.RoleName == roleName).SingleOrDefaultAsync();
role.Wait(); role.Wait();
if (role.Result != null if ((role.Result != null)
&& role.Result.Users.Length > 0 && (role.Result.Users.Length > 0)
&& throwOnPopulatedRole) && throwOnPopulatedRole)
{ {
throw new ProviderException(Resources.RoleNotEmpty); throw new ProviderException(Resources.RoleNotEmpty);
@ -145,7 +145,7 @@ public override string[] GetRolesForUser(string username)
return Array.Empty<string>(); 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(); role.Wait();
return role.Result.Select(r => r.RoleName).ToArray(); return role.Result.Select(r => r.RoleName).ToArray();
@ -174,8 +174,8 @@ public override bool IsUserInRole(string username, string roleName)
user.Wait(); user.Wait();
role.Wait(); role.Wait();
if (user.Result == null if ((user.Result == null)
|| role.Result?.Users == null) || (role.Result?.Users == null))
{ {
return false; return false;
} }

View File

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

View File

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

View File

@ -1,6 +1,6 @@
namespace BuildFeed.Model namespace BuildFeed.Model
{ {
public class BuildGroup public struct BuildGroup
{ {
public uint Major { get; set; } public uint Major { get; set; }
public uint Minor { 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.Razor" version="3.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.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.3.0" targetFramework="net462" />
<package id="MongoDB.Driver" version="2.2.4" targetFramework="net462" /> <package id="MongoDB.Driver" version="2.3.0" targetFramework="net462" />
<package id="MongoDB.Driver.Core" version="2.2.4" targetFramework="net462" /> <package id="MongoDB.Driver.Core" version="2.3.0" targetFramework="net462" />
</packages> </packages>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <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="..\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="$(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')" /> <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> <HintPath>..\packages\Microsoft.ApplicationInsights.2.1.0\lib\net46\Microsoft.ApplicationInsights.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <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.1\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll</HintPath> <HintPath>..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.2\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.CSharp" />
@ -106,16 +106,16 @@
<HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath> <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="MongoDB.Bson, Version=2.2.4.26, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="MongoDB.Bson, Version=2.3.0.157, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MongoDB.Bson.2.2.4\lib\net45\MongoDB.Bson.dll</HintPath> <HintPath>..\packages\MongoDB.Bson.2.3.0\lib\net45\MongoDB.Bson.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="MongoDB.Driver, Version=2.2.4.26, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="MongoDB.Driver, Version=2.3.0.157, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MongoDB.Driver.2.2.4\lib\net45\MongoDB.Driver.dll</HintPath> <HintPath>..\packages\MongoDB.Driver.2.3.0\lib\net45\MongoDB.Driver.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="MongoDB.Driver.Core, Version=2.2.4.26, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="MongoDB.Driver.Core, Version=2.3.0.157, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MongoDB.Driver.Core.2.2.4\lib\net45\MongoDB.Driver.Core.dll</HintPath> <HintPath>..\packages\MongoDB.Driver.Core.2.3.0\lib\net45\MongoDB.Driver.Core.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <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> <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> </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.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> </Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- 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. Other similar extension points exist, see Microsoft.Common.targets.

View File

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

View File

@ -344,6 +344,13 @@ interface JQueryPromise<T> extends JQueryGenericPromise<T> {
// Deprecated - given no typings // Deprecated - given no typings
pipe(doneFilter?: (x: any) => any, failFilter?: (x: any) => any, progressFilter?: (x: any) => any): JQueryPromise<any>; 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. * 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. * 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; get(index: number): HTMLElement;
/** /**
* Retrieve the elements matched by the jQuery object. * Retrieve the elements matched by the jQuery object.
* @alias toArray
*/ */
get(): any[]; get(): HTMLElement[];
/** /**
* Search for a given element from among the matched elements. * Search for a given element from among the matched elements.

View File

@ -2,7 +2,7 @@
@using BuildFeed.Controllers @using BuildFeed.Controllers
@using BuildFeed.Model.View @using BuildFeed.Model.View
@using Humanizer @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}"; 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 class="build-group-empty"></div>
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
</div> </div>
@PaginationHelpers.PaginationBlock((int)ViewBag.PageNumber, (int)ViewBag.PageCount, nameof(FrontController.Index), ViewContext.RouteData.Values) @PaginationHelpers.PaginationBlock((int)ViewBag.PageNumber, (int)ViewBag.PageCount, nameof(FrontController.Index), ViewContext.RouteData.Values)

View File

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

View File

@ -14,9 +14,9 @@
@if (Model.CurrentCanary != null) @if (Model.CurrentCanary != null)
{ {
<a href="@Url.Action("ViewBuild", new <a href="@Url.Action("ViewBuild", new
{ {
Model.CurrentCanary.Id Model.CurrentCanary.Id
})" class="latest-flex-item latest-flex-red"> })" class="latest-flex-item latest-flex-red">
<h3 class="latest-flex-title">@VariantTerms.Front_CurrentCanary</h3> <h3 class="latest-flex-title">@VariantTerms.Front_CurrentCanary</h3>
<div class="latest-flex-detail"> <div class="latest-flex-detail">
<p class="latest-flex-build">@(Model.CurrentCanary.MajorVersion).@(Model.CurrentCanary.MinorVersion).@(Model.CurrentCanary.Number).@(Model.CurrentCanary.Revision)</p> <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 metaDesc = Model.BuildTime.HasValue
? string.Format(VariantTerms.Meta_BuildDate, Model.Number, Model.Lab, Model.BuildTime.Value.ToLongDateWithoutDay()) ? 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_BuildNoDate, Model.Number, Model.Lab);
} }
<meta name="description" content="@metaDesc" /> <meta name="description" content="@metaDesc" />
<meta property="og:description" content="@metaDesc" /> <meta property="og:description" content="@metaDesc" />
@ -105,9 +105,9 @@
<div class="build-details-flex-value"> <div class="build-details-flex-value">
@Html.DisplayFor(model => model.SourceType, "Enumeration")<br /> @Html.DisplayFor(model => model.SourceType, "Enumeration")<br />
<a href="@Url.Action("ViewSource", new <a href="@Url.Action("ViewSource", new
{ {
source = Model.SourceType source = Model.SourceType
})" class="more-link"> })" class="more-link">
<i class="fa fa-plus-square-o fa-sm"></i>&nbsp; <i class="fa fa-plus-square-o fa-sm"></i>&nbsp;
@string.Format(VariantTerms.Front_MoreFromSource, MvcExtensions.GetDisplayTextForEnum(Model.SourceType)) @string.Format(VariantTerms.Front_MoreFromSource, MvcExtensions.GetDisplayTextForEnum(Model.SourceType))
</a> </a>
@ -165,7 +165,8 @@
var disqus_shortname = 'buildfeed'; var disqus_shortname = 'buildfeed';
var disqus_url = 'https://buildfeed.net/actions/info/@((object)Model.LegacyId ?? Model.Id)/'; var disqus_url = 'https://buildfeed.net/actions/info/@((object)Model.LegacyId ?? Model.Id)/';
(function () { (function()
{
var dsq = document.createElement('script'); var dsq = document.createElement('script');
dsq.type = 'text/javascript'; dsq.type = 'text/javascript';
dsq.async = true; dsq.async = true;

View File

@ -64,4 +64,9 @@
} }
</div> </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> </div>

View File

@ -1,11 +1,11 @@
@using BuildFeed.Code @using BuildFeed.Code
@using BuildFeed.Model @using BuildFeed.Model
@using Humanizer @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 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 @section head
@ -29,7 +29,7 @@
} }
<h1 class="eager-wrapping">@string.Format(VariantTerms.Front_BuildsFrom, ViewBag.ItemId)</h1> <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> <h3>@VariantTerms.Front_About</h3>
@Html.Raw(ViewBag.MetaItem.PageContent) @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 class="build-group-empty"></div>
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
</div> </div>
@PaginationHelpers.PaginationBlock((int)ViewBag.PageNumber, (int)ViewBag.PageCount, "viewLab", ViewContext.RouteData.Values) @PaginationHelpers.PaginationBlock((int)ViewBag.PageNumber, (int)ViewBag.PageCount, "viewLab", ViewContext.RouteData.Values)

View File

@ -1,11 +1,11 @@
@using BuildFeed.Code @using BuildFeed.Code
@using BuildFeed.Model @using BuildFeed.Model
@using Humanizer @using Humanizer
@model IEnumerable<Build> @model IEnumerable<BuildFeed.Model.Build>
@{ @{
ViewBag.Title = string.Format("{0}{1} | {2}", ViewBag.ItemId, ViewBag.PageNumber == 1 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 @section head
@ -23,7 +23,7 @@
} }
<h1>@ViewBag.ItemId</h1> <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> <h3>@VariantTerms.Front_About</h3>
@Html.Raw(ViewBag.MetaItem.PageContent) @Html.Raw(ViewBag.MetaItem.PageContent)
@ -88,5 +88,10 @@
</p> </p>
</div> </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> </div>
@PaginationHelpers.PaginationBlock((int)ViewBag.PageNumber, (int)ViewBag.PageCount, "viewSource", ViewContext.RouteData.Values) @PaginationHelpers.PaginationBlock((int)ViewBag.PageNumber, (int)ViewBag.PageCount, "viewSource", ViewContext.RouteData.Values)

View File

@ -1,9 +1,9 @@
@using BuildFeed.Code @using BuildFeed.Code
@using BuildFeed.Model @using BuildFeed.Model
@using Humanizer @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 @section head
@ -21,7 +21,7 @@
} }
<h1>@string.Format("{0} {1}", InvariantTerms.ProductName, ViewBag.ItemId)</h1> <h1>@string.Format("{0} {1}", InvariantTerms.ProductName, ViewBag.ItemId)</h1>
@if (ViewBag.MetaItem != null @if ((ViewBag.MetaItem != null)
&& !string.IsNullOrWhiteSpace(ViewBag.MetaItem.PageContent)) && !string.IsNullOrWhiteSpace(ViewBag.MetaItem.PageContent))
{ {
<h3>@VariantTerms.Front_About</h3> <h3>@VariantTerms.Front_About</h3>
@ -89,5 +89,10 @@
</p> </p>
</div> </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> </div>
@PaginationHelpers.PaginationBlock((int)ViewBag.PageNumber, (int)ViewBag.PageCount, "viewVersion", ViewContext.RouteData.Values) @PaginationHelpers.PaginationBlock((int)ViewBag.PageNumber, (int)ViewBag.PageCount, "viewVersion", ViewContext.RouteData.Values)

View File

@ -1,11 +1,11 @@
@using BuildFeed.Code @using BuildFeed.Code
@using BuildFeed.Model @using BuildFeed.Model
@using Humanizer @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 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 @section head
@ -29,7 +29,7 @@
} }
<h1>@string.Format(VariantTerms.Front_BuildsFrom, ViewBag.ItemId)</h1> <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> <h3>@VariantTerms.Front_About</h3>
@Html.Raw(ViewBag.MetaItem.PageContent) @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 class="build-group-empty"></div>
<div class="build-group-empty"></div>
<div class="build-group-empty"></div>
</div> </div>
@PaginationHelpers.PaginationBlock((int)ViewBag.PageNumber, (int)ViewBag.PageCount, "viewYear", ViewContext.RouteData.Values) @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 @model Enum
@MvcExtensions.GetDisplayTextForEnum(ViewData.Model) @MvcExtensions.GetDisplayTextForEnum(ViewData.Model)

View File

@ -23,14 +23,14 @@
<meta name="format-detection" content="telephone=no" /> <meta name="format-detection" content="telephone=no" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <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://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="shortcut icon" href="~/favicon.ico" />
<link rel="icon" href="~/favicon.ico" /> <link rel="icon" href="~/favicon.ico" />
<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.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.css" rel="stylesheet" type="text/css" /> <link href="/res/css/rtl.css" rel="stylesheet" type="text/css" />
@ -38,18 +38,18 @@
<title>@ViewBag.Title</title> <title>@ViewBag.Title</title>
@RenderSection("head", false) @RenderSection("head", false)
<script type="text/javascript"> <script type="text/javascript">
var appInsights = window.appInsights || function (config) { 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 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" instrumentationKey: "4632419f-7a2f-4ab5-8374-34384b650f42"
}); });
window.appInsights = appInsights; window.appInsights = appInsights;
appInsights.trackPageView(); appInsights.trackPageView();
</script> </script>
</head> </head>
<body> <body>
<script> <script>
(function (i, s, o, g, r, a, m) { (function (i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () { i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () {
(i[r].q = i[r].q || []).push(arguments) (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) 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'); })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', 'UA-55417692-1', 'auto'); ga('create', 'UA-55417692-1', 'auto');
ga('require', 'displayfeatures'); ga('require', 'displayfeatures');
ga('require', 'linkid', 'linkid.js'); ga('require', 'linkid', 'linkid.js');
ga('send', 'pageview'); ga('send', 'pageview');
</script> </script>
<header id="page-header"> <header id="page-header">
<div class="container"> <div class="container">
<h1> <h1>
@Html.ActionLink(InvariantTerms.SiteName, nameof(FrontController.Index), new @Html.ActionLink(InvariantTerms.SiteName, nameof(FrontController.Index), new
{ {
controller = "Front", controller = "Front",
area = "" area = ""
}) })
</h1> </h1>
</div> </div>
</header> </header>
<nav id="page-navigation" role="navigation"> <nav id="page-navigation" role="navigation">
<div class="container"> <div class="container">
<button id="page-navigation-toggle"> <button id="page-navigation-toggle">
<i class="fa fa-bars"></i>&ensp;@VariantTerms.Common_ToggleNavigation <i class="fa fa-bars"></i>&ensp;@VariantTerms.Common_ToggleNavigation
</button> </button>
<ul id="page-navigation-links"> <ul id="page-navigation-links">
@if (!User.Identity.IsAuthenticated) @if (!User.Identity.IsAuthenticated)
{ {
<li> <li>
<a href="@Url.Action(nameof(SupportController.Login), new <a href="@Url.Action(nameof(SupportController.Login), new
{ {
controller = "Support", controller = "Support",
area = "" area = ""
})" title="@VariantTerms.Common_LogIn"> })" title="@VariantTerms.Common_LogIn">
<i class="fa fa-fw fa-user"></i> @VariantTerms.Common_LogIn <i class="fa fa-fw fa-user"></i> @VariantTerms.Common_LogIn
</a> </a>
</li> </li>
} }
else 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", controller = "base",
area = "admin" area = "admin"
})" title="@VariantTerms.Common_Admin"> })" title="@VariantTerms.Common_Admin">
<i class="fa fa-fw fa-cogs"></i> @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
</a> </a>
</li> </li>
} }
<li> <li>
<a href="#" id="page-navigation-search" title="@VariantTerms.Search_Title"> <a href="@Url.Action(nameof(FrontController.AddBuild), new
<i class="fa fa-fw fa-search"></i> @VariantTerms.Search_Title {
controller = "Front",
area = ""
})" title="@VariantTerms.Common_AddBuild">
<i class="fa fa-fw fa-plus-square"></i> @VariantTerms.Common_AddBuild
</a> </a>
</li> </li>
<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", controller = "Support",
area = "" area = ""
})" title="@VariantTerms.Common_RssFeeds"> })" title="@VariantTerms.Common_RssFeeds">
<i class="fa fa-fw fa-rss"></i> @VariantTerms.Common_RssFeeds <i class="fa fa-fw fa-rss"></i> @VariantTerms.Common_RssFeeds
</a> </a>
</li> </li>
<li> <li>
<a href="https://twitter.com/buildfeed" title="@VariantTerms.Common_Twitter" target="_blank"> <a href="https://twitter.com/buildfeed" title="@VariantTerms.Common_Twitter" target="_blank">
<i class="fa fa-fw fa-twitter"></i> @VariantTerms.Common_Twitter <i class="fa fa-fw fa-twitter"></i> @VariantTerms.Common_Twitter
</a> </a>
</li> </li>
<li class="dropdown-parent"> <li class="dropdown-parent">
<a href="#"> <a href="#">
<i class="fa fa-gear"></i> <i class="fa fa-gear"></i>
</a> </a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li id="settings-theme-menu" class="dropdown-menu-block"> <li id="settings-theme-menu" class="dropdown-menu-block">
<h4>@VariantTerms.Common_NavigationTheme</h4> <h4>@VariantTerms.Common_NavigationTheme</h4>
<ul> <ul>
@foreach (Theme item in Theme.AvailableThemes) @foreach (Theme item in Theme.AvailableThemes)
{ {
<li> <li>
<a href="#" data-theme="@item.CookieValue">@item.DisplayName</a> <a href="#" data-theme="@item.CookieValue">@item.DisplayName</a>
</li> </li>
} }
</ul> </ul>
</li> </li>
<li id="settings-lang-menu" class="dropdown-menu-block"> <li id="settings-lang-menu" class="dropdown-menu-block">
<h4>@VariantTerms.Common_NavigationLanguage</h4> <h4>@VariantTerms.Common_NavigationLanguage</h4>
<ul> <ul>
@foreach (Locale locale in Locale.AvailableLocales) @foreach (Locale locale in Locale.AvailableLocales)
{ {
<li> <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
</li> ? "rtl"
} : "ltr")">
</ul> @locale.DisplayName</a>
</li> </li>
</ul> }
</li> </ul>
</ul> </li>
</div> </ul>
</nav> </li>
<article id="page-content"> </ul>
<div class="container"> </div>
@RenderBody() </nav>
</div> <article id="page-content">
</article> <div class="container">
<footer id="page-footer"> @RenderBody()
<div class="container"> </div>
<div class="footer-flex"> </article>
<div class="footer-flex-item"> <footer id="page-footer">
<div class="container">
<div class="footer-flex">
<div class="footer-flex-item">
<p> <p>
<a href="@Url.Action(nameof(SupportController.Sitemap), new <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", controller = "Support",
area = "" area = ""
})"> })">
@VariantTerms.Common_Credits @VariantTerms.Common_Sitemap</a>
</a>) </p>
</p> <p>
</div> <i class="fa fa-language"></i>&ensp;
<div class="footer-flex-item"> @CultureInfo.CurrentUICulture.NativeName
<p> (<a href="@Url.Action(nameof(SupportController.Credits), new
&copy; 2013 - @DateTime.Now.Year.ToString(), <span dir="ltr">@InvariantTerms.SiteName</span> {
</p> controller = "Support",
<p> area = ""
@Html.Raw(string.Format(VariantTerms.Common_DevelopedBy, $"<a href=\"https://twitter.com/tomhounsell\" target=\"_blank\" dir=\"ltr\">{InvariantTerms.DeveloperName}</a>")) })">
</p> @VariantTerms.Common_Credits
<p> </a>)
@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>
</p>
</div>
</div> </div>
</div> <div class="footer-flex-item">
</footer> <p>
&copy; 2013 - @DateTime.Now.Year.ToString(), <span dir="ltr">@InvariantTerms.SiteName</span>
<div id="modal-search-overlay"> </p>
<div id="modal-search"> <p>
<h3>@VariantTerms.Search_BuildFeed</h3> @Html.Raw(string.Format(VariantTerms.Common_DevelopedBy, $"<a href=\"https://twitter.com/tomhounsell\" target=\"_blank\" dir=\"ltr\">{InvariantTerms.DeveloperName}</a>"))
<div id="modal-search-box"> </p>
<input id="modal-search-input" type="text" placeholder="@VariantTerms.Search_TypePlaceholder" /> <p>
<button id="modal-search-button"><i class="fa fa-search"></i></button> @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>
<div id="modal-search-result"></div>
</div> </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> <div id="modal-search-overlay">
<script type="text/javascript" src="/res/ts/bfs.min.js"></script> <div id="modal-search">
@RenderSection("scripts", false) <h3>@VariantTerms.Search_BuildFeed</h3>
<script id="result-template" type="text/x-jsrender"> <div id="modal-search-box">
<a href="{{:Url}}" class="search-result-item" title="{{:Title}}"> <input id="modal-search-input" type="text" placeholder="@VariantTerms.Search_TypePlaceholder" />
<h4 class="search-result-heading no-wrapping">{{:Label}}</h4> <button id="modal-search-button">
<p class="search-result-text">{{:Group}}</p> <i class="fa fa-search"></i>
</a> </button>
</script> </div>
<script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=ra-5431719a661cbfd0" async="async"></script> <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> </body>
</html> </html>

View File

@ -15,13 +15,13 @@
<meta name="format-detection" content="telephone=no" /> <meta name="format-detection" content="telephone=no" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <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://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="shortcut icon" href="~/favicon.ico" />
<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.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.css" rel="stylesheet" type="text/css" /> <link href="/res/css/rtl.css" rel="stylesheet" type="text/css" />
@ -56,10 +56,10 @@
<div class="container"> <div class="container">
<h1> <h1>
@Html.ActionLink(InvariantTerms.SiteName, nameof(FrontController.Index), new @Html.ActionLink(InvariantTerms.SiteName, nameof(FrontController.Index), new
{ {
controller = "Front", controller = "Front",
area = "" area = ""
}) })
</h1> </h1>
</div> </div>
</header> </header>
@ -96,7 +96,10 @@
@foreach (Locale locale in Locale.AvailableLocales) @foreach (Locale locale in Locale.AvailableLocales)
{ {
<li> <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> </li>
} }
</ul> </ul>
@ -112,9 +115,15 @@
<p> <p>
@string.Format(VariantTerms.Common_ErrorContent, "<a href=\"https://github.com/hounsell/BuildFeed/issues\">GitHub</a>") @string.Format(VariantTerms.Common_ErrorContent, "<a href=\"https://github.com/hounsell/BuildFeed/issues\">GitHub</a>")
</p> </p>
<p>Controller: <code>@Model.ControllerName</code></p> <p>
<p>Action: <code>@Model.ActionName</code></p> Controller: <code>@Model.ControllerName</code>
<p>Error: <code>@Model.Exception.Message</code></p> </p>
<p>
Action: <code>@Model.ActionName</code>
</p>
<p>
Error: <code>@Model.Exception.Message</code>
</p>
</div> </div>
</article> </article>
<footer id="page-footer"> <footer id="page-footer">
@ -140,9 +149,8 @@
</div> </div>
</div> </div>
</footer> </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> <script type="text/javascript" src="~/res/ts/bfs.min.js"></script>
@RenderSection("scripts", false) @RenderSection("scripts", false)
</body> </body>
</html> </html>

View File

@ -62,8 +62,8 @@
<dd>OBattler</dd> <dd>OBattler</dd>
<dt>Portugese - Brazilian (@System.Globalization.CultureInfo.GetCultureInfo("pt-br").NativeName) Translation</dt> <dt>Portugese - Brazilian (@System.Globalization.CultureInfo.GetCultureInfo("pt-br").NativeName) Translation</dt>
<dd>RichardG</dd> <dd>RichardG</dd>
<dt>Pseudo-localisation (@System.Globalization.CultureInfo.GetCultureInfo("qps-ploc").NativeName) Translation</dt> @*<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> <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> <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> <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> <dt>Russian (@System.Globalization.CultureInfo.GetCultureInfo("ru").NativeName) Translation</dt>

View File

@ -150,8 +150,8 @@
</runtime> </runtime>
<system.codedom> <system.codedom>
<compilers> <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="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.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" /> <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> </compilers>
</system.codedom> </system.codedom>
</configuration> </configuration>

View File

@ -1,80 +1,79 @@
<?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.2" 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.2" 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.3.0" targetFramework="net462" />
<package id="MongoDB.Driver" version="2.2.4" targetFramework="net462" /> <package id="MongoDB.Driver" version="2.3.0" targetFramework="net462" />
<package id="MongoDB.Driver.Core" version="2.2.4" 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="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>

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