Component Updates; Add Winter Theme

subject for larger patch

Fix Binding Redirect

for smaller patch
refactor-intermediate-models
nickurt 2017-11-13 21:45:32 +01:00
parent d49a0d6933
commit 9df754b7c8
83 changed files with 2282 additions and 7239 deletions

View File

@ -31,7 +31,9 @@ namespace BuildFeed.Model
public string LabUrl { get; private set; }
public bool IsLeaked => SourceType == TypeOfSource.PublicRelease || SourceType == TypeOfSource.InternalLeak || SourceType == TypeOfSource.UpdateGDR;
public bool IsLeaked => SourceType == TypeOfSource.PublicRelease ||
SourceType == TypeOfSource.InternalLeak ||
SourceType == TypeOfSource.UpdateGDR;
public string FullBuildString { get; private set; }
@ -46,7 +48,7 @@ namespace BuildFeed.Model
{
get
{
HtmlDocument hDoc = new HtmlDocument();
var hDoc = new HtmlDocument();
hDoc.LoadHtml($"<div>{SourceDetails}</div>");
if (string.IsNullOrWhiteSpace(hDoc.DocumentNode.InnerText))
@ -56,8 +58,9 @@ namespace BuildFeed.Model
if (Uri.IsWellFormedUriString(hDoc.DocumentNode.InnerText, UriKind.Absolute))
{
Uri uri = new Uri(hDoc.DocumentNode.InnerText, UriKind.Absolute);
return $"<a href=\"{uri}\" target=\"_blank\">{VariantTerms.Model_ExternalLink} <i class=\"fa fa-external-link\"></i></a>";
var uri = new Uri(hDoc.DocumentNode.InnerText, UriKind.Absolute);
return
$"<a href=\"{uri}\" target=\"_blank\">{VariantTerms.Model_ExternalLink} <i class=\"fa fa-external-link\"></i></a>";
}
return SourceDetails;
@ -74,7 +77,7 @@ namespace BuildFeed.Model
private void GenerateFullBuildString()
{
StringBuilder sb = new StringBuilder();
var sb = new StringBuilder();
sb.Append($"{MajorVersion}.{MinorVersion}.{Number}");
if (Revision.HasValue)
@ -97,7 +100,7 @@ namespace BuildFeed.Model
private void GenerateAlternateBuildString()
{
StringBuilder sb = new StringBuilder();
var sb = new StringBuilder();
sb.Append($"{MajorVersion}.{MinorVersion}.{Number}");
if (Revision.HasValue)
@ -111,7 +114,8 @@ namespace BuildFeed.Model
if (BuildTime.HasValue)
{
sb.Append($".{BuildTime.Value.ToString("yyMMdd-HHmm", CultureInfo.InvariantCulture.DateTimeFormat)}");
sb.Append(
$".{BuildTime.Value.ToString("yyMMdd-HHmm", CultureInfo.InvariantCulture.DateTimeFormat)}");
}
sb.Append(")");

View File

@ -10,6 +10,7 @@ namespace BuildFeed.Model
public class BuildDetails
{
[Required]
[Range(1, int.MaxValue)]
[Display(ResourceType = typeof(VariantTerms), Name = nameof(VariantTerms.Model_MajorVersion))]
public uint MajorVersion { get; set; }
@ -18,6 +19,7 @@ namespace BuildFeed.Model
public uint MinorVersion { get; set; }
[Required]
[Range(1, int.MaxValue)]
[Display(ResourceType = typeof(VariantTerms), Name = nameof(VariantTerms.Model_BuildNumber))]
public uint Number { get; set; }

View File

@ -34,8 +34,8 @@
<Reference Include="AutoMapper, Version=6.1.1.0, Culture=neutral, PublicKeyToken=be96cd2c38ef1005, processorArchitecture=MSIL">
<HintPath>..\packages\AutoMapper.6.1.1\lib\net45\AutoMapper.dll</HintPath>
</Reference>
<Reference Include="HtmlAgilityPack, Version=1.5.5.0, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL">
<HintPath>..\packages\HtmlAgilityPack.1.5.5\lib\Net45\HtmlAgilityPack.dll</HintPath>
<Reference Include="HtmlAgilityPack, Version=1.6.3.0, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL">
<HintPath>..\packages\HtmlAgilityPack.1.6.3\lib\Net45\HtmlAgilityPack.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>

View File

@ -29,7 +29,7 @@ namespace BuildFeed.Model
public BuildRepository()
{
MongoClientSettings settings = new MongoClientSettings
var settings = new MongoClientSettings
{
Server = new MongoServerAddress(MongoConfig.Host, MongoConfig.Port)
};
@ -42,7 +42,7 @@ namespace BuildFeed.Model
};
}
MongoClient dbClient = new MongoClient(settings);
var dbClient = new MongoClient(settings);
IMongoDatabase buildDatabase = dbClient.GetDatabase(MongoConfig.Database);
_buildCollection = buildDatabase.GetCollection<Build>(BUILD_COLLECTION_NAME);
@ -50,7 +50,7 @@ namespace BuildFeed.Model
public async Task SetupIndexes()
{
List<BsonDocument> indexes = await (await _buildCollection.Indexes.ListAsync()).ToListAsync();
var indexes = await (await _buildCollection.Indexes.ListAsync()).ToListAsync();
if (indexes.All(i => i["name"] != "_idx_group"))
{
@ -95,7 +95,8 @@ namespace BuildFeed.Model
if (indexes.All(i => i["name"] != "_idx_bstr"))
{
await _buildCollection.Indexes.CreateOneAsync(Builders<Build>.IndexKeys.Ascending(b => b.FullBuildString),
await _buildCollection.Indexes.CreateOneAsync(
Builders<Build>.IndexKeys.Ascending(b => b.FullBuildString),
new CreateIndexOptions
{
Name = "_idx_bstr"
@ -104,7 +105,8 @@ namespace BuildFeed.Model
if (indexes.All(i => i["name"] != "_idx_alt_bstr"))
{
await _buildCollection.Indexes.CreateOneAsync(Builders<Build>.IndexKeys.Ascending(b => b.AlternateBuildString),
await _buildCollection.Indexes.CreateOneAsync(
Builders<Build>.IndexKeys.Ascending(b => b.AlternateBuildString),
new CreateIndexOptions
{
Name = "_idx_alt_bstr"
@ -134,15 +136,18 @@ namespace BuildFeed.Model
public async Task<List<Build>> Select() => await _buildCollection.Find(new BsonDocument()).ToListAsync();
[DataObjectMethod(DataObjectMethodType.Select, false)]
public async Task<Build> SelectById(Guid id) => await _buildCollection.Find(Builders<Build>.Filter.Eq(b => b.Id, id)).SingleOrDefaultAsync();
public async Task<Build> SelectById(Guid id)
=> await _buildCollection.Find(Builders<Build>.Filter.Eq(b => b.Id, id)).SingleOrDefaultAsync();
[DataObjectMethod(DataObjectMethodType.Select, false)]
public async Task<Build> SelectByLegacyId(long id) => await _buildCollection.Find(Builders<Build>.Filter.Eq(b => b.LegacyId, id)).SingleOrDefaultAsync();
public async Task<Build> SelectByLegacyId(long id) => await _buildCollection
.Find(Builders<Build>.Filter.Eq(b => b.LegacyId, id))
.SingleOrDefaultAsync();
[DataObjectMethod(DataObjectMethodType.Select, false)]
public async Task<List<Build>> SelectBuildsByOrder(int limit = -1, int skip = 0)
{
IFindFluent<Build, Build> query = _buildCollection.Find(new BsonDocument()).Sort(sortByOrder).Skip(skip);
var query = _buildCollection.Find(new BsonDocument()).Sort(sortByOrder).Skip(skip);
if (limit > 0)
{
@ -155,18 +160,33 @@ namespace BuildFeed.Model
[DataObjectMethod(DataObjectMethodType.Select, false)]
public async Task<Dictionary<ProjectFamily, FrontPage>> SelectFrontPage()
{
const int currentFamily = (int)ProjectFamily.Redstone;
const int currentXbox = (int)ProjectFamily.Redstone2;
const int currentLongTerm = (int)ProjectFamily.Redstone;
const int currentFamily = (int)ProjectFamily.Redstone3;
const int currentXbox = (int)ProjectFamily.Redstone3;
var families = new Dictionary<ProjectFamily, FrontPage>();
IAggregateFluent<BsonDocument> query = _buildCollection.Aggregate()
var query = _buildCollection.Aggregate()
.Match(new BsonDocument
{
{
nameof(Build.Family), new BsonDocument
"$or", new BsonArray
{
{"$gte", currentFamily}
new BsonDocument
{
{
nameof(Build.Family), new BsonDocument
{
{"$gte", currentFamily}
}
}
},
new BsonDocument
{
{
nameof(Build.Family), currentLongTerm
}
}
}
}
})
@ -199,44 +219,67 @@ namespace BuildFeed.Model
}
});
List<BsonDocument> dbResults = await query.ToListAsync();
var dbResults = await query.ToListAsync();
var results = (from g in dbResults
select new
{
Key = new
{
Family = (ProjectFamily)g["_id"].AsBsonDocument[nameof(Build.Family)].AsInt32,
LabUrl = g["_id"].AsBsonDocument[nameof(Build.LabUrl)].AsString,
SourceType = (TypeOfSource)g["_id"].AsBsonDocument[nameof(Build.SourceType)].AsInt32
},
select new
{
Key = new
{
Family = (ProjectFamily)g["_id"].AsBsonDocument[nameof(Build.Family)].AsInt32,
LabUrl = g["_id"].AsBsonDocument[nameof(Build.LabUrl)].AsString,
SourceType = (TypeOfSource)g["_id"].AsBsonDocument[nameof(Build.SourceType)].AsInt32
},
Items = from i in g["items"].AsBsonArray
select new FrontPageBuild
{
Id = i[nameof(Build.Id)].AsGuid,
MajorVersion = (uint)i[nameof(Build.MajorVersion)].AsInt32,
MinorVersion = (uint)i[nameof(Build.MinorVersion)].AsInt32,
Number = (uint)i[nameof(Build.Number)].AsInt32,
Revision = (uint?)i[nameof(Build.Revision)].AsNullableInt32,
Lab = i[nameof(Build.Lab)].AsString,
BuildTime = i[nameof(Build.BuildTime)].ToNullableUniversalTime()
}
}).ToArray();
Items = from i in g["items"].AsBsonArray
select new FrontPageBuild
{
Id = i[nameof(Build.Id)].AsGuid,
MajorVersion = (uint)i[nameof(Build.MajorVersion)].AsInt32,
MinorVersion = (uint)i[nameof(Build.MinorVersion)].AsInt32,
Number = (uint)i[nameof(Build.Number)].AsInt32,
Revision = (uint?)i[nameof(Build.Revision)].AsNullableInt32,
Lab = i[nameof(Build.Lab)].AsString,
BuildTime = i[nameof(Build.BuildTime)].ToNullableUniversalTime()
}
}).ToArray();
IEnumerable<ProjectFamily> listOfFamilies = results.GroupBy(g => g.Key.Family).Select(g => g.Key).OrderByDescending(k => k);
IEnumerable<ProjectFamily> listOfFamilies =
results.GroupBy(g => g.Key.Family).Select(g => g.Key).OrderByDescending(k => k);
foreach (ProjectFamily family in listOfFamilies)
{
FrontPage fp = new FrontPage
var fp = new FrontPage
{
CurrentCanary = results.Where(g => g.Key.Family == family && !g.Key.LabUrl.Contains("xbox")).SelectMany(g => g.Items).OrderByDescending(b => b.BuildTime).FirstOrDefault(),
CurrentInsider = results.Where(g => g.Key.Family == family && !g.Key.LabUrl.Contains("xbox") && (g.Key.SourceType == TypeOfSource.PublicRelease || g.Key.SourceType == TypeOfSource.UpdateGDR)).SelectMany(g => g.Items)
.OrderByDescending(b => b.BuildTime).FirstOrDefault(),
CurrentCanary = results.Where(g => g.Key.Family == family && !g.Key.LabUrl.Contains("xbox"))
.SelectMany(g => g.Items)
.OrderByDescending(b => b.BuildTime)
.FirstOrDefault(),
CurrentInsider = results
.Where(g => g.Key.Family == family &&
!g.Key.LabUrl.Contains("xbox") &&
(g.Key.SourceType == TypeOfSource.PublicRelease ||
g.Key.SourceType == TypeOfSource.UpdateGDR))
.SelectMany(g => g.Items)
.OrderByDescending(b => b.BuildTime)
.FirstOrDefault(),
CurrentRelease = results
.Where(g => g.Key.Family == family && g.Key.LabUrl.Contains("_release") && !g.Key.LabUrl.Contains("xbox") && (g.Key.SourceType == TypeOfSource.PublicRelease || g.Key.SourceType == TypeOfSource.UpdateGDR))
.SelectMany(g => g.Items).OrderByDescending(b => b.BuildTime).FirstOrDefault(),
CurrentXbox = results.Where(g => (int)g.Key.Family >= currentXbox && g.Key.Family == family && g.Key.LabUrl.Contains("xbox")).SelectMany(g => g.Items).OrderByDescending(b => b.BuildTime).FirstOrDefault()
.Where(g => g.Key.Family == family &&
g.Key.LabUrl.Contains("_release") &&
!g.Key.LabUrl.Contains("xbox") &&
(g.Key.SourceType == TypeOfSource.PublicRelease ||
g.Key.SourceType == TypeOfSource.UpdateGDR))
.SelectMany(g => g.Items)
.OrderByDescending(b => b.BuildTime)
.FirstOrDefault(),
CurrentXbox =
results.Where(g
=> (int)g.Key.Family >= currentXbox &&
g.Key.Family == family &&
g.Key.LabUrl.Contains("xbox"))
.SelectMany(g => g.Items)
.OrderByDescending(b => b.BuildTime)
.FirstOrDefault()
};
families.Add(family, fp);
@ -248,7 +291,10 @@ namespace BuildFeed.Model
[DataObjectMethod(DataObjectMethodType.Select, false)]
public async Task<List<Build>> SelectBuildsByStringSearch(string term, int limit = -1)
{
IAggregateFluent<Build> query = _buildCollection.Aggregate().Match(b => b.FullBuildString != null).Match(b => b.FullBuildString != "").Match(b => b.FullBuildString.ToLower().Contains(term.ToLower()));
var query = _buildCollection.Aggregate()
.Match(b => b.FullBuildString != null)
.Match(b => b.FullBuildString != "")
.Match(b => b.FullBuildString.ToLower().Contains(term.ToLower()));
if (limit > 0)
{
@ -261,13 +307,14 @@ namespace BuildFeed.Model
[DataObjectMethod(DataObjectMethodType.Select, false)]
public async Task<Build> SelectBuildByFullBuildString(string build)
{
return await _buildCollection.Find(Builders<Build>.Filter.Eq(b => b.FullBuildString, build)).SingleOrDefaultAsync();
return await _buildCollection.Find(Builders<Build>.Filter.Eq(b => b.FullBuildString, build))
.SingleOrDefaultAsync();
}
[DataObjectMethod(DataObjectMethodType.Select, false)]
public async Task<List<Build>> SelectBuildsByCompileDate(int limit = -1, int skip = 0)
{
IFindFluent<Build, Build> query = _buildCollection.Find(new BsonDocument()).Sort(sortByCompileDate).Skip(skip);
var query = _buildCollection.Find(new BsonDocument()).Sort(sortByCompileDate).Skip(skip);
if (limit > 0)
{
@ -280,7 +327,7 @@ namespace BuildFeed.Model
[DataObjectMethod(DataObjectMethodType.Select, false)]
public async Task<List<Build>> SelectBuildsByAddedDate(int limit = -1, int skip = 0)
{
IFindFluent<Build, Build> query = _buildCollection.Find(new BsonDocument()).Sort(sortByAddedDate).Skip(skip);
var query = _buildCollection.Find(new BsonDocument()).Sort(sortByAddedDate).Skip(skip);
if (limit > 0)
{
@ -293,7 +340,7 @@ namespace BuildFeed.Model
[DataObjectMethod(DataObjectMethodType.Select, false)]
public async Task<List<Build>> SelectBuildsByLeakedDate(int limit = -1, int skip = 0)
{
IFindFluent<Build, Build> query = _buildCollection.Find(new BsonDocument()).Sort(sortByLeakedDate).Skip(skip);
var query = _buildCollection.Find(new BsonDocument()).Sort(sortByLeakedDate).Skip(skip);
if (limit > 0)
{
@ -340,7 +387,7 @@ namespace BuildFeed.Model
public async Task RegenerateCachedProperties()
{
List<Build> builds = await Select();
var builds = await Select();
foreach (Build bd in builds)
{
bd.RegenerateCachedProperties();

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="AutoMapper" version="6.1.1" targetFramework="net47" />
<package id="HtmlAgilityPack" version="1.5.5" targetFramework="net47" />
<package id="HtmlAgilityPack" version="1.6.3" targetFramework="net47" />
<package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net47" />
<package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net47" />
<package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net47" />

View File

@ -1,7 +1,7 @@
<?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.Net.Compilers.2.3.2\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.2.3.2\build\Microsoft.Net.Compilers.props')" />
<Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.7\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.7\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
<Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
<Import Project="..\packages\Microsoft.Net.Compilers.2.4.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.2.4.0\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')" />
<PropertyGroup>
@ -29,7 +29,7 @@
<UseGlobalApplicationHostFile />
<TargetFrameworkProfile />
<TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>
<TypeScriptToolsVersion>2.5</TypeScriptToolsVersion>
<TypeScriptToolsVersion>2.6</TypeScriptToolsVersion>
<Use64BitIISExpress />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
@ -67,14 +67,14 @@
<Reference Include="AutoMapper, Version=6.1.1.0, Culture=neutral, PublicKeyToken=be96cd2c38ef1005, processorArchitecture=MSIL">
<HintPath>..\packages\AutoMapper.6.1.1\lib\net45\AutoMapper.dll</HintPath>
</Reference>
<Reference Include="HtmlAgilityPack, Version=1.5.5.0, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL">
<HintPath>..\packages\HtmlAgilityPack.1.5.5\lib\Net45\HtmlAgilityPack.dll</HintPath>
<Reference Include="HtmlAgilityPack, Version=1.6.3.0, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL">
<HintPath>..\packages\HtmlAgilityPack.1.6.3\lib\Net45\HtmlAgilityPack.dll</HintPath>
</Reference>
<Reference Include="Humanizer, Version=2.2.0.0, Culture=neutral, PublicKeyToken=979442b78dfc278e, processorArchitecture=MSIL">
<HintPath>..\packages\Humanizer.Core.2.2.0\lib\netstandard1.0\Humanizer.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.7\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll</HintPath>
<Reference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
@ -266,7 +266,14 @@
<Content Include="BingSiteAuth.xml" />
<Content Include="browserconfig.xml" />
<None Include="gulpfile.js" />
<Content Include="content\tile\notify.png" />
<None Include="res\css\inc\_christmas.scss" />
<Content Include="res\css\winter.css">
<DependentUpon>winter.scss</DependentUpon>
</Content>
<Content Include="res\css\winter.css.map">
<DependentUpon>winter.css</DependentUpon>
</Content>
<Content Include="res\ico\notify.png" />
<Content Include="OneSignalSDKUpdaterWorker.js" />
<Content Include="OneSignalSDKWorker.js" />
<Content Include="res\card\Longhorn.png" />
@ -280,18 +287,15 @@
<Content Include="res\card\Windows8.png" />
<Content Include="res\card\WindowsBlue.png" />
<Content Include="res\card\WindowsVista.png" />
<Content Include="content\icons-2x.png" />
<Content Include="content\icons.png" />
<Content Include="content\tile\wide.png" />
<Content Include="content\tile\large.png" />
<Content Include="content\tile\square.png" />
<Content Include="content\tile\tiny.png" />
<Content Include="res\ico\wide.png" />
<Content Include="res\ico\large.png" />
<Content Include="res\ico\square.png" />
<Content Include="res\ico\tiny.png" />
<Content Include="favicon.ico" />
<Content Include="Global.asax" />
<Content Include="Areas\Admin\Views\web.config" />
<Content Include="Areas\Admin\Views\Users\index.cshtml" />
<Content Include="Areas\Admin\Views\_ViewStart.cshtml" />
<Content Include="content\Web.config" />
<Content Include="Areas\Admin\Views\Root\index.cshtml" />
<Content Include="Areas\Admin\Views\Users\admins.cshtml" />
<Content Include="Areas\Admin\Views\Meta\index.cshtml" />
@ -327,6 +331,12 @@
<Content Include="res\ts\bfs.js.map">
<DependentUpon>bfs.js</DependentUpon>
</Content>
<Content Include="res\ts\christmas.js">
<DependentUpon>christmas.ts</DependentUpon>
</Content>
<Content Include="res\ts\christmas.js.map">
<DependentUpon>christmas.js</DependentUpon>
</Content>
<Content Include="robots.txt" />
<Content Include="App_Code\PaginationHelpers.cshtml" />
<Content Include="res\css\default.scss" />
@ -339,8 +349,9 @@
<Content Include="packages.config" />
<None Include="Properties\PublishProfiles\Milestone 1 WebDeploy %28Private%29.pubxml" />
<None Include="Properties\PublishProfiles\Milestone 1 WebDeploy.pubxml" />
<Content Include="res\css\inc\variables.scss" />
<Content Include="res\css\inc\nord.scss" />
<Content Include="res\css\inc\_variables.scss" />
<Content Include="res\css\inc\_nord.scss" />
<Content Include="res\css\winter.scss" />
<None Include="Scripts\jquery-3.2.1.intellisense.js" />
<Content Include="Scripts\jquery-3.2.1.js" />
<Content Include="Scripts\jquery-3.2.1.min.js" />
@ -355,6 +366,7 @@
<Content Include="Scripts\jquery.validate.unobtrusive.min.js" />
<Content Include="Scripts\trumbowyg\langs\ar.min.js" />
<Content Include="Scripts\trumbowyg\langs\bg.min.js" />
<Content Include="Scripts\trumbowyg\langs\by.min.js" />
<Content Include="Scripts\trumbowyg\langs\ca.min.js" />
<Content Include="Scripts\trumbowyg\langs\cs.min.js" />
<Content Include="Scripts\trumbowyg\langs\da.min.js" />
@ -372,12 +384,14 @@
<Content Include="Scripts\trumbowyg\langs\it.min.js" />
<Content Include="Scripts\trumbowyg\langs\ja.min.js" />
<Content Include="Scripts\trumbowyg\langs\ko.min.js" />
<Content Include="Scripts\trumbowyg\langs\mn.min.js" />
<Content Include="Scripts\trumbowyg\langs\my.min.js" />
<Content Include="Scripts\trumbowyg\langs\nl.min.js" />
<Content Include="Scripts\trumbowyg\langs\no_nb.min.js" />
<Content Include="Scripts\trumbowyg\langs\ph.min.js" />
<Content Include="Scripts\trumbowyg\langs\pl.min.js" />
<Content Include="Scripts\trumbowyg\langs\pt.min.js" />
<Content Include="Scripts\trumbowyg\langs\pt_br.min.js" />
<Content Include="Scripts\trumbowyg\langs\ro.min.js" />
<Content Include="Scripts\trumbowyg\langs\rs.min.js" />
<Content Include="Scripts\trumbowyg\langs\rs_latin.min.js" />
@ -389,34 +403,21 @@
<Content Include="Scripts\trumbowyg\langs\vi.min.js" />
<Content Include="Scripts\trumbowyg\langs\zh_cn.min.js" />
<Content Include="Scripts\trumbowyg\langs\zh_tw.min.js" />
<Content Include="Scripts\trumbowyg\plugins\base64\trumbowyg.base64.js" />
<Content Include="Scripts\trumbowyg\plugins\base64\trumbowyg.base64.min.js" />
<Content Include="Scripts\trumbowyg\plugins\cleanpaste\trumbowyg.cleanpaste.js" />
<Content Include="Scripts\trumbowyg\plugins\cleanpaste\trumbowyg.cleanpaste.min.js" />
<Content Include="Scripts\trumbowyg\plugins\colors\trumbowyg.colors.js" />
<Content Include="Scripts\trumbowyg\plugins\colors\trumbowyg.colors.min.js" />
<Content Include="Scripts\trumbowyg\plugins\colors\ui\trumbowyg.colors.css" />
<Content Include="Scripts\trumbowyg\plugins\colors\ui\trumbowyg.colors.min.css" />
<Content Include="Scripts\trumbowyg\plugins\emoji\trumbowyg.emoji.js" />
<Content Include="Scripts\trumbowyg\plugins\emoji\trumbowyg.emoji.min.js" />
<Content Include="Scripts\trumbowyg\plugins\insertaudio\trumbowyg.insertaudio.js" />
<Content Include="Scripts\trumbowyg\plugins\emoji\ui\trumbowyg.emoji.min.css" />
<Content Include="Scripts\trumbowyg\plugins\insertaudio\trumbowyg.insertaudio.min.js" />
<Content Include="Scripts\trumbowyg\plugins\noembed\trumbowyg.noembed.js" />
<Content Include="Scripts\trumbowyg\plugins\noembed\trumbowyg.noembed.min.js" />
<Content Include="Scripts\trumbowyg\plugins\pasteimage\trumbowyg.pasteimage.js" />
<Content Include="Scripts\trumbowyg\plugins\pasteimage\trumbowyg.pasteimage.min.js" />
<Content Include="Scripts\trumbowyg\plugins\preformatted\trumbowyg.preformatted.js" />
<Content Include="Scripts\trumbowyg\plugins\preformatted\trumbowyg.preformatted.min.js" />
<Content Include="Scripts\trumbowyg\plugins\table\trumbowyg.table.js" />
<Content Include="Scripts\trumbowyg\plugins\table\trumbowyg.table.min.js" />
<Content Include="Scripts\trumbowyg\plugins\template\trumbowyg.template.js" />
<Content Include="Scripts\trumbowyg\plugins\template\trumbowyg.template.min.js" />
<Content Include="Scripts\trumbowyg\plugins\upload\trumbowyg.upload.js" />
<Content Include="Scripts\trumbowyg\plugins\upload\trumbowyg.upload.min.js" />
<Content Include="Scripts\trumbowyg\trumbowyg.js" />
<Content Include="Scripts\trumbowyg\trumbowyg.min.js" />
<Content Include="Scripts\trumbowyg\ui\icons.svg" />
<Content Include="Scripts\trumbowyg\ui\trumbowyg.css" />
<Content Include="Scripts\trumbowyg\ui\trumbowyg.min.css" />
<Content Include="yandex_702baad42b020be7.html" />
<None Include="Properties\PublishProfiles\Local Folder.pubxml" />
@ -462,8 +463,6 @@
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Views\front\AddBulk.cshtml" />
<Content Include="Scripts\trumbowyg\plugins\colors\ui\sass\trumbowyg.colors.scss" />
<Content Include="Scripts\trumbowyg\ui\sass\trumbowyg.scss" />
<Content Include="Views\account\validate-success.cshtml" />
<Content Include="Views\account\validate-failure.cshtml" />
<None Include="tsconfig.json" />
@ -471,6 +470,7 @@
<ItemGroup />
<ItemGroup>
<TypeScriptCompile Include="res\ts\bfs.ts" />
<TypeScriptCompile Include="res\ts\christmas.ts" />
<TypeScriptCompile Include="Scripts\typings\google.analytics\ga.d.ts" />
<TypeScriptCompile Include="Scripts\typings\jquery\jquery.d.ts" />
<TypeScriptCompile Include="Scripts\typings\jsrender\jsrender.d.ts" />
@ -540,11 +540,11 @@
<PropertyGroup>
<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.CodeDom.Providers.DotNetCompilerPlatform.1.0.7\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.7\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />
<Error Condition="!Exists('..\packages\NETStandard.Library.2.0.0\build\netstandard2.0\NETStandard.Library.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NETStandard.Library.2.0.0\build\netstandard2.0\NETStandard.Library.targets'))" />
<Error Condition="!Exists('..\packages\Microsoft.Net.Compilers.2.3.2\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Net.Compilers.2.3.2\build\Microsoft.Net.Compilers.props'))" />
<Error Condition="!Exists('..\packages\Microsoft.Net.Compilers.2.4.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Net.Compilers.2.4.0\build\Microsoft.Net.Compilers.props'))" />
<Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />
<Error Condition="!Exists('..\packages\NETStandard.Library.2.0.1\build\netstandard2.0\NETStandard.Library.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NETStandard.Library.2.0.1\build\netstandard2.0\NETStandard.Library.targets'))" />
</Target>
<Import Project="..\packages\NETStandard.Library.2.0.0\build\netstandard2.0\NETStandard.Library.targets" Condition="Exists('..\packages\NETStandard.Library.2.0.0\build\netstandard2.0\NETStandard.Library.targets')" />
<Import Project="..\packages\NETStandard.Library.2.0.1\build\netstandard2.0\NETStandard.Library.targets" Condition="Exists('..\packages\NETStandard.Library.2.0.1\build\netstandard2.0\NETStandard.Library.targets')" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">

View File

@ -11,23 +11,22 @@ namespace BuildFeed.Code.Options
private const string THEME_COOKIE_NAME = "bf_theme";
public static Theme[] AvailableThemes = (from st in Enum.GetValues(typeof(SiteTheme)).Cast<SiteTheme>()
select new Theme(st)).ToArray();
select new Theme(st)).ToArray();
private readonly SiteTheme _siteTheme;
public string CookieValue => _siteTheme.ToString();
public string CssPath => $"~/res/css/{_siteTheme.ToString().ToLower()}.css";
public string DisplayName => MvcExtensions.GetDisplayTextForEnum(_siteTheme);
public string CookieValue => Value.ToString();
public string CssPath => $"~/res/css/{Value.ToString().ToLower()}.css";
public string DisplayName => MvcExtensions.GetDisplayTextForEnum(Value);
public SiteTheme Value { get; }
public Theme(SiteTheme st)
{
_siteTheme = st;
Value = st;
}
public static SiteTheme DetectTheme(HttpContextBase context)
{
string themeCookie = context.Request.Cookies[THEME_COOKIE_NAME]?.Value;
SiteTheme theme = SiteTheme.Dark;
var theme = SiteTheme.Dark;
if (!string.IsNullOrEmpty(themeCookie))
{
Enum.TryParse(themeCookie, out theme);
@ -43,6 +42,8 @@ namespace BuildFeed.Code.Options
Dark = 0,
[Display(ResourceType = typeof(VariantTerms), Name = nameof(VariantTerms.Common_ThemeLight))]
Light
Light,
Winter
}
}

View File

@ -0,0 +1,8 @@
/* ===========================================================
* by.js
* Belarusian translation for Trumbowyg
* http://alex-d.github.com/Trumbowyg
* ===========================================================
* Author : Yury Karalkou
*/
jQuery.trumbowyg.langs.by={viewHTML:"Паглядзець HTML",undo:"Скасаваць",redo:"Паўтарыць",formatting:"Фарматаванне",p:"Звычайны",blockquote:"Цытата",code:"Код",header:"Загаловак",bold:"Паўтлусты",italic:"Курсіў",strikethrough:"Закрэслены",underline:"Падкрэслены",strong:"Паўтлусты",em:"Курсіў",del:"Закрэслены",superscript:"Верхні індэкс",subscript:"Індэкс",unorderedList:"Звычайны спіс",orderedList:"Нумараваны спіс",insertImage:"Уставіць выяву",insertVideo:"Уставіць відэа",link:"Спасылка",createLink:"Уставіць спасылку",unlink:"Выдаліць спасылку",justifyLeft:"Па леваму боку",justifyCenter:"У цэнтры",justifyRight:"Па праваму боку",justifyFull:"Па шырыні",horizontalRule:"Гарызантальная лінія",removeformat:"Ачысціць фарматаванне",fullscreen:"На ўвесь экран",close:"Зачыніць",submit:"Уставіць",reset:"Скасаваць",required:"Абавязкова",description:"Апісанне",title:"Падказка",text:"Тэкст"};

View File

@ -9,4 +9,4 @@
* LinkedIn: https://gr.linkedin.com/in/merianosnikos
* Behance: https://www.behance.net/web_design_blog
*/
jQuery.trumbowyg.langs.es={viewHTML:"Προβολή κώδικα HTML",formatting:"Μορφοποίηση",p:"Παράγραφος",blockquote:"Παράθεση",code:"Κώδικας",header:"Επικεφαλίδα",bold:"Έντονα",italic:"Πλάγια",strikethrough:"Διαγραφή",underline:"Υπογράμμιση",strong:"Έντονα",em:"Πλάγια",del:"Διαγραφή",unorderedList:"Αταξινόμητη λίστα",orderedList:"Ταξινομημένη λίστα",insertImage:"Εισαγωγή εικόνας",insertVideo:"Εισαγωγή βίντεο",link:"Σύνδεσμος",createLink:"Δημιουργία συνδέσμου",unlink:"Διαγραφή συνδέσμου",justifyLeft:"Στοίχιση αριστερά",justifyCenter:"Στοίχιση στο κέντρο",justifyRight:"Στοίχιση δεξιά",justifyFull:"Πλήρης στοίχιση",horizontalRule:"Οριζόντια γραμμή",fullscreen:"Πλήρης οθόνη",close:"Κλείσιμο",submit:"Υποβολή",reset:"Επαναφορά",required:"Απαραίτητο",description:"Περιγραφή",title:"Τίτλος",text:"Κείμενο"};
jQuery.trumbowyg.langs.el={viewHTML:"Προβολή κώδικα HTML",formatting:"Μορφοποίηση",p:"Παράγραφος",blockquote:"Παράθεση",code:"Κώδικας",header:"Επικεφαλίδα",bold:"Έντονα",italic:"Πλάγια",strikethrough:"Διαγραφή",underline:"Υπογράμμιση",strong:"Έντονα",em:"Πλάγια",del:"Διαγραφή",unorderedList:"Αταξινόμητη λίστα",orderedList:"Ταξινομημένη λίστα",insertImage:"Εισαγωγή εικόνας",insertVideo:"Εισαγωγή βίντεο",link:"Σύνδεσμος",createLink:"Δημιουργία συνδέσμου",unlink:"Διαγραφή συνδέσμου",justifyLeft:"Στοίχιση αριστερά",justifyCenter:"Στοίχιση στο κέντρο",justifyRight:"Στοίχιση δεξιά",justifyFull:"Πλήρης στοίχιση",horizontalRule:"Οριζόντια γραμμή",removeformat:"Καθαρισμός μορφοποίησης",fullscreen:"Πλήρης οθόνη",close:"Κλείσιμο",submit:"Υποβολή",reset:"Επαναφορά",required:"Απαραίτητο",description:"Περιγραφή",title:"Τίτλος",text:"Κείμενο"};

View File

@ -6,4 +6,4 @@
* Author : Moisés Márquez
* Email : moises.marquez.g@gmail.com
*/
jQuery.trumbowyg.langs.es={viewHTML:"Ver HTML",undo:"Desfazer",redo:"Refazer",formatting:"Formato",p:"Párrafo",blockquote:"Cita",code:"Código",header:"Título",bold:"Negrita",italic:"Cursiva",strikethrough:"Tachado",underline:"Subrayado",strong:"Negrita",em:"Énfasis",del:"Borrar",superscript:"Sobrescrito",subscript:"Subíndice",unorderedList:"Lista Desordenada",orderedList:"Lista Ordenada",insertImage:"Insertar una imagen",insertVideo:"Insertar un vídeo",link:"Enlace",createLink:"Insertar un enlace",unlink:"Suprimir un enlace",justifyLeft:"Izquierda",justifyCenter:"Centrar",justifyRight:"Derecha",justifyFull:"Justificado",horizontalRule:"Insertar separador horizontal",removeformat:"Eliminar formato",fullscreen:"Pantalla completa",close:"Cerrar",submit:"Enviar",reset:"Cancelar",required:"Obligatorio",description:"Descripción",title:"Título",text:"Texto",target:"Target"};
jQuery.trumbowyg.langs.es={viewHTML:"Ver HTML",undo:"Deshacer",redo:"Rehacer",formatting:"Formato",p:"Párrafo",blockquote:"Cita",code:"Código",header:"Título",bold:"Negrita",italic:"Cursiva",strikethrough:"Tachado",underline:"Subrayado",strong:"Negrita",em:"Énfasis",del:"Borrar",superscript:"Sobrescrito",subscript:"Subíndice",unorderedList:"Lista Desordenada",orderedList:"Lista Ordenada",insertImage:"Insertar una imagen",insertVideo:"Insertar un vídeo",link:"Enlace",createLink:"Insertar un enlace",unlink:"Suprimir un enlace",justifyLeft:"Izquierda",justifyCenter:"Centrar",justifyRight:"Derecha",justifyFull:"Justificado",horizontalRule:"Insertar separador horizontal",removeformat:"Eliminar formato",fullscreen:"Pantalla completa",close:"Cerrar",submit:"Enviar",reset:"Cancelar",required:"Obligatorio",description:"Descripción",title:"Título",text:"Texto",target:"Target"};

View File

@ -5,4 +5,4 @@
* ===========================================================
* Author : Mirko Buffoni
*/
jQuery.trumbowyg.langs.it={viewHTML:"Mostra HTML",formatting:"Formattazione",p:"Paragrafo",blockquote:"Citazione",code:"Codice",header:"Intestazione",bold:"Grassetto",italic:"Italico",strikethrough:"Barrato",underline:"Sottolineato",strong:"Rafforza",em:"Enfatizza",del:"Cancella",unorderedList:"Elenco puntato",orderedList:"Elenco numerato",insertImage:"Inserisci immagine",insertVideo:"Inserisci video",link:"Collegamento",createLink:"Crea un collegamento",unlink:"Elimina collegamento",justifyLeft:"Allinea a sinistra",justifyCenter:"Centra",justifyRight:"Allinea a destra",justifyFull:"Giustifica",horizontalRule:"Inserisci un separatore orizzontale",fullscreen:"Schermo intero",close:"Chiudi",submit:"Invia",reset:"Annulla",required:"Obbligatorio",description:"Descrizione",title:"Titolo",text:"Testo"};
jQuery.trumbowyg.langs.it={viewHTML:"Mostra HTML",formatting:"Formattazione",p:"Paragrafo",blockquote:"Citazione",code:"Codice",header:"Intestazione",bold:"Grassetto",italic:"Italico",strikethrough:"Barrato",underline:"Sottolineato",strong:"Rafforza",em:"Enfatizza",del:"Cancella",unorderedList:"Elenco puntato",orderedList:"Elenco numerato",insertImage:"Inserisci immagine",insertVideo:"Inserisci video",link:"Collegamento",createLink:"Crea un collegamento",unlink:"Elimina collegamento",justifyLeft:"Allinea a sinistra",justifyCenter:"Centra",justifyRight:"Allinea a destra",justifyFull:"Giustifica",horizontalRule:"Inserisci un separatore orizzontale",fullscreen:"Schermo intero",close:"Chiudi",submit:"Invia",reset:"Annulla",required:"Obbligatorio",description:"Descrizione",title:"Titolo",text:"Testo",removeformat:"Rimuovi Formattazione",superscript:"Apice",subscript:"Pedice"};

View File

@ -7,4 +7,4 @@
* Twitter : @foo9
* Website : https://github.com/foo9
*/
jQuery.trumbowyg.langs.ja={viewHTML:"HTML表示",formatting:"フォーマット",p:"段落",blockquote:"引用",code:"コード",header:"見出し",bold:"太字",italic:"斜体",strikethrough:"取り消し線",underline:"下線",strong:"太字",em:"斜体",del:"取り消し線",unorderedList:"順序なしリスト",orderedList:"順序ありリスト",insertImage:"画像の挿入",insertVideo:"動画の挿入",link:"リンク",createLink:"リンクの作成",unlink:"リンクの削除",justifyLeft:"左揃え",justifyCenter:"中央揃え",justifyRight:"右揃え",justifyFull:"両端揃え",horizontalRule:"横罫線",fullscreen:"全画面表示",close:"閉じる",submit:"送信",reset:"キャンセル",required:"必須",description:"説明",title:"タイトル",text:"テキスト"};
jQuery.trumbowyg.langs.ja={viewHTML:"HTML表示",undo:"元に戻す",redo:"やり直す",formatting:"フォーマット",p:"段落",blockquote:"引用",code:"コード",header:"見出し",bold:"太字",italic:"斜体",strikethrough:"取り消し線",underline:"下線",strong:"太字",em:"斜体",del:"取り消し線",superscript:"上付き文字",subscript:"下付き文字",unorderedList:"順序なしリスト",orderedList:"順序ありリスト",insertImage:"画像の挿入",link:"リンク",createLink:"リンクの作成",unlink:"リンクの削除",justifyLeft:"左揃え",justifyCenter:"中央揃え",justifyRight:"右揃え",justifyFull:"両端揃え",horizontalRule:"横罫線",removeformat:"フォーマットの削除",fullscreen:"全画面表示",close:"閉じる",submit:"送信",reset:"キャンセル",required:"必須",description:"説明",title:"タイトル",text:"テキスト",target:"ターゲット"};

View File

@ -0,0 +1,8 @@
/* ===========================================================
* mn.js
* Mongolian translation for Trumbowyg
* http://alex-d.github.com/Trumbowyg
* ===========================================================
* Author : Ganbayar.B (ganbayar13)
*/
jQuery.trumbowyg.langs.mn={viewHTML:"HTML харах",undo:"Буцаах",redo:"Дахих",formatting:"Формат",p:"Догол мөр",blockquote:"Ишлэл",code:"Код",header:"Гарчиг",bold:"Тод",italic:"Налуу",strikethrough:"Дундуур зураас",underline:"Доогуур зураас",strong:"Тод",em:"Налуу",del:"Дундуур зураас",superscript:"Дээд индекс",subscript:"Доод индекс",unorderedList:"Дугаарлаагүй жагсаалт",orderedList:"Дугаарласан жагсаалт",insertImage:"Зураг оруулах",insertVideo:"Видео оруулах",link:"Холбоос",createLink:"Холбоос үүсгэх",unlink:"Холбоос цуцлах",justifyLeft:"Зүүн тийш шахах",justifyCenter:"Голлуулах",justifyRight:"Баруун Баруун тийш шахах",justifyFull:"Тэгшитгэх",horizontalRule:"Хөндлөн шугам",removeformat:"Формат арилгах",fullscreen:"Дэлгэц дүүргэх",close:"Хаах",submit:"Оруулах",reset:"Цуцлах",required:"Шаардлагатай",description:"Тайлбар",title:"Гарчиг",text:"Текст",target:"Бай"};

View File

@ -0,0 +1,11 @@
/* ===========================================================
* pt_br.js
* Portuguese Brazilian translation for Trumbowyg
* http://alex-d.github.com/Trumbowyg
* ===========================================================
* Author : Alex Gotardi (alexgotardi)
* Twitter : @alexgotardi
* Github : https://github.com/alexgotardi
*/
// jshint camelcase:false
jQuery.trumbowyg.langs.pt_br={viewHTML:"Ver HTML",undo:"Desfazer",redo:"Refazer",formatting:"Formatar",p:"Parágrafo",blockquote:"Citação",code:"Código",header:"Título",bold:"Negrito",italic:"Itálico",strikethrough:"Tachado",underline:"Sublinhado",strong:"Negrito",em:"Ênfase",del:"Apagar",superscript:"Sobrescrito",subscript:"Subscrito",unorderedList:"Lista não ordenada",orderedList:"Lista ordenada",insertImage:"Inserir imagem",insertVideo:"Inserir vídeo",link:"Link",createLink:"Criar um link",unlink:"Remover link",justifyLeft:"Alinhar a esquerda",justifyCenter:"Centralizar",justifyRight:"Alinhar a direita",justifyFull:"Justificar",horizontalRule:"Inserir separador horizontal",removeformat:"Remover formatação",fullscreen:"Tela cheia",close:"Fechar",submit:"Enviar",reset:"Limpar",required:"Obrigatório",description:"Descrição",title:"Título",text:"Texto",target:"Target"};

View File

@ -9,4 +9,4 @@
* Website : creative-studio51.co.uk
* Github : https://github.com/pacMakaveli
*/
jQuery.trumbowyg.langs.pt={viewHTML:"Vizualizare HTML",formatting:"Format",p:"Paragraf",blockquote:"Citație",code:"Cod",header:"Titlu",bold:"Bold",italic:"Italic",strikethrough:"Tăiat",underline:"Subliniat",strong:"Puternic",em:"Accentuat",del:"Sterge",unorderedList:"Lista dezordonată",orderedList:"Liste ordonată",insertImage:"Adăugare Imagine",insertVideo:"Adăugare Video",link:"Link",createLink:"Crează link",unlink:"Remover link",justifyLeft:"Aliniază stânga",justifyCenter:"Aliniază centru",justifyRight:"Aliniază dreapta",justifyFull:"Justificare",horizontalRule:"Linie orizontală",fullscreen:"Tot ecranul",close:"Închide",submit:"Procesează",reset:"Resetează",required:"Obligatoriu",description:"Descriere",title:"Titlu",text:"Text"};
jQuery.trumbowyg.langs.ro={viewHTML:"Vizualizare HTML",formatting:"Format",p:"Paragraf",blockquote:"Citație",code:"Cod",header:"Titlu",bold:"Bold",italic:"Italic",strikethrough:"Tăiat",underline:"Subliniat",strong:"Puternic",em:"Accentuat",del:"Sterge",unorderedList:"Lista dezordonată",orderedList:"Liste ordonată",insertImage:"Adăugare Imagine",insertVideo:"Adăugare Video",link:"Link",createLink:"Crează link",unlink:"Remover link",justifyLeft:"Aliniază stânga",justifyCenter:"Aliniază centru",justifyRight:"Aliniază dreapta",justifyFull:"Justificare",horizontalRule:"Linie orizontală",fullscreen:"Tot ecranul",close:"Închide",submit:"Procesează",reset:"Resetează",required:"Obligatoriu",description:"Descriere",title:"Titlu",text:"Text"};

View File

@ -1,109 +0,0 @@
/* ===========================================================
* trumbowyg.base64.js v1.0
* Base64 plugin for Trumbowyg
* http://alex-d.github.com/Trumbowyg
* ===========================================================
* Author : Cyril Biencourt (lizardK)
*/
(function ($) {
'use strict';
var isSupported = function () {
return typeof FileReader !== 'undefined';
};
var isValidImage = function (type) {
return /^data:image\/[a-z]?/i.test(type);
};
$.extend(true, $.trumbowyg, {
langs: {
// jshint camelcase:false
en: {
base64: 'Image as base64',
file: 'File',
errFileReaderNotSupported: 'FileReader is not supported by your browser.',
errInvalidImage: 'Invalid image file.'
},
fr: {
base64: 'Image en base64',
file: 'Fichier'
},
cs: {
base64: 'Vložit obrázek',
file: 'Soubor'
},
zh_cn: {
base64: '图片Base64编码',
file: '文件'
},
nl: {
errFileReaderNotSupported: 'Uw browser ondersteunt deze functionaliteit niet.',
errInvalidImage: 'De gekozen afbeelding is ongeldig.'
}
},
// jshint camelcase:true
plugins: {
base64: {
shouldInit: isSupported,
init: function (trumbowyg) {
var btnDef = {
isSupported: isSupported,
fn: function () {
trumbowyg.saveRange();
var file;
var $modal = trumbowyg.openModalInsert(
// Title
trumbowyg.lang.base64,
// Fields
{
file: {
type: 'file',
required: true,
attributes: {
accept: 'image/*'
}
},
alt: {
label: 'description',
value: trumbowyg.getRangeText()
}
},
// Callback
function (values) {
var fReader = new FileReader();
fReader.onloadend = function (e) {
if (isValidImage(e.target.result)) {
trumbowyg.execCmd('insertImage', fReader.result);
$(['img[src="', fReader.result, '"]:not([alt])'].join(''), trumbowyg.$box).attr('alt', values.alt);
trumbowyg.closeModal();
} else {
trumbowyg.addErrorOnModalField(
$('input[type=file]', $modal),
trumbowyg.lang.errInvalidImage
);
}
};
fReader.readAsDataURL(file);
}
);
$('input[type=file]').on('change', function (e) {
file = e.target.files[0];
});
}
};
trumbowyg.addBtnDef('base64', btnDef);
}
}
}
});
})(jQuery);

View File

@ -1 +1 @@
!function(e){"use strict";var a=function(){return"undefined"!=typeof FileReader},t=function(e){return/^data:image\/[a-z]?/i.test(e)};e.extend(!0,e.trumbowyg,{langs:{en:{base64:"Image as base64",file:"File",errFileReaderNotSupported:"FileReader is not supported by your browser.",errInvalidImage:"Invalid image file."},fr:{base64:"Image en base64",file:"Fichier"},cs:{base64:"Vložit obrázek",file:"Soubor"},zh_cn:{base64:"图片Base64编码",file:"文件"},nl:{errFileReaderNotSupported:"Uw browser ondersteunt deze functionaliteit niet.",errInvalidImage:"De gekozen afbeelding is ongeldig."}},plugins:{base64:{shouldInit:a,init:function(n){var i={isSupported:a,fn:function(){n.saveRange();var a,i=n.openModalInsert(n.lang.base64,{file:{type:"file",required:!0,attributes:{accept:"image/*"}},alt:{label:"description",value:n.getRangeText()}},function(r){var l=new FileReader;l.onloadend=function(a){t(a.target.result)?(n.execCmd("insertImage",l.result),e(['img[src="',l.result,'"]:not([alt])'].join(""),n.$box).attr("alt",r.alt),n.closeModal()):n.addErrorOnModalField(e("input[type=file]",i),n.lang.errInvalidImage)},l.readAsDataURL(a)});e("input[type=file]").on("change",function(e){a=e.target.files[0]})}};n.addBtnDef("base64",i)}}}})}(jQuery);
!function(e){"use strict";var a=function(){return"undefined"!=typeof FileReader},r=function(e){return/^data:image\/[a-z]?/i.test(e)};e.extend(!0,e.trumbowyg,{langs:{en:{base64:"Image as base64",file:"File",errFileReaderNotSupported:"FileReader is not supported by your browser.",errInvalidImage:"Invalid image file."},fr:{base64:"Image en base64",file:"Fichier"},cs:{base64:"Vložit obrázek",file:"Soubor"},zh_cn:{base64:"图片Base64编码",file:"文件"},nl:{errFileReaderNotSupported:"Uw browser ondersteunt deze functionaliteit niet.",errInvalidImage:"De gekozen afbeelding is ongeldig."},ru:{base64:"Изображение как код в base64",file:"Файл",errFileReaderNotSupported:"FileReader не поддерживается вашим браузером.",errInvalidImage:"Недопустимый файл изображения."},ja:{base64:"画像 (Base64形式)",file:"ファイル",errFileReaderNotSupported:"あなたのブラウザーはFileReaderをサポートしていません",errInvalidImage:"画像形式が正しくありません"}},plugins:{base64:{shouldInit:a,init:function(i){var t={isSupported:a,fn:function(){i.saveRange();var a,t=i.openModalInsert(i.lang.base64,{file:{type:"file",required:!0,attributes:{accept:"image/*"}},alt:{label:"description",value:i.getRangeText()}},function(n){var l=new FileReader;l.onloadend=function(a){r(a.target.result)?(i.execCmd("insertImage",l.result),e(['img[src="',l.result,'"]:not([alt])'].join(""),i.$box).attr("alt",n.alt),i.closeModal()):i.addErrorOnModalField(e("input[type=file]",t),i.lang.errInvalidImage)},l.readAsDataURL(a)});e("input[type=file]").on("change",function(e){a=e.target.files[0]})}};i.addBtnDef("base64",t)}}}})}(jQuery);

View File

@ -1,179 +0,0 @@
/* ===========================================================
* trumbowyg.cleanpaste.js v1.0
* Font Clean paste plugin for Trumbowyg
* http://alex-d.github.com/Trumbowyg
* ===========================================================
* Author : Eric Radin
*/
/**
* This plugin will perform a "cleaning" on any paste, in particular
* it will clean pasted content of microsoft word document tags and classes.
*/
(function ($) {
'use strict';
function reverse(sentString) {
var theString = '';
for (var i = sentString.length - 1; i >= 0; i -= 1) {
theString += sentString.charAt(i);
}
return theString;
}
function checkValidTags(snippet) {
var theString = snippet;
// Replace uppercase element names with lowercase
theString = theString.replace(/<[^> ]*/g, function (match) {
return match.toLowerCase();
});
// Replace uppercase attribute names with lowercase
theString = theString.replace(/<[^>]*>/g, function (match) {
match = match.replace(/ [^=]+=/g, function (match2) {
return match2.toLowerCase();
});
return match;
});
// Put quotes around unquoted attributes
theString = theString.replace(/<[^>]*>/g, function (match) {
match = match.replace(/( [^=]+=)([^"][^ >]*)/g, '$1\"$2\"');
return match;
});
return theString;
}
function cleanIt(htmlBefore, htmlAfter) {
var matchedHead = '';
var matchedTail = '';
var afterStart;
var afterFinish;
var newSnippet;
// we need to extract the inserted block
for (afterStart = 0; htmlAfter.charAt(afterStart) === htmlBefore.charAt(afterStart); afterStart += 1) {
matchedHead += htmlAfter.charAt(afterStart);
}
// If afterStart is inside a HTML tag, move to opening brace of tag
for (var i = afterStart; i >= 0; i -= 1) {
if (htmlBefore.charAt(i) === '<') {
afterStart = i;
matchedHead = htmlBefore.substring(0, afterStart);
break;
} else if (htmlBefore.charAt(i) === '>') {
break;
}
}
// now reverse string and work from the end in
htmlAfter = reverse(htmlAfter);
htmlBefore = reverse(htmlBefore);
// Find end of both strings that matches
for (afterFinish = 0; htmlAfter.charAt(afterFinish) === htmlBefore.charAt(afterFinish); afterFinish += 1) {
matchedTail += htmlAfter.charAt(afterFinish);
}
// If afterFinish is inside a HTML tag, move to closing brace of tag
for (var j = afterFinish; j >= 0; j -= 1) {
if (htmlBefore.charAt(j) === '>') {
afterFinish = j;
matchedTail = htmlBefore.substring(0, afterFinish);
break;
} else if (htmlBefore.charAt(j) === '<') {
break;
}
}
matchedTail = reverse(matchedTail);
// If there's no difference in pasted content
if (afterStart === (htmlAfter.length - afterFinish)) {
return false;
}
htmlAfter = reverse(htmlAfter);
newSnippet = htmlAfter.substring(afterStart, htmlAfter.length - afterFinish);
// first make sure all tags and attributes are made valid
newSnippet = checkValidTags(newSnippet);
// Replace opening bold tags with strong
newSnippet = newSnippet.replace(/<b(\s+|>)/g, '<strong$1');
// Replace closing bold tags with closing strong
newSnippet = newSnippet.replace(/<\/b(\s+|>)/g, '</strong$1');
// Replace italic tags with em
newSnippet = newSnippet.replace(/<i(\s+|>)/g, '<em$1');
// Replace closing italic tags with closing em
newSnippet = newSnippet.replace(/<\/i(\s+|>)/g, '</em$1');
// strip out comments -cgCraft
newSnippet = newSnippet.replace(/<!(?:--[\s\S]*?--\s*)?>\s*/g, '');
// strip out &nbsp; -cgCraft
newSnippet = newSnippet.replace(/&nbsp;/gi, ' ');
// strip out extra spaces -cgCraft
newSnippet = newSnippet.replace(/ <\//gi, '</');
while (newSnippet.indexOf(' ') !== -1) {
var anArray = newSnippet.split(' ');
newSnippet = anArray.join(' ');
}
// strip &nbsp; -cgCraft
newSnippet = newSnippet.replace(/^\s*|\s*$/g, '');
// Strip out unaccepted attributes
newSnippet = newSnippet.replace(/<[^>]*>/g, function (match) {
match = match.replace(/ ([^=]+)="[^"]*"/g, function (match2, attributeName) {
if (['alt', 'href', 'src', 'title'].indexOf(attributeName) !== -1) {
return match2;
}
return '';
});
return match;
});
// Final cleanout for MS Word crud
newSnippet = newSnippet.replace(/<\?xml[^>]*>/g, '');
newSnippet = newSnippet.replace(/<[^ >]+:[^>]*>/g, '');
newSnippet = newSnippet.replace(/<\/[^ >]+:[^>]*>/g, '');
// remove unwanted tags
newSnippet = newSnippet.replace(/<(div|span|style|meta|link){1}.*?>/gi, '');
htmlAfter = matchedHead + newSnippet + matchedTail;
return htmlAfter;
}
// clean editor
// this will clean the inserted contents
// it does a compare, before and after paste to determine the
// pasted contents
$.extend(true, $.trumbowyg, {
plugins: {
cleanPaste: {
init: function (trumbowyg) {
trumbowyg.pasteHandlers.push(function () {
try {
var contentBefore = trumbowyg.$ed.html();
setTimeout(function () {
var contentAfter = trumbowyg.$ed.html();
contentAfter = cleanIt(contentBefore, contentAfter);
trumbowyg.$ed.html(contentAfter);
}, 0);
} catch (c) {
}
});
}
}
}
});
})(jQuery);

View File

@ -1,168 +0,0 @@
/* ===========================================================
* trumbowyg.colors.js v1.2
* Colors picker plugin for Trumbowyg
* http://alex-d.github.com/Trumbowyg
* ===========================================================
* Author : Alexandre Demode (Alex-D)
* Twitter : @AlexandreDemode
* Website : alex-d.fr
*/
(function ($) {
'use strict';
$.extend(true, $.trumbowyg, {
langs: {
// jshint camelcase:false
cs: {
foreColor: 'Barva textu',
backColor: 'Barva pozadí'
},
en: {
foreColor: 'Text color',
backColor: 'Background color'
},
fr: {
foreColor: 'Couleur du texte',
backColor: 'Couleur de fond'
},
sk: {
foreColor: 'Farba textu',
backColor: 'Farba pozadia'
},
zh_cn: {
foreColor: '文字颜色',
backColor: '背景颜色'
}
}
});
// jshint camelcase:true
function hex(x) {
return ('0' + parseInt(x).toString(16)).slice(-2);
}
function colorToHex(rgb) {
if (rgb.search('rgb') === -1) {
return rgb.replace('#', '');
} else if (rgb === 'rgba(0, 0, 0, 0)') {
return 'transparent';
} else {
rgb = rgb.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+))?\)$/);
return hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
}
}
function colorTagHandler(element, trumbowyg) {
var tags = [];
if(!element.style){
return tags;
}
// background color
if (element.style.backgroundColor !== '') {
var backColor = colorToHex(element.style.backgroundColor);
if (trumbowyg.o.plugins.colors.colorList.indexOf(backColor) >= 0) {
tags.push('backColor' + backColor);
} else {
tags.push('backColorFree');
}
}
// text color
var foreColor;
if (element.style.color !== '') {
foreColor = colorToHex(element.style.color);
} else if (element.hasAttribute('color')) {
foreColor = colorToHex(element.getAttribute('color'));
}
if (foreColor) {
if (trumbowyg.o.plugins.colors.colorList.indexOf(foreColor) >= 0) {
tags.push('foreColor' + foreColor);
} else {
tags.push('foreColorFree');
}
}
return tags;
}
var defaultOptions = {
colorList: ['ffffff', '000000', 'eeece1', '1f497d', '4f81bd', 'c0504d', '9bbb59', '8064a2', '4bacc6', 'f79646', 'ffff00', 'f2f2f2', '7f7f7f', 'ddd9c3', 'c6d9f0', 'dbe5f1', 'f2dcdb', 'ebf1dd', 'e5e0ec', 'dbeef3', 'fdeada', 'fff2ca', 'd8d8d8', '595959', 'c4bd97', '8db3e2', 'b8cce4', 'e5b9b7', 'd7e3bc', 'ccc1d9', 'b7dde8', 'fbd5b5', 'ffe694', 'bfbfbf', '3f3f3f', '938953', '548dd4', '95b3d7', 'd99694', 'c3d69b', 'b2a2c7', 'b7dde8', 'fac08f', 'f2c314', 'a5a5a5', '262626', '494429', '17365d', '366092', '953734', '76923c', '5f497a', '92cddc', 'e36c09', 'c09100', '7f7f7f', '0c0c0c', '1d1b10', '0f243e', '244061', '632423', '4f6128', '3f3151', '31859b', '974806', '7f6000']
};
// Add all colors in two dropdowns
$.extend(true, $.trumbowyg, {
plugins: {
color: {
init: function (trumbowyg) {
trumbowyg.o.plugins.colors = trumbowyg.o.plugins.colors || defaultOptions;
var foreColorBtnDef = {
dropdown: buildDropdown('foreColor', trumbowyg)
},
backColorBtnDef = {
dropdown: buildDropdown('backColor', trumbowyg)
};
trumbowyg.addBtnDef('foreColor', foreColorBtnDef);
trumbowyg.addBtnDef('backColor', backColorBtnDef);
},
tagHandler: colorTagHandler
}
}
});
function buildDropdown(fn, trumbowyg) {
var dropdown = [];
$.each(trumbowyg.o.plugins.colors.colorList, function (i, color) {
var btn = fn + color,
btnDef = {
fn: fn,
forceCss: true,
param: '#' + color,
style: 'background-color: #' + color + ';'
};
trumbowyg.addBtnDef(btn, btnDef);
dropdown.push(btn);
});
var removeColorButtonName = fn + 'Remove',
removeColorBtnDef = {
fn: 'removeFormat',
param: fn,
style: 'background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAG0lEQVQIW2NkQAAfEJMRmwBYhoGBYQtMBYoAADziAp0jtJTgAAAAAElFTkSuQmCC);'
};
trumbowyg.addBtnDef(removeColorButtonName, removeColorBtnDef);
dropdown.push(removeColorButtonName);
// add free color btn
var freeColorButtonName = fn + 'Free',
freeColorBtnDef = {
fn: function () {
trumbowyg.openModalInsert(trumbowyg.lang[fn],
{
color: {
label: fn,
value: '#FFFFFF'
}
},
// callback
function (values) {
trumbowyg.execCmd(fn, values.color);
return true;
}
);
},
text: '#',
// style adjust for displaying the text
style: 'text-indent: 0;line-height: 20px;padding: 0 5px;'
};
trumbowyg.addBtnDef(freeColorButtonName, freeColorBtnDef);
dropdown.push(freeColorButtonName);
return dropdown;
}
})(jQuery);

View File

@ -1 +1 @@
!function(o){"use strict";function r(o){return("0"+parseInt(o).toString(16)).slice(-2)}function e(o){return-1===o.search("rgb")?o.replace("#",""):"rgba(0, 0, 0, 0)"===o?"transparent":(o=o.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+))?\)$/),r(o[1])+r(o[2])+r(o[3]))}function f(o,r){var f=[];if(!o.style)return f;if(""!==o.style.backgroundColor){var c=e(o.style.backgroundColor);r.o.plugins.colors.colorList.indexOf(c)>=0?f.push("backColor"+c):f.push("backColorFree")}var a;return""!==o.style.color?a=e(o.style.color):o.hasAttribute("color")&&(a=e(o.getAttribute("color"))),a&&(r.o.plugins.colors.colorList.indexOf(a)>=0?f.push("foreColor"+a):f.push("foreColorFree")),f}function c(r,e){var f=[];o.each(e.o.plugins.colors.colorList,function(o,c){var a=r+c,d={fn:r,forceCss:!0,param:"#"+c,style:"background-color: #"+c+";"};e.addBtnDef(a,d),f.push(a)});var c=r+"Remove",a={fn:"removeFormat",param:r,style:"background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAG0lEQVQIW2NkQAAfEJMRmwBYhoGBYQtMBYoAADziAp0jtJTgAAAAAElFTkSuQmCC);"};e.addBtnDef(c,a),f.push(c);var d=r+"Free",t={fn:function(){e.openModalInsert(e.lang[r],{color:{label:r,value:"#FFFFFF"}},function(o){return e.execCmd(r,o.color),!0})},text:"#",style:"text-indent: 0;line-height: 20px;padding: 0 5px;"};return e.addBtnDef(d,t),f.push(d),f}o.extend(!0,o.trumbowyg,{langs:{cs:{foreColor:"Barva textu",backColor:"Barva pozadí"},en:{foreColor:"Text color",backColor:"Background color"},fr:{foreColor:"Couleur du texte",backColor:"Couleur de fond"},sk:{foreColor:"Farba textu",backColor:"Farba pozadia"},zh_cn:{foreColor:"文字颜色",backColor:"背景颜色"}}});var a={colorList:["ffffff","000000","eeece1","1f497d","4f81bd","c0504d","9bbb59","8064a2","4bacc6","f79646","ffff00","f2f2f2","7f7f7f","ddd9c3","c6d9f0","dbe5f1","f2dcdb","ebf1dd","e5e0ec","dbeef3","fdeada","fff2ca","d8d8d8","595959","c4bd97","8db3e2","b8cce4","e5b9b7","d7e3bc","ccc1d9","b7dde8","fbd5b5","ffe694","bfbfbf","3f3f3f","938953","548dd4","95b3d7","d99694","c3d69b","b2a2c7","b7dde8","fac08f","f2c314","a5a5a5","262626","494429","17365d","366092","953734","76923c","5f497a","92cddc","e36c09","c09100","7f7f7f","0c0c0c","1d1b10","0f243e","244061","632423","4f6128","3f3151","31859b","974806","7f6000"]};o.extend(!0,o.trumbowyg,{plugins:{color:{init:function(o){o.o.plugins.colors=o.o.plugins.colors||a;var r={dropdown:c("foreColor",o)},e={dropdown:c("backColor",o)};o.addBtnDef("foreColor",r),o.addBtnDef("backColor",e)},tagHandler:f}}})}(jQuery);
!function(o){"use strict";function r(o){return("0"+parseInt(o).toString(16)).slice(-2)}function e(o){return-1===o.search("rgb")?o.replace("#",""):"rgba(0, 0, 0, 0)"===o?"transparent":(o=o.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+))?\)$/),r(o[1])+r(o[2])+r(o[3]))}function f(o,r){var f=[];if(!o.style)return f;if(""!==o.style.backgroundColor){var c=e(o.style.backgroundColor);r.o.plugins.colors.colorList.indexOf(c)>=0?f.push("backColor"+c):f.push("backColorFree")}var a;return""!==o.style.color?a=e(o.style.color):o.hasAttribute("color")&&(a=e(o.getAttribute("color"))),a&&(r.o.plugins.colors.colorList.indexOf(a)>=0?f.push("foreColor"+a):f.push("foreColorFree")),f}function c(r,e){var f=[];o.each(e.o.plugins.colors.colorList,function(o,c){var a=r+c,d={fn:r,forceCss:!0,param:"#"+c,style:"background-color: #"+c+";"};e.addBtnDef(a,d),f.push(a)});var c=r+"Remove",a={fn:"removeFormat",param:r,style:"background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAG0lEQVQIW2NkQAAfEJMRmwBYhoGBYQtMBYoAADziAp0jtJTgAAAAAElFTkSuQmCC);"};e.addBtnDef(c,a),f.push(c);var d=r+"Free",l={fn:function(){e.openModalInsert(e.lang[r],{color:{label:r,value:"#FFFFFF"}},function(o){return e.execCmd(r,o.color),!0})},text:"#",style:"text-indent: 0;line-height: 20px;padding: 0 5px;"};return e.addBtnDef(d,l),f.push(d),f}o.extend(!0,o.trumbowyg,{langs:{cs:{foreColor:"Barva textu",backColor:"Barva pozadí"},en:{foreColor:"Text color",backColor:"Background color"},fr:{foreColor:"Couleur du texte",backColor:"Couleur de fond"},sk:{foreColor:"Farba textu",backColor:"Farba pozadia"},zh_cn:{foreColor:"文字颜色",backColor:"背景颜色"},ru:{foreColor:"Цвет текста",backColor:"Цвет выделения текста"},ja:{foreColor:"文字色",backColor:"背景色"}}});var a={colorList:["ffffff","000000","eeece1","1f497d","4f81bd","c0504d","9bbb59","8064a2","4bacc6","f79646","ffff00","f2f2f2","7f7f7f","ddd9c3","c6d9f0","dbe5f1","f2dcdb","ebf1dd","e5e0ec","dbeef3","fdeada","fff2ca","d8d8d8","595959","c4bd97","8db3e2","b8cce4","e5b9b7","d7e3bc","ccc1d9","b7dde8","fbd5b5","ffe694","bfbfbf","3f3f3f","938953","548dd4","95b3d7","d99694","c3d69b","b2a2c7","b7dde8","fac08f","f2c314","a5a5a5","262626","494429","17365d","366092","953734","76923c","5f497a","92cddc","e36c09","c09100","7f7f7f","0c0c0c","1d1b10","0f243e","244061","632423","4f6128","3f3151","31859b","974806","7f6000"]};o.extend(!0,o.trumbowyg,{plugins:{color:{init:function(o){o.o.plugins.colors=o.o.plugins.colors||a;var r={dropdown:c("foreColor",o)},e={dropdown:c("backColor",o)};o.addBtnDef("foreColor",r),o.addBtnDef("backColor",e)},tagHandler:f}}})}(jQuery);

View File

@ -1,49 +0,0 @@
/**
* Trumbowyg v2.5.0 - A lightweight WYSIWYG editor
* Colors plugin stylesheet for Trumbowyg editor
* ------------------------
* @link http://alex-d.github.io/Trumbowyg
* @license MIT
* @author Alexandre Demode (Alex-D)
* Twitter : @AlexandreDemode
* Website : alex-d.fr
*/
.trumbowyg-dropdown-foreColor,
.trumbowyg-dropdown-backColor {
width: 276px;
padding: 7px 5px;
svg {
display: none !important;
}
button {
display: block;
position: relative;
float: left;
text-indent: -9999px;
height: 20px;
width: 20px;
border: 1px solid #333;
padding: 0;
margin: 2px;
&:hover,
&:focus {
&::after {
content: " ";
display: block;
position: absolute;
top: -5px;
left: -5px;
height: 27px;
width: 27px;
background: inherit;
border: 1px solid #FFF;
box-shadow: #000 0 0 2px;
z-index: 10;
}
}
}
}

View File

@ -1,43 +0,0 @@
/**
* Trumbowyg v2.5.0 - A lightweight WYSIWYG editor
* Colors plugin stylesheet for Trumbowyg editor
* ------------------------
* @link http://alex-d.github.io/Trumbowyg
* @license MIT
* @author Alexandre Demode (Alex-D)
* Twitter : @AlexandreDemode
* Website : alex-d.fr
*/
.trumbowyg-dropdown-foreColor,
.trumbowyg-dropdown-backColor {
width: 276px;
padding: 7px 5px; }
.trumbowyg-dropdown-foreColor svg,
.trumbowyg-dropdown-backColor svg {
display: none !important; }
.trumbowyg-dropdown-foreColor button,
.trumbowyg-dropdown-backColor button {
display: block;
position: relative;
float: left;
text-indent: -9999px;
height: 20px;
width: 20px;
border: 1px solid #333;
padding: 0;
margin: 2px; }
.trumbowyg-dropdown-foreColor button:hover::after, .trumbowyg-dropdown-foreColor button:focus::after,
.trumbowyg-dropdown-backColor button:hover::after,
.trumbowyg-dropdown-backColor button:focus::after {
content: " ";
display: block;
position: absolute;
top: -5px;
left: -5px;
height: 27px;
width: 27px;
background: inherit;
border: 1px solid #FFF;
box-shadow: #000 0 0 2px;
z-index: 10; }

View File

@ -1,2 +1,2 @@
/** Trumbowyg v2.5.0 - A lightweight WYSIWYG editor - alex-d.github.io/Trumbowyg - License MIT - Author : Alexandre Demode (Alex-D) / alex-d.fr */
/** Trumbowyg v2.8.1 - A lightweight WYSIWYG editor - alex-d.github.io/Trumbowyg - License MIT - Author : Alexandre Demode (Alex-D) / alex-d.fr */
.trumbowyg-dropdown-backColor,.trumbowyg-dropdown-foreColor{width:276px;padding:7px 5px}.trumbowyg-dropdown-backColor svg,.trumbowyg-dropdown-foreColor svg{display:none!important}.trumbowyg-dropdown-backColor button,.trumbowyg-dropdown-foreColor button{display:block;position:relative;float:left;text-indent:-9999px;height:20px;width:20px;border:1px solid #333;padding:0;margin:2px}.trumbowyg-dropdown-backColor button:focus::after,.trumbowyg-dropdown-backColor button:hover::after,.trumbowyg-dropdown-foreColor button:focus::after,.trumbowyg-dropdown-foreColor button:hover::after{content:" ";display:block;position:absolute;top:-5px;left:-5px;height:27px;width:27px;background:inherit;border:1px solid #FFF;box-shadow:#000 0 0 2px;z-index:10}

View File

@ -1,938 +0,0 @@
/* ===========================================================
* trumbowyg.emoji.js v0.1
* Emoji picker plugin for Trumbowyg
* http://alex-d.github.com/Trumbowyg
* ===========================================================
* Author : Nicolas Pion
* Twitter : @nicolas_pion
*/
(function ($) {
'use strict';
var defaultOptions = {
emojiList: [
':bowtie:',
':smile:',
':laughing:',
':blush:',
':smiley:',
':relaxed:',
':smirk:',
':heart_eyes:',
':kissing_heart:',
':kissing_closed_eyes:',
':flushed:',
':relieved:',
':satisfied:',
':grin:',
':wink:',
':stuck_out_tongue_winking_eye:',
':stuck_out_tongue_closed_eyes:',
':grinning:',
':kissing:',
':kissing_smiling_eyes:',
':stuck_out_tongue:',
':sleeping:',
':worried:',
':frowning:',
':anguished:',
':open_mouth:',
':grimacing:',
':confused:',
':hushed:',
':expressionless:',
':unamused:',
':sweat_smile:',
':sweat:',
':disappointed_relieved:',
':weary:',
':pensive:',
':disappointed:',
':confounded:',
':fearful:',
':cold_sweat:',
':persevere:',
':cry:',
':sob:',
':joy:',
':astonished:',
':scream:',
':neckbeard:',
':tired_face:',
':angry:',
':rage:',
':triumph:',
':sleepy:',
':yum:',
':mask:',
':sunglasses:',
':dizzy_face:',
':imp:',
':smiling_imp:',
':neutral_face:',
':no_mouth:',
':innocent:',
':alien:',
':yellow_heart:',
':blue_heart:',
':purple_heart:',
':heart:',
':green_heart:',
':broken_heart:',
':heartbeat:',
':heartpulse:',
':two_hearts:',
':revolving_hearts:',
':cupid:',
':sparkling_heart:',
':sparkles:',
':star:',
':star2:',
':dizzy:',
':boom:',
':collision:',
':anger:',
':exclamation:',
':question:',
':grey_exclamation:',
':grey_question:',
':zzz:',
':dash:',
':sweat_drops:',
':notes:',
':musical_note:',
':fire:',
':hankey:',
':poop:',
':shit:',
':+1:',
':thumbsup:',
':-1:',
':thumbsdown:',
':ok_hand:',
':punch:',
':facepunch:',
':fist:',
':v:',
':wave:',
':hand:',
':raised_hand:',
':open_hands:',
':point_up:',
':point_down:',
':point_left:',
':point_right:',
':raised_hands:',
':pray:',
':point_up_2:',
':clap:',
':muscle:',
':metal:',
':fu:',
':runner:',
':running:',
':couple:',
':family:',
':two_men_holding_hands:',
':two_women_holding_hands:',
':dancer:',
':dancers:',
':ok_woman:',
':no_good:',
':information_desk_person:',
':raising_hand:',
':bride_with_veil:',
':person_with_pouting_face:',
':person_frowning:',
':bow:',
':couplekiss:',
':couple_with_heart:',
':massage:',
':haircut:',
':nail_care:',
':boy:',
':girl:',
':woman:',
':man:',
':baby:',
':older_woman:',
':older_man:',
':person_with_blond_hair:',
':man_with_gua_pi_mao:',
':man_with_turban:',
':construction_worker:',
':cop:',
':angel:',
':princess:',
':smiley_cat:',
':smile_cat:',
':heart_eyes_cat:',
':kissing_cat:',
':smirk_cat:',
':scream_cat:',
':crying_cat_face:',
':joy_cat:',
':pouting_cat:',
':japanese_ogre:',
':japanese_goblin:',
':see_no_evil:',
':hear_no_evil:',
':speak_no_evil:',
':guardsman:',
':skull:',
':feet:',
':lips:',
':kiss:',
':droplet:',
':ear:',
':eyes:',
':nose:',
':tongue:',
':love_letter:',
':bust_in_silhouette:',
':busts_in_silhouette:',
':speech_balloon:',
':thought_balloon:',
':feelsgood:',
':finnadie:',
':goberserk:',
':godmode:',
':hurtrealbad:',
':rage1:',
':rage2:',
':rage3:',
':rage4:',
':suspect:',
':trollface:',
':sunny:',
':umbrella:',
':cloud:',
':snowflake:',
':snowman:',
':zap:',
':cyclone:',
':foggy:',
':ocean:',
':cat:',
':dog:',
':mouse:',
':hamster:',
':rabbit:',
':wolf:',
':frog:',
':tiger:',
':koala:',
':bear:',
':pig:',
':pig_nose:',
':cow:',
':boar:',
':monkey_face:',
':monkey:',
':horse:',
':racehorse:',
':camel:',
':sheep:',
':elephant:',
':panda_face:',
':snake:',
':bird:',
':baby_chick:',
':hatched_chick:',
':hatching_chick:',
':chicken:',
':penguin:',
':turtle:',
':bug:',
':honeybee:',
':ant:',
':beetle:',
':snail:',
':octopus:',
':tropical_fish:',
':fish:',
':whale:',
':whale2:',
':dolphin:',
':cow2:',
':ram:',
':rat:',
':water_buffalo:',
':tiger2:',
':rabbit2:',
':dragon:',
':goat:',
':rooster:',
':dog2:',
':pig2:',
':mouse2:',
':ox:',
':dragon_face:',
':blowfish:',
':crocodile:',
':dromedary_camel:',
':leopard:',
':cat2:',
':poodle:',
':paw_prints:',
':bouquet:',
':cherry_blossom:',
':tulip:',
':four_leaf_clover:',
':rose:',
':sunflower:',
':hibiscus:',
':maple_leaf:',
':leaves:',
':fallen_leaf:',
':herb:',
':mushroom:',
':cactus:',
':palm_tree:',
':evergreen_tree:',
':deciduous_tree:',
':chestnut:',
':seedling:',
':blossom:',
':ear_of_rice:',
':shell:',
':globe_with_meridians:',
':sun_with_face:',
':full_moon_with_face:',
':new_moon_with_face:',
':new_moon:',
':waxing_crescent_moon:',
':first_quarter_moon:',
':waxing_gibbous_moon:',
':full_moon:',
':waning_gibbous_moon:',
':last_quarter_moon:',
':waning_crescent_moon:',
':last_quarter_moon_with_face:',
':first_quarter_moon_with_face:',
':crescent_moon:',
':earth_africa:',
':earth_americas:',
':earth_asia:',
':volcano:',
':milky_way:',
':partly_sunny:',
':octocat:',
':squirrel:',
':bamboo:',
':gift_heart:',
':dolls:',
':school_satchel:',
':mortar_board:',
':flags:',
':fireworks:',
':sparkler:',
':wind_chime:',
':rice_scene:',
':jack_o_lantern:',
':ghost:',
':santa:',
':christmas_tree:',
':gift:',
':bell:',
':no_bell:',
':tanabata_tree:',
':tada:',
':confetti_ball:',
':balloon:',
':crystal_ball:',
':cd:',
':dvd:',
':floppy_disk:',
':camera:',
':video_camera:',
':movie_camera:',
':computer:',
':tv:',
':iphone:',
':phone:',
':telephone:',
':telephone_receiver:',
':pager:',
':fax:',
':minidisc:',
':vhs:',
':sound:',
':speaker:',
':mute:',
':loudspeaker:',
':mega:',
':hourglass:',
':hourglass_flowing_sand:',
':alarm_clock:',
':watch:',
':radio:',
':satellite:',
':loop:',
':mag:',
':mag_right:',
':unlock:',
':lock:',
':lock_with_ink_pen:',
':closed_lock_with_key:',
':key:',
':bulb:',
':flashlight:',
':high_brightness:',
':low_brightness:',
':electric_plug:',
':battery:',
':calling:',
':email:',
':mailbox:',
':postbox:',
':bath:',
':bathtub:',
':shower:',
':toilet:',
':wrench:',
':nut_and_bolt:',
':hammer:',
':seat:',
':moneybag:',
':yen:',
':dollar:',
':pound:',
':euro:',
':credit_card:',
':money_with_wings:',
':e-mail:',
':inbox_tray:',
':outbox_tray:',
':envelope:',
':incoming_envelope:',
':postal_horn:',
':mailbox_closed:',
':mailbox_with_mail:',
':mailbox_with_no_mail:',
':package:',
':door:',
':smoking:',
':bomb:',
':gun:',
':hocho:',
':pill:',
':syringe:',
':page_facing_up:',
':page_with_curl:',
':bookmark_tabs:',
':bar_chart:',
':chart_with_upwards_trend:',
':chart_with_downwards_trend:',
':scroll:',
':clipboard:',
':calendar:',
':date:',
':card_index:',
':file_folder:',
':open_file_folder:',
':scissors:',
':pushpin:',
':paperclip:',
':black_nib:',
':pencil2:',
':straight_ruler:',
':triangular_ruler:',
':closed_book:',
':green_book:',
':blue_book:',
':orange_book:',
':notebook:',
':notebook_with_decorative_cover:',
':ledger:',
':books:',
':bookmark:',
':name_badge:',
':microscope:',
':telescope:',
':newspaper:',
':football:',
':basketball:',
':soccer:',
':baseball:',
':tennis:',
':8ball:',
':rugby_football:',
':bowling:',
':golf:',
':mountain_bicyclist:',
':bicyclist:',
':horse_racing:',
':snowboarder:',
':swimmer:',
':surfer:',
':ski:',
':spades:',
':hearts:',
':clubs:',
':diamonds:',
':gem:',
':ring:',
':trophy:',
':musical_score:',
':musical_keyboard:',
':violin:',
':space_invader:',
':video_game:',
':black_joker:',
':flower_playing_cards:',
':game_die:',
':dart:',
':mahjong:',
':clapper:',
':memo:',
':pencil:',
':book:',
':art:',
':microphone:',
':headphones:',
':trumpet:',
':saxophone:',
':guitar:',
':shoe:',
':sandal:',
':high_heel:',
':lipstick:',
':boot:',
':shirt:',
':tshirt:',
':necktie:',
':womans_clothes:',
':dress:',
':running_shirt_with_sash:',
':jeans:',
':kimono:',
':bikini:',
':ribbon:',
':tophat:',
':crown:',
':womans_hat:',
':mans_shoe:',
':closed_umbrella:',
':briefcase:',
':handbag:',
':pouch:',
':purse:',
':eyeglasses:',
':fishing_pole_and_fish:',
':coffee:',
':tea:',
':sake:',
':baby_bottle:',
':beer:',
':beers:',
':cocktail:',
':tropical_drink:',
':wine_glass:',
':fork_and_knife:',
':pizza:',
':hamburger:',
':fries:',
':poultry_leg:',
':meat_on_bone:',
':spaghetti:',
':curry:',
':fried_shrimp:',
':bento:',
':sushi:',
':fish_cake:',
':rice_ball:',
':rice_cracker:',
':rice:',
':ramen:',
':stew:',
':oden:',
':dango:',
':egg:',
':bread:',
':doughnut:',
':custard:',
':icecream:',
':ice_cream:',
':shaved_ice:',
':birthday:',
':cake:',
':cookie:',
':chocolate_bar:',
':candy:',
':lollipop:',
':honey_pot:',
':apple:',
':green_apple:',
':tangerine:',
':lemon:',
':cherries:',
':grapes:',
':watermelon:',
':strawberry:',
':peach:',
':melon:',
':banana:',
':pear:',
':pineapple:',
':sweet_potato:',
':eggplant:',
':tomato:',
':corn:',
':house:',
':house_with_garden:',
':school:',
':office:',
':post_office:',
':hospital:',
':bank:',
':convenience_store:',
':love_hotel:',
':hotel:',
':wedding:',
':church:',
':department_store:',
':european_post_office:',
':city_sunrise:',
':city_sunset:',
':japanese_castle:',
':european_castle:',
':tent:',
':factory:',
':tokyo_tower:',
':japan:',
':mount_fuji:',
':sunrise_over_mountains:',
':sunrise:',
':stars:',
':statue_of_liberty:',
':bridge_at_night:',
':carousel_horse:',
':rainbow:',
':ferris_wheel:',
':fountain:',
':roller_coaster:',
':ship:',
':speedboat:',
':boat:',
':sailboat:',
':rowboat:',
':anchor:',
':rocket:',
':airplane:',
':helicopter:',
':steam_locomotive:',
':tram:',
':mountain_railway:',
':bike:',
':aerial_tramway:',
':suspension_railway:',
':mountain_cableway:',
':tractor:',
':blue_car:',
':oncoming_automobile:',
':car:',
':red_car:',
':taxi:',
':oncoming_taxi:',
':articulated_lorry:',
':bus:',
':oncoming_bus:',
':rotating_light:',
':police_car:',
':oncoming_police_car:',
':fire_engine:',
':ambulance:',
':minibus:',
':truck:',
':train:',
':station:',
':train2:',
':bullettrain_front:',
':bullettrain_side:',
':light_rail:',
':monorail:',
':railway_car:',
':trolleybus:',
':ticket:',
':fuelpump:',
':vertical_traffic_light:',
':traffic_light:',
':warning:',
':construction:',
':beginner:',
':atm:',
':slot_machine:',
':busstop:',
':barber:',
':hotsprings:',
':checkered_flag:',
':crossed_flags:',
':izakaya_lantern:',
':moyai:',
':circus_tent:',
':performing_arts:',
':round_pushpin:',
':triangular_flag_on_post:',
':jp:',
':kr:',
':cn:',
':us:',
':fr:',
':es:',
':it:',
':ru:',
':gb:',
':uk:',
':de:',
':one:',
':two:',
':three:',
':four:',
':five:',
':six:',
':seven:',
':eight:',
':nine:',
':keycap_ten:',
':1234:',
':zero:',
':hash:',
':symbols:',
':arrow_backward:',
':arrow_down:',
':arrow_forward:',
':arrow_left:',
':capital_abcd:',
':abcd:',
':abc:',
':arrow_lower_left:',
':arrow_lower_right:',
':arrow_right:',
':arrow_up:',
':arrow_upper_left:',
':arrow_upper_right:',
':arrow_double_down:',
':arrow_double_up:',
':arrow_down_small:',
':arrow_heading_down:',
':arrow_heading_up:',
':leftwards_arrow_with_hook:',
':arrow_right_hook:',
':left_right_arrow:',
':arrow_up_down:',
':arrow_up_small:',
':arrows_clockwise:',
':arrows_counterclockwise:',
':rewind:',
':fast_forward:',
':information_source:',
':ok:',
':twisted_rightwards_arrows:',
':repeat:',
':repeat_one:',
':new:',
':top:',
':up:',
':cool:',
':free:',
':ng:',
':cinema:',
':koko:',
':signal_strength:',
':u5272:',
':u5408:',
':u55b6:',
':u6307:',
':u6708:',
':u6709:',
':u6e80:',
':u7121:',
':u7533:',
':u7a7a:',
':u7981:',
':sa:',
':restroom:',
':mens:',
':womens:',
':baby_symbol:',
':no_smoking:',
':parking:',
':wheelchair:',
':metro:',
':baggage_claim:',
':accept:',
':wc:',
':potable_water:',
':put_litter_in_its_place:',
':secret:',
':congratulations:',
':m:',
':passport_control:',
':left_luggage:',
':customs:',
':ideograph_advantage:',
':cl:',
':sos:',
':id:',
':no_entry_sign:',
':underage:',
':no_mobile_phones:',
':do_not_litter:',
':non-potable_water:',
':no_bicycles:',
':no_pedestrians:',
':children_crossing:',
':no_entry:',
':eight_spoked_asterisk:',
':sparkle:',
':eight_pointed_black_star:',
':heart_decoration:',
':vs:',
':vibration_mode:',
':mobile_phone_off:',
':chart:',
':currency_exchange:',
':aries:',
':taurus:',
':gemini:',
':cancer:',
':leo:',
':virgo:',
':libra:',
':scorpius:',
':sagittarius:',
':capricorn:',
':aquarius:',
':pisces:',
':ophiuchus:',
':six_pointed_star:',
':negative_squared_cross_mark:',
':a:',
':b:',
':ab:',
':o2:',
':diamond_shape_with_a_dot_inside:',
':recycle:',
':end:',
':back:',
':on:',
':soon:',
':clock1:',
':clock130:',
':clock10:',
':clock1030:',
':clock11:',
':clock1130:',
':clock12:',
':clock1230:',
':clock2:',
':clock230:',
':clock3:',
':clock330:',
':clock4:',
':clock430:',
':clock5:',
':clock530:',
':clock6:',
':clock630:',
':clock7:',
':clock730:',
':clock8:',
':clock830:',
':clock9:',
':clock930:',
':heavy_dollar_sign:',
':copyright:',
':registered:',
':tm:',
':x:',
':heavy_exclamation_mark:',
':bangbang:',
':interrobang:',
':o:',
':heavy_multiplication_x:',
':heavy_plus_sign:',
':heavy_minus_sign:',
':heavy_division_sign:',
':white_flower:',
':100:',
':heavy_check_mark:',
':ballot_box_with_check:',
':radio_button:',
':link:',
':curly_loop:',
':wavy_dash:',
':part_alternation_mark:',
':trident:',
':black_small_square:',
':white_small_square:',
':black_medium_small_square:',
':white_medium_small_square:',
':black_medium_square:',
':white_medium_square:',
':black_large_square:',
':white_large_square:',
':white_check_mark:',
':black_square_button:',
':white_square_button:',
':black_circle:',
':white_circle:',
':red_circle:',
':large_blue_circle:',
':large_blue_diamond:',
':large_orange_diamond:',
':small_blue_diamond:',
':small_orange_diamond:',
':small_red_triangle:',
':small_red_triangle_down:',
':shipit:'
]
};
// Add all emoji in a dropdown
$.extend(true, $.trumbowyg, {
langs: {
en: {
emoji: 'Add an emoji'
},
fr: {
emoji: 'Ajouter un emoji'
},
zh_cn: {
emoji: '添加表情'
}
},
plugins: {
emoji: {
init: function (trumbowyg) {
trumbowyg.o.plugins.emoji = $.extend(true, {}, defaultOptions, trumbowyg.o.plugins.emoji || {});
var emojiBtnDef = {
dropdown: buildDropdown(trumbowyg)
};
trumbowyg.addBtnDef('emoji', emojiBtnDef);
}
}
}
});
function buildDropdown(trumbowyg) {
var dropdown = [];
$.each(trumbowyg.o.plugins.emoji.emojiList, function (i, emoji) {
var btn = emoji,
btnDef = {
param: emoji,
fn: function () {
trumbowyg.execCmd('insertText', emoji);
return true;
}
};
trumbowyg.addBtnDef(btn, btnDef);
dropdown.push(btn);
});
return dropdown;
}
})(jQuery);

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,2 @@
/** Trumbowyg v2.8.1 - A lightweight WYSIWYG editor - alex-d.github.io/Trumbowyg - License MIT - Author : Alexandre Demode (Alex-D) / alex-d.fr */
.trumbowyg-dropdown-emoji{width:265px;padding:7px 0 7px 5px;height:200px;overflow-y:scroll;overflow-x:hidden}.trumbowyg-dropdown-emoji svg{display:none!important}.trumbowyg-dropdown-emoji button{display:block;position:relative;float:left;height:26px;width:26px;padding:0;margin:2px;line-height:24px;text-align:center}.trumbowyg-dropdown-emoji button:focus::after,.trumbowyg-dropdown-emoji button:hover::after{display:block;position:absolute;top:-5px;left:-5px;height:27px;width:27px;background:inherit;box-shadow:#000 0 0 2px;z-index:10;background-color:transparent}.trumbowyg .emoji{width:22px;height:22px;display:inline-block}

View File

@ -1,77 +0,0 @@
/*/* ===========================================================
* trumbowyg.insertaudio.js v1.0
* InsertAudio plugin for Trumbowyg
* http://alex-d.github.com/Trumbowyg
* ===========================================================
* Author : Adam Hess (AdamHess)
*/
(function ($) {
'use strict';
var insertAudioOptions = {
src: {
label: 'URL',
required: true
},
autoplay: {
label: 'AutoPlay',
required: false,
type: 'checkbox'
},
muted: {
label: 'Muted',
required: false,
type: 'checkbox'
},
preload: {
label: 'preload options',
required: false
}
};
$.extend(true, $.trumbowyg, {
langs: {
en: {
insertAudio: 'Insert Audio'
}
},
plugins: {
insertAudio: {
init: function (trumbowyg) {
var btnDef = {
fn: function () {
var insertAudioCallback = function (v) {
// controls should always be show otherwise the audio will
// be invisible defeating the point of a wysiwyg
var html = '<audio controls';
if (v.src) {
html += ' src=\'' + v.src + '\'';
}
if (v.autoplay) {
html += ' autoplay';
}
if (v.muted) {
html += ' muted';
}
if (v.preload) {
html += ' preload=\'' + v + '\'';
}
html += '></audio>';
var node = $(html)[0];
trumbowyg.range.deleteContents();
trumbowyg.range.insertNode(node);
return true;
};
trumbowyg.openModalInsert(trumbowyg.lang.insertAudio, insertAudioOptions, insertAudioCallback);
}
};
trumbowyg.addBtnDef('insertAudio', btnDef);
}
}
}
});
})(jQuery);

View File

@ -1 +1 @@
!function(e){"use strict";var r={src:{label:"URL",required:!0},autoplay:{label:"AutoPlay",required:!1,type:"checkbox"},muted:{label:"Muted",required:!1,type:"checkbox"},preload:{label:"preload options",required:!1}};e.extend(!0,e.trumbowyg,{langs:{en:{insertAudio:"Insert Audio"}},plugins:{insertAudio:{init:function(t){var n={fn:function(){var n=function(r){var n="<audio controls";r.src&&(n+=" src='"+r.src+"'"),r.autoplay&&(n+=" autoplay"),r.muted&&(n+=" muted"),r.preload&&(n+=" preload='"+r+"'"),n+="></audio>";var o=e(n)[0];return t.range.deleteContents(),t.range.insertNode(o),!0};t.openModalInsert(t.lang.insertAudio,r,n)}};t.addBtnDef("insertAudio",n)}}}})}(jQuery);
!function(e){"use strict";var r={src:{label:"URL",required:!0},autoplay:{label:"AutoPlay",required:!1,type:"checkbox"},muted:{label:"Muted",required:!1,type:"checkbox"},preload:{label:"preload options",required:!1}};e.extend(!0,e.trumbowyg,{langs:{en:{insertAudio:"Insert Audio"},ru:{insertAudio:"Вставить аудио"},ja:{insertAudio:"音声の挿入"}},plugins:{insertAudio:{init:function(t){var n={fn:function(){var n=function(r){var n="<audio controls";r.src&&(n+=" src='"+r.src+"'"),r.autoplay&&(n+=" autoplay"),r.muted&&(n+=" muted"),r.preload&&(n+=" preload='"+r+"'"),n+="></audio>";var o=e(n)[0];return t.range.deleteContents(),t.range.insertNode(o),!0};t.openModalInsert(t.lang.insertAudio,r,n)}};t.addBtnDef("insertAudio",n)}}}})}(jQuery);

View File

@ -1,96 +0,0 @@
/* ===========================================================
* trumbowyg.noembed.js v1.0
* noEmbed plugin for Trumbowyg
* http://alex-d.github.com/Trumbowyg
* ===========================================================
* Author : Jake Johns (jakejohns)
*/
(function ($) {
'use strict';
var defaultOptions = {
proxy: 'https://noembed.com/embed?nowrap=on',
urlFiled: 'url',
data: [],
success: undefined,
error: undefined
};
$.extend(true, $.trumbowyg, {
langs: {
en: {
noembed: 'noEmbed',
noembedError: 'Error'
},
sk: {
noembedError: 'Chyba'
},
fr: {
noembed: 'noEmbed',
noembedError: 'Erreur'
},
cs: {
noembedError: 'Chyba'
}
},
plugins: {
noembed: {
init: function (trumbowyg) {
trumbowyg.o.plugins.noembed = $.extend(true, {}, defaultOptions, trumbowyg.o.plugins.noembed || {});
var btnDef = {
fn: function () {
var $modal = trumbowyg.openModalInsert(
// Title
trumbowyg.lang.noembed,
// Fields
{
url: {
label: 'URL',
required: true
}
},
// Callback
function (data) {
$.ajax({
url: trumbowyg.o.plugins.noembed.proxy,
type: 'GET',
data: data,
cache: false,
dataType: 'json',
success: trumbowyg.o.plugins.noembed.success || function (data) {
if (data.html) {
trumbowyg.execCmd('insertHTML', data.html);
setTimeout(function () {
trumbowyg.closeModal();
}, 250);
} else {
trumbowyg.addErrorOnModalField(
$('input[type=text]', $modal),
data.error
);
}
},
error: trumbowyg.o.plugins.noembed.error || function () {
trumbowyg.addErrorOnModalField(
$('input[type=text]', $modal),
trumbowyg.lang.noembedError
);
}
});
}
);
}
};
trumbowyg.addBtnDef('noembed', btnDef);
}
}
}
});
})(jQuery);

View File

@ -1 +1 @@
!function(e){"use strict";var o={proxy:"https://noembed.com/embed?nowrap=on",urlFiled:"url",data:[],success:void 0,error:void 0};e.extend(!0,e.trumbowyg,{langs:{en:{noembed:"noEmbed",noembedError:"Error"},sk:{noembedError:"Chyba"},fr:{noembed:"noEmbed",noembedError:"Erreur"},cs:{noembedError:"Chyba"}},plugins:{noembed:{init:function(n){n.o.plugins.noembed=e.extend(!0,{},o,n.o.plugins.noembed||{});var r={fn:function(){var o=n.openModalInsert(n.lang.noembed,{url:{label:"URL",required:!0}},function(r){e.ajax({url:n.o.plugins.noembed.proxy,type:"GET",data:r,cache:!1,dataType:"json",success:n.o.plugins.noembed.success||function(r){r.html?(n.execCmd("insertHTML",r.html),setTimeout(function(){n.closeModal()},250)):n.addErrorOnModalField(e("input[type=text]",o),r.error)},error:n.o.plugins.noembed.error||function(){n.addErrorOnModalField(e("input[type=text]",o),n.lang.noembedError)}})})}};n.addBtnDef("noembed",r)}}}})}(jQuery);
!function(e){"use strict";var r={proxy:"https://noembed.com/embed?nowrap=on",urlFiled:"url",data:[],success:void 0,error:void 0};e.extend(!0,e.trumbowyg,{langs:{en:{noembed:"Noembed",noembedError:"Error"},sk:{noembedError:"Chyba"},fr:{noembedError:"Erreur"},cs:{noembedError:"Chyba"},ru:{noembedError:"Ошибка"},ja:{noembedError:"エラー"}},plugins:{noembed:{init:function(o){o.o.plugins.noembed=e.extend(!0,{},r,o.o.plugins.noembed||{});var n={fn:function(){var r=o.openModalInsert(o.lang.noembed,{url:{label:"URL",required:!0}},function(n){e.ajax({url:o.o.plugins.noembed.proxy,type:"GET",data:n,cache:!1,dataType:"json",success:o.o.plugins.noembed.success||function(n){n.html?(o.execCmd("insertHTML",n.html),setTimeout(function(){o.closeModal()},250)):o.addErrorOnModalField(e("input[type=text]",r),n.error)},error:o.o.plugins.noembed.error||function(){o.addErrorOnModalField(e("input[type=text]",r),o.lang.noembedError)}})})}};o.addBtnDef("noembed",n)}}}})}(jQuery);

View File

@ -1,41 +0,0 @@
/* ===========================================================
* trumbowyg.pasteimage.js v1.0
* Basic base64 paste plugin for Trumbowyg
* http://alex-d.github.com/Trumbowyg
* ===========================================================
* Author : Alexandre Demode (Alex-D)
* Twitter : @AlexandreDemode
* Website : alex-d.fr
*/
(function ($) {
'use strict';
$.extend(true, $.trumbowyg, {
plugins: {
pasteImage: {
init: function (trumbowyg) {
trumbowyg.pasteHandlers.push(function (pasteEvent) {
try {
var items = (pasteEvent.originalEvent || pasteEvent).clipboardData.items,
reader;
for (var i = items.length -1; i >= 0; i += 1) {
if (items[i].type.match(/^image\//)) {
reader = new FileReader();
/* jshint -W083 */
reader.onloadend = function (event) {
trumbowyg.execCmd('insertImage', event.target.result, undefined, true);
};
/* jshint +W083 */
reader.readAsDataURL(items[i].getAsFile());
}
}
} catch (c) {
}
});
}
}
}
});
})(jQuery);

View File

@ -1,117 +0,0 @@
/* ===========================================================
* trumbowyg.preformatted.js v1.0
* Preformatted plugin for Trumbowyg
* http://alex-d.github.com/Trumbowyg
* ===========================================================
* Author : Casella Edoardo (Civile)
*/
(function ($) {
'use strict';
$.extend(true, $.trumbowyg, {
langs: {
// jshint camelcase:false
en: {
preformatted: 'Code sample <pre>'
},
fr: {
preformatted: 'Exemple de code'
},
it: {
preformatted: 'Codice <pre>'
},
zh_cn: {
preformatted: '代码示例 <pre>'
}
},
// jshint camelcase:true
plugins: {
preformatted: {
init: function (trumbowyg) {
var btnDef = {
fn: function () {
trumbowyg.saveRange();
var text = trumbowyg.getRangeText();
if (text.replace(/\s/g, '') !== '') {
try {
var curtag = getSelectionParentElement().tagName.toLowerCase();
if (curtag === 'code' || curtag === 'pre') {
return unwrapCode();
}
else {
trumbowyg.execCmd('insertHTML', '<pre><code>' + strip(text) + '</code></pre>');
}
} catch (e) {
}
}
},
tag: 'pre'
};
trumbowyg.addBtnDef('preformatted', btnDef);
}
}
}
});
/*
* GetSelectionParentElement
*/
function getSelectionParentElement() {
var parentEl = null,
selection;
if (window.getSelection) {
selection = window.getSelection();
if (selection.rangeCount) {
parentEl = selection.getRangeAt(0).commonAncestorContainer;
if (parentEl.nodeType !== 1) {
parentEl = parentEl.parentNode;
}
}
} else if ((selection = document.selection) && selection.type !== 'Control') {
parentEl = selection.createRange().parentElement();
}
return parentEl;
}
/*
* Strip
* returns a text without HTML tags
*/
function strip(html) {
var tmp = document.createElement('DIV');
tmp.innerHTML = html;
return tmp.textContent || tmp.innerText || '';
}
/*
* UnwrapCode
* ADD/FIX: to improve, works but can be better
* "paranoic" solution
*/
function unwrapCode() {
var container = null;
if (document.selection) { //for IE
container = document.selection.createRange().parentElement();
} else {
var select = window.getSelection();
if (select.rangeCount > 0) {
container = select.getRangeAt(0).startContainer.parentNode;
}
}
//'paranoic' unwrap
var ispre = $(container).contents().closest('pre').length;
var iscode = $(container).contents().closest('code').length;
if (ispre && iscode) {
$(container).contents().unwrap('code').unwrap('pre');
} else if (ispre) {
$(container).contents().unwrap('pre');
} else if (iscode) {
$(container).contents().unwrap('code');
}
}
})(jQuery);

View File

@ -1 +1 @@
!function(e){"use strict";function t(){var e,t=null;return window.getSelection?(e=window.getSelection(),e.rangeCount&&(t=e.getRangeAt(0).commonAncestorContainer,1!==t.nodeType&&(t=t.parentNode))):(e=document.selection)&&"Control"!==e.type&&(t=e.createRange().parentElement()),t}function n(e){var t=document.createElement("DIV");return t.innerHTML=e,t.textContent||t.innerText||""}function r(){var t=null;if(document.selection)t=document.selection.createRange().parentElement();else{var n=window.getSelection();n.rangeCount>0&&(t=n.getRangeAt(0).startContainer.parentNode)}var r=e(t).contents().closest("pre").length,o=e(t).contents().closest("code").length;r&&o?e(t).contents().unwrap("code").unwrap("pre"):r?e(t).contents().unwrap("pre"):o&&e(t).contents().unwrap("code")}e.extend(!0,e.trumbowyg,{langs:{en:{preformatted:"Code sample <pre>"},fr:{preformatted:"Exemple de code"},it:{preformatted:"Codice <pre>"},zh_cn:{preformatted:"代码示例 <pre>"}},plugins:{preformatted:{init:function(e){var o={fn:function(){e.saveRange();var o=e.getRangeText();if(""!==o.replace(/\s/g,""))try{var a=t().tagName.toLowerCase();if("code"===a||"pre"===a)return r();e.execCmd("insertHTML","<pre><code>"+n(o)+"</code></pre>")}catch(c){}},tag:"pre"};e.addBtnDef("preformatted",o)}}}})}(jQuery);
!function(e){"use strict";function t(){var e,t=null;return window.getSelection?(e=window.getSelection(),e.rangeCount&&(t=e.getRangeAt(0).commonAncestorContainer,1!==t.nodeType&&(t=t.parentNode))):(e=document.selection)&&"Control"!==e.type&&(t=e.createRange().parentElement()),t}function n(e){var t=document.createElement("DIV");return t.innerHTML=e,t.textContent||t.innerText||""}function r(){var t=null;if(document.selection)t=document.selection.createRange().parentElement();else{var n=window.getSelection();n.rangeCount>0&&(t=n.getRangeAt(0).startContainer.parentNode)}var r=e(t).contents().closest("pre").length,o=e(t).contents().closest("code").length;r&&o?e(t).contents().unwrap("code").unwrap("pre"):r?e(t).contents().unwrap("pre"):o&&e(t).contents().unwrap("code")}e.extend(!0,e.trumbowyg,{langs:{en:{preformatted:"Code sample <pre>"},fr:{preformatted:"Exemple de code"},it:{preformatted:"Codice <pre>"},zh_cn:{preformatted:"代码示例 <pre>"},ru:{preformatted:"Пример кода <pre>"},ja:{preformatted:"コードサンプル <pre>"}},plugins:{preformatted:{init:function(e){var o={fn:function(){e.saveRange();var o=e.getRangeText();if(""!==o.replace(/\s/g,""))try{var a=t().tagName.toLowerCase();if("code"===a||"pre"===a)return r();e.execCmd("insertHTML","<pre><code>"+n(o)+"</code></pre>")}catch(c){}},tag:"pre"};e.addBtnDef("preformatted",o)}}}})}(jQuery);

View File

@ -1,136 +0,0 @@
/* ===========================================================
* trumbowyg.table.js v1.2
* Table plugin for Trumbowyg
* http://alex-d.github.com/Trumbowyg
* ===========================================================
* Author : Lawrence Meckan
* Twitter : @absalomedia
* Website : absalom.biz
*/
(function ($) {
'use strict';
var defaultOptions = {
rows: 0,
columns: 0,
styler: ''
};
$.extend(true, $.trumbowyg, {
langs: {
en: {
table: 'Insert table',
tableAddRow: 'Add rows',
tableAddColumn: 'Add columns',
rows: 'Rows',
columns: 'Columns',
styler: 'Table class',
error: 'Error'
},
sk: {
table: 'Vytvoriť tabuľky',
tableAddRow: 'Pridať riadok',
tableAddColumn: 'Pridať stĺpec',
rows: 'Riadky',
columns: 'Stĺpce',
styler: 'Tabuľku triedy',
error: 'Chyba'
},
fr: {
table: 'Insérer un tableau',
tableAddRow: 'Ajouter des lignes',
tableAddColumn: 'Ajouter des colonnes',
rows: 'Lignes',
columns: 'Colonnes',
styler: 'Classes CSS sur la table',
error: 'Erreur'
},
cs: {
table: 'Vytvořit příkaz Table',
tableAddRow: 'Přidat řádek',
tableAddColumn: 'Přidat sloupec',
rows: 'Řádky',
columns: 'Sloupce',
styler: 'Tabulku třída',
error: 'Chyba'
}
},
plugins: {
table: {
init: function (trumbowyg) {
trumbowyg.o.plugins.table = $.extend(true, {}, defaultOptions, trumbowyg.o.plugins.table || {});
var tableBuild = {
fn: function () {
trumbowyg.saveRange();
trumbowyg.openModalInsert(
// Title
trumbowyg.lang.table,
// Fields
{
rows: {
type: 'number',
required: true
},
columns: {
type: 'number',
required: true
},
styler: {
label: trumbowyg.lang.styler,
type: 'text'
}
},
function (v) { // v is value
var tabler = $('<table></table>');
if (v.styler.length !== 0) {
tabler.addClass(v.styler);
}
for (var i = 0; i < v.rows; i += 1) {
var row = $('<tr></tr>').appendTo(tabler);
for (var j = 0; j < v.columns; j += 1) {
$('<td></td>').appendTo(row);
}
}
trumbowyg.range.deleteContents();
trumbowyg.range.insertNode(tabler[0]);
return true;
});
}
};
var addRow = {
fn: function () {
trumbowyg.saveRange();
var rower = $('<tr></tr>');
trumbowyg.range.deleteContents();
trumbowyg.range.insertNode(rower[0]);
return true;
}
};
var addColumn = {
fn: function () {
trumbowyg.saveRange();
var columner = $('<td></td>');
trumbowyg.range.deleteContents();
trumbowyg.range.insertNode(columner[0]);
return true;
}
};
trumbowyg.addBtnDef('table', tableBuild);
trumbowyg.addBtnDef('tableAddRow', addRow);
trumbowyg.addBtnDef('tableAddColumn', addColumn);
}
}
}
});
})(jQuery);

View File

@ -1 +1 @@
!function(e){"use strict";var t={rows:0,columns:0,styler:""};e.extend(!0,e.trumbowyg,{langs:{en:{table:"Insert table",tableAddRow:"Add rows",tableAddColumn:"Add columns",rows:"Rows",columns:"Columns",styler:"Table class",error:"Error"},sk:{table:"Vytvoriť tabuľky",tableAddRow:"Pridať riadok",tableAddColumn:"Pridať stĺpec",rows:"Riadky",columns:"Stĺpce",styler:"Tabuľku triedy",error:"Chyba"},fr:{table:"Insérer un tableau",tableAddRow:"Ajouter des lignes",tableAddColumn:"Ajouter des colonnes",rows:"Lignes",columns:"Colonnes",styler:"Classes CSS sur la table",error:"Erreur"},cs:{table:"Vytvořit příkaz Table",tableAddRow:"Přidat řádek",tableAddColumn:"Přidat sloupec",rows:"Řádky",columns:"Sloupce",styler:"Tabulku třída",error:"Chyba"}},plugins:{table:{init:function(r){r.o.plugins.table=e.extend(!0,{},t,r.o.plugins.table||{});var n={fn:function(){r.saveRange(),r.openModalInsert(r.lang.table,{rows:{type:"number",required:!0},columns:{type:"number",required:!0},styler:{label:r.lang.styler,type:"text"}},function(t){var n=e("<table></table>");0!==t.styler.length&&n.addClass(t.styler);for(var a=0;a<t.rows;a+=1)for(var l=e("<tr></tr>").appendTo(n),o=0;o<t.columns;o+=1)e("<td></td>").appendTo(l);return r.range.deleteContents(),r.range.insertNode(n[0]),!0})}},a={fn:function(){r.saveRange();var t=e("<tr></tr>");return r.range.deleteContents(),r.range.insertNode(t[0]),!0}},l={fn:function(){r.saveRange();var t=e("<td></td>");return r.range.deleteContents(),r.range.insertNode(t[0]),!0}};r.addBtnDef("table",n),r.addBtnDef("tableAddRow",a),r.addBtnDef("tableAddColumn",l)}}}})}(jQuery);
!function(e){"use strict";var t={rows:0,columns:0,styler:""};e.extend(!0,e.trumbowyg,{langs:{en:{table:"Insert table",tableAddRow:"Add rows",tableAddColumn:"Add columns",rows:"Rows",columns:"Columns",styler:"Table class",error:"Error"},sk:{table:"Vytvoriť tabuľky",tableAddRow:"Pridať riadok",tableAddColumn:"Pridať stĺpec",rows:"Riadky",columns:"Stĺpce",styler:"Tabuľku triedy",error:"Chyba"},fr:{table:"Insérer un tableau",tableAddRow:"Ajouter des lignes",tableAddColumn:"Ajouter des colonnes",rows:"Lignes",columns:"Colonnes",styler:"Classes CSS sur la table",error:"Erreur"},cs:{table:"Vytvořit příkaz Table",tableAddRow:"Přidat řádek",tableAddColumn:"Přidat sloupec",rows:"Řádky",columns:"Sloupce",styler:"Tabulku třída",error:"Chyba"},ru:{table:"Вставить таблицу",tableAddRow:"Добавить строки",tableAddColumn:"Добавить столбцы",rows:"Строки",columns:"Столбцы",styler:"Имя CSS класса для таблицы",error:"Ошибка"},ja:{table:"表の挿入",tableAddRow:"行の追加",tableAddColumn:"列の追加",rows:"行",columns:"列",styler:"表のクラス",error:"エラー"}},plugins:{table:{init:function(r){r.o.plugins.table=e.extend(!0,{},t,r.o.plugins.table||{});var l={fn:function(){r.saveRange(),r.openModalInsert(r.lang.table,{rows:{type:"number",required:!0},columns:{type:"number",required:!0},styler:{label:r.lang.styler,type:"text"}},function(t){var l=e("<table></table>");0!==t.styler.length&&l.addClass(t.styler);for(var n=0;n<t.rows;n+=1)for(var a=e("<tr></tr>").appendTo(l),o=0;o<t.columns;o+=1)e("<td></td>").appendTo(a);return r.range.deleteContents(),r.range.insertNode(l[0]),!0})}},n={fn:function(){r.saveRange();var t=e("<tr></tr>");return r.range.deleteContents(),r.range.insertNode(t[0]),!0}},a={fn:function(){r.saveRange();var t=e("<td></td>");return r.range.deleteContents(),r.range.insertNode(t[0]),!0}};r.addBtnDef("table",l),r.addBtnDef("tableAddRow",n),r.addBtnDef("tableAddColumn",a)}}}})}(jQuery);

View File

@ -1,52 +0,0 @@
(function($) {
'use strict';
// Adds the language variables
$.extend(true, $.trumbowyg, {
langs: {
en: {
template: 'Template'
},
nl: {
template: 'Sjabloon'
}
}
});
// Adds the extra button definition
$.extend(true, $.trumbowyg, {
plugins: {
template: {
shouldInit: function(trumbowyg) {
return trumbowyg.o.plugins.hasOwnProperty('templates');
},
init: function(trumbowyg) {
trumbowyg.addBtnDef('template', {
dropdown: templateSelector(trumbowyg),
hasIcon: false,
text: trumbowyg.lang.template
});
}
}
}
});
// Creates the template-selector dropdown.
function templateSelector(trumbowyg) {
var available = trumbowyg.o.plugins.templates;
var templates = [];
$.each(available, function(index, template) {
trumbowyg.addBtnDef('template_' + index, {
fn: function(){
trumbowyg.html(template.html);
},
hasIcon: false,
title: template.name
});
templates.push('template_' + index);
});
return templates;
}
})(jQuery);

View File

@ -1 +1 @@
!function(t){"use strict";function e(e){var n=e.o.plugins.templates,a=[];return t.each(n,function(t,n){e.addBtnDef("template_"+t,{fn:function(){e.html(n.html)},hasIcon:!1,title:n.name}),a.push("template_"+t)}),a}t.extend(!0,t.trumbowyg,{langs:{en:{template:"Template"},nl:{template:"Sjabloon"}}}),t.extend(!0,t.trumbowyg,{plugins:{template:{shouldInit:function(t){return t.o.plugins.hasOwnProperty("templates")},init:function(t){t.addBtnDef("template",{dropdown:e(t),hasIcon:!1,text:t.lang.template})}}}})}(jQuery);
!function(t){"use strict";function e(e){var n=e.o.plugins.templates,a=[];return t.each(n,function(t,n){e.addBtnDef("template_"+t,{fn:function(){e.html(n.html)},hasIcon:!1,title:n.name}),a.push("template_"+t)}),a}t.extend(!0,t.trumbowyg,{langs:{en:{template:"Template"},nl:{template:"Sjabloon"},ru:{template:"Шаблон"},ja:{template:"テンプレート"}}}),t.extend(!0,t.trumbowyg,{plugins:{template:{shouldInit:function(t){return t.o.plugins.hasOwnProperty("templates")},init:function(t){t.addBtnDef("template",{dropdown:e(t),hasIcon:!1,text:t.lang.template})}}}})}(jQuery);

View File

@ -1,223 +0,0 @@
/* ===========================================================
* trumbowyg.upload.js v1.2
* Upload plugin for Trumbowyg
* http://alex-d.github.com/Trumbowyg
* ===========================================================
* Author : Alexandre Demode (Alex-D)
* Twitter : @AlexandreDemode
* Website : alex-d.fr
* Mod by : Aleksandr-ru
* Twitter : @Aleksandr_ru
* Website : aleksandr.ru
*/
(function ($) {
'use strict';
var defaultOptions = {
serverPath: './src/plugins/upload/trumbowyg.upload.php',
fileFieldName: 'fileToUpload',
data: [], // Additional data for ajax [{name: 'key', value: 'value'}]
headers: {}, // Additional headers
xhrFields: {}, // Additional fields
urlPropertyName: 'file', // How to get url from the json response (for instance 'url' for {url: ....})
statusPropertyName: 'success', // How to get status from the json response
success: undefined, // Success callback: function (data, trumbowyg, $modal, values) {}
error: undefined // Error callback: function () {}
};
function getDeep(object, propertyParts) {
var mainProperty = propertyParts.shift(),
otherProperties = propertyParts;
if (object !== null) {
if (otherProperties.length === 0) {
return object[mainProperty];
}
if (typeof object === 'object') {
return getDeep(object[mainProperty], otherProperties);
}
}
return object;
}
addXhrProgressEvent();
$.extend(true, $.trumbowyg, {
langs: {
// jshint camelcase:false
en: {
upload: 'Upload',
file: 'File',
uploadError: 'Error'
},
sk: {
upload: 'Nahrať',
file: 'Súbor',
uploadError: 'Chyba'
},
fr: {
upload: 'Envoi',
file: 'Fichier',
uploadError: 'Erreur'
},
cs: {
upload: 'Nahrát obrázek',
file: 'Soubor',
uploadError: 'Chyba'
},
zh_cn: {
upload: '上传',
file: '文件',
uploadError: '错误'
},
ru: {
upload: 'Загрузка',
file: 'Файл',
uploadError: 'Ошибка'
}
},
// jshint camelcase:true
plugins: {
upload: {
init: function (trumbowyg) {
trumbowyg.o.plugins.upload = $.extend(true, {}, defaultOptions, trumbowyg.o.plugins.upload || {});
var btnDef = {
fn: function () {
trumbowyg.saveRange();
var file,
prefix = trumbowyg.o.prefix;
var $modal = trumbowyg.openModalInsert(
// Title
trumbowyg.lang.upload,
// Fields
{
file: {
type: 'file',
required: true,
attributes: {
accept: 'image/*'
}
},
alt: {
label: 'description',
value: trumbowyg.getRangeText()
}
},
// Callback
function (values) {
var data = new FormData();
data.append(trumbowyg.o.plugins.upload.fileFieldName, file);
trumbowyg.o.plugins.upload.data.map(function (cur) {
data.append(cur.name, cur.value);
});
if ($('.' + prefix + 'progress', $modal).length === 0) {
$('.' + prefix + 'modal-title', $modal)
.after(
$('<div/>', {
'class': prefix + 'progress'
}).append(
$('<div/>', {
'class': prefix + 'progress-bar'
})
)
);
}
$.ajax({
url: trumbowyg.o.plugins.upload.serverPath,
headers: trumbowyg.o.plugins.upload.headers,
xhrFields: trumbowyg.o.plugins.upload.xhrFields,
type: 'POST',
data: data,
cache: false,
dataType: 'json',
processData: false,
contentType: false,
progressUpload: function (e) {
$('.' + prefix + 'progress-bar').stop().animate({
width: Math.round(e.loaded * 100 / e.total) + '%'
}, 200);
},
success: function (data) {
if (trumbowyg.o.plugins.upload.success) {
trumbowyg.o.plugins.upload.success(data, trumbowyg, $modal, values);
} else {
if (!!getDeep(data, trumbowyg.o.plugins.upload.statusPropertyName.split('.'))) {
var url = getDeep(data, trumbowyg.o.plugins.upload.urlPropertyName.split('.'));
trumbowyg.execCmd('insertImage', url);
$('img[src="' + url + '"]:not([alt])', trumbowyg.$box).attr('alt', values.alt);
setTimeout(function () {
trumbowyg.closeModal();
}, 250);
trumbowyg.$c.trigger('tbwuploadsuccess', [trumbowyg, data, url]);
} else {
trumbowyg.addErrorOnModalField(
$('input[type=file]', $modal),
trumbowyg.lang[data.message]
);
trumbowyg.$c.trigger('tbwuploaderror', [trumbowyg, data]);
}
}
},
error: trumbowyg.o.plugins.upload.error || function () {
trumbowyg.addErrorOnModalField(
$('input[type=file]', $modal),
trumbowyg.lang.uploadError
);
trumbowyg.$c.trigger('tbwuploaderror', [trumbowyg]);
}
});
}
);
$('input[type=file]').on('change', function (e) {
try {
// If multiple files allowed, we just get the first.
file = e.target.files[0];
} catch (err) {
// In IE8, multiple files not allowed
file = e.target.value;
}
});
}
};
trumbowyg.addBtnDef('upload', btnDef);
}
}
}
});
function addXhrProgressEvent() {
if (!$.trumbowyg && !$.trumbowyg.addedXhrProgressEvent) { // Avoid adding progress event multiple times
var originalXhr = $.ajaxSettings.xhr;
$.ajaxSetup({
xhr: function () {
var req = originalXhr(),
that = this;
if (req && typeof req.upload === 'object' && that.progressUpload !== undefined) {
req.upload.addEventListener('progress', function (e) {
that.progressUpload(e);
}, false);
}
return req;
}
});
$.trumbowyg.addedXhrProgressEvent = true;
}
}
})(jQuery);

View File

@ -1 +1 @@
!function(e){"use strict";function r(e,a){var o=a.shift(),l=a;if(null!==e){if(0===l.length)return e[o];if("object"==typeof e)return r(e[o],l)}return e}function a(){if(!e.trumbowyg&&!e.trumbowyg.addedXhrProgressEvent){var r=e.ajaxSettings.xhr;e.ajaxSetup({xhr:function(){var e=r(),a=this;return e&&"object"==typeof e.upload&&void 0!==a.progressUpload&&e.upload.addEventListener("progress",function(e){a.progressUpload(e)},!1),e}}),e.trumbowyg.addedXhrProgressEvent=!0}}var o={serverPath:"./src/plugins/upload/trumbowyg.upload.php",fileFieldName:"fileToUpload",data:[],headers:{},xhrFields:{},urlPropertyName:"file",statusPropertyName:"success",success:void 0,error:void 0};a(),e.extend(!0,e.trumbowyg,{langs:{en:{upload:"Upload",file:"File",uploadError:"Error"},sk:{upload:"Nahrať",file:"Súbor",uploadError:"Chyba"},fr:{upload:"Envoi",file:"Fichier",uploadError:"Erreur"},cs:{upload:"Nahrát obrázek",file:"Soubor",uploadError:"Chyba"},zh_cn:{upload:"上传",file:"文件",uploadError:"错误"},ru:{upload:"Загрузка",file:"Файл",uploadError:"Ошибка"}},plugins:{upload:{init:function(a){a.o.plugins.upload=e.extend(!0,{},o,a.o.plugins.upload||{});var l={fn:function(){a.saveRange();var o,l=a.o.prefix,t=a.openModalInsert(a.lang.upload,{file:{type:"file",required:!0,attributes:{accept:"image/*"}},alt:{label:"description",value:a.getRangeText()}},function(u){var s=new FormData;s.append(a.o.plugins.upload.fileFieldName,o),a.o.plugins.upload.data.map(function(e){s.append(e.name,e.value)}),0===e("."+l+"progress",t).length&&e("."+l+"modal-title",t).after(e("<div/>",{"class":l+"progress"}).append(e("<div/>",{"class":l+"progress-bar"}))),e.ajax({url:a.o.plugins.upload.serverPath,headers:a.o.plugins.upload.headers,xhrFields:a.o.plugins.upload.xhrFields,type:"POST",data:s,cache:!1,dataType:"json",processData:!1,contentType:!1,progressUpload:function(r){e("."+l+"progress-bar").stop().animate({width:Math.round(100*r.loaded/r.total)+"%"},200)},success:function(o){if(a.o.plugins.upload.success)a.o.plugins.upload.success(o,a,t,u);else if(r(o,a.o.plugins.upload.statusPropertyName.split("."))){var l=r(o,a.o.plugins.upload.urlPropertyName.split("."));a.execCmd("insertImage",l),e('img[src="'+l+'"]:not([alt])',a.$box).attr("alt",u.alt),setTimeout(function(){a.closeModal()},250),a.$c.trigger("tbwuploadsuccess",[a,o,l])}else a.addErrorOnModalField(e("input[type=file]",t),a.lang[o.message]),a.$c.trigger("tbwuploaderror",[a,o])},error:a.o.plugins.upload.error||function(){a.addErrorOnModalField(e("input[type=file]",t),a.lang.uploadError),a.$c.trigger("tbwuploaderror",[a])}})});e("input[type=file]").on("change",function(e){try{o=e.target.files[0]}catch(r){o=e.target.value}})}};a.addBtnDef("upload",l)}}}})}(jQuery);
!function(r){"use strict";function e(r,a){var o=a.shift(),l=a;if(null!==r){if(0===l.length)return r[o];if("object"==typeof r)return e(r[o],l)}return r}function a(){if(!r.trumbowyg.addedXhrProgressEvent){var e=r.ajaxSettings.xhr;r.ajaxSetup({xhr:function(){var r=e(),a=this;return r&&"object"==typeof r.upload&&void 0!==a.progressUpload&&r.upload.addEventListener("progress",function(r){a.progressUpload(r)},!1),r}}),r.trumbowyg.addedXhrProgressEvent=!0}}var o={serverPath:"",fileFieldName:"fileToUpload",data:[],headers:{},xhrFields:{},urlPropertyName:"file",statusPropertyName:"success",success:void 0,error:void 0};a(),r.extend(!0,r.trumbowyg,{langs:{en:{upload:"Upload",file:"File",uploadError:"Error"},sk:{upload:"Nahrať",file:"Súbor",uploadError:"Chyba"},fr:{upload:"Envoi",file:"Fichier",uploadError:"Erreur"},cs:{upload:"Nahrát obrázek",file:"Soubor",uploadError:"Chyba"},zh_cn:{upload:"上传",file:"文件",uploadError:"错误"},zh_tw:{upload:"上傳",file:"文件",uploadError:"錯誤"},ru:{upload:"Загрузка",file:"Файл",uploadError:"Ошибка"},ja:{upload:"アップロード",file:"ファイル",uploadError:"エラー"},pt_br:{upload:"Enviar do local",file:"Arquivo",uploadError:"Erro"}},plugins:{upload:{init:function(a){a.o.plugins.upload=r.extend(!0,{},o,a.o.plugins.upload||{});var l={fn:function(){a.saveRange();var o,l=a.o.prefix,t=a.openModalInsert(a.lang.upload,{file:{type:"file",required:!0,attributes:{accept:"image/*"}},alt:{label:"description",value:a.getRangeText()}},function(u){var p=new FormData;p.append(a.o.plugins.upload.fileFieldName,o),a.o.plugins.upload.data.map(function(r){p.append(r.name,r.value)}),r.map(u,function(r,e){"file"!==e&&p.append(e,r)}),0===r("."+l+"progress",t).length&&r("."+l+"modal-title",t).after(r("<div/>",{"class":l+"progress"}).append(r("<div/>",{"class":l+"progress-bar"}))),r.ajax({url:a.o.plugins.upload.serverPath,headers:a.o.plugins.upload.headers,xhrFields:a.o.plugins.upload.xhrFields,type:"POST",data:p,cache:!1,dataType:"json",processData:!1,contentType:!1,progressUpload:function(e){r("."+l+"progress-bar").css("width",Math.round(100*e.loaded/e.total)+"%")},success:function(o){if(a.o.plugins.upload.success)a.o.plugins.upload.success(o,a,t,u);else if(e(o,a.o.plugins.upload.statusPropertyName.split("."))){var l=e(o,a.o.plugins.upload.urlPropertyName.split("."));a.execCmd("insertImage",l),r('img[src="'+l+'"]:not([alt])',a.$box).attr("alt",u.alt),setTimeout(function(){a.closeModal()},250),a.$c.trigger("tbwuploadsuccess",[a,o,l])}else a.addErrorOnModalField(r("input[type=file]",t),a.lang[o.message]),a.$c.trigger("tbwuploaderror",[a,o])},error:a.o.plugins.upload.error||function(){a.addErrorOnModalField(r("input[type=file]",t),a.lang.uploadError),a.$c.trigger("tbwuploaderror",[a])}})});r("input[type=file]").on("change",function(r){try{o=r.target.files[0]}catch(e){o=r.target.value}})}};a.addBtnDef("upload",l)}}}})}(jQuery);

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -1,786 +0,0 @@
/**
* Trumbowyg v2.5.0 - A lightweight WYSIWYG editor
* Default stylesheet for Trumbowyg editor
* ------------------------
* @link http://alex-d.github.io/Trumbowyg
* @license MIT
* @author Alexandre Demode (Alex-D)
* Twitter : @AlexandreDemode
* Website : alex-d.fr
*/
$light-color: #ecf0f1 !default;
$dark-color: #222 !default;
$modal-submit-color: #2ecc71 !default;
$modal-reset-color: #EEE !default;
$transition-duration: 150ms !default;
#trumbowyg-icons {
overflow: hidden;
visibility: hidden;
height: 0;
width: 0;
svg {
height: 0;
width: 0;
}
}
.trumbowyg-box {
*,
*::before,
*::after {
box-sizing: border-box;
}
svg {
width: 17px;
height: 100%;
fill: $dark-color;
}
}
.trumbowyg-box,
.trumbowyg-editor {
display: block;
position: relative;
border: 1px solid #DDD;
width: 100%;
min-height: 300px;
margin: 17px auto;
}
.trumbowyg-box .trumbowyg-editor {
margin: 0 auto;
}
.trumbowyg-box.trumbowyg-fullscreen {
background: #FEFEFE;
border: none !important;
}
.trumbowyg-editor,
.trumbowyg-textarea {
position: relative;
box-sizing: border-box;
padding: 20px;
min-height: 300px;
width: 100%;
border-style: none;
resize: none;
outline: none;
overflow: auto;
}
.trumbowyg-box-blur .trumbowyg-editor {
*,
&::before {
color: transparent !important;
text-shadow: 0 0 7px #333;
@media screen and (min-width: 0 \0
) {
color: rgba(200, 200, 200, 0.6) !important;
}
@supports (-ms-accelerator:true) {
color: rgba(200, 200, 200, 0.6) !important;
}
}
img,
hr {
opacity: 0.2;
}
}
.trumbowyg-textarea {
position: relative;
display: block;
overflow: auto;
border: none;
white-space: normal;
font-size: 14px;
font-family: "Inconsolata", "Consolas", "Courier", "Courier New", sans-serif;
line-height: 18px;
}
.trumbowyg-box.trumbowyg-editor-visible {
.trumbowyg-textarea {
height: 1px !important;
width: 25%;
min-height: 0 !important;
padding: 0 !important;
background: none;
opacity: 0 !important;
}
}
.trumbowyg-box.trumbowyg-editor-hidden {
.trumbowyg-textarea {
display: block;
}
.trumbowyg-editor {
display: none;
}
}
.trumbowyg-box.trumbowyg-disabled {
.trumbowyg-textarea {
opacity: 0.8;
background: none;
}
}
.trumbowyg-editor[contenteditable=true]:empty:not(:focus)::before {
content: attr(placeholder);
color: #999;
pointer-events: none;
}
.trumbowyg-button-pane {
display: flex;
flex-flow: row wrap;
width: 100%;
min-height: 36px;
background: $light-color;
border-bottom: 1px solid darken($light-color, 7%);
margin: 0;
padding: 0 5px;
list-style-type: none;
line-height: 10px;
backface-visibility: hidden;
&::after {
content: " ";
display: block;
position: absolute;
top: 36px;
left: 0;
right: 0;
width: 100%;
height: 1px;
background: darken($light-color, 7%);
}
.trumbowyg-button-group {
display: flex;
flex-flow: row wrap;
.trumbowyg-fullscreen-button svg {
color: transparent;
}
&:not(:empty) + .trumbowyg-button-group::before {
content: " ";
display: block;
width: 1px;
background: darken($light-color, 7%);
margin: 0 5px;
height: 35px;
}
}
button {
display: block;
position: relative;
width: 35px;
height: 35px;
padding: 1px 6px !important;
margin-bottom: 1px;
overflow: hidden;
border: none;
cursor: pointer;
background: none;
transition: background-color $transition-duration, opacity $transition-duration;
&.trumbowyg-textual-button {
width: auto;
line-height: 35px;
}
}
&.trumbowyg-disable button:not(.trumbowyg-not-disable):not(.trumbowyg-active),
.trumbowyg-disabled & button:not(.trumbowyg-not-disable):not(.trumbowyg-viewHTML-button) {
opacity: 0.2;
cursor: default;
}
&.trumbowyg-disable,
.trumbowyg-disabled & {
.trumbowyg-button-group::before {
background: darken($light-color, 3%);
}
}
button:not(.trumbowyg-disable):hover,
button:not(.trumbowyg-disable):focus,
button.trumbowyg-active {
background-color: #FFF;
outline: none;
}
.trumbowyg-open-dropdown {
&::after {
display: block;
content: " ";
position: absolute;
top: 25px;
right: 3px;
height: 0;
width: 0;
border: 3px solid transparent;
border-top-color: #555;
}
&.trumbowyg-textual-button {
padding-left: 10px !important;
padding-right: 18px !important;
&::after {
top: 17px;
right: 7px;
}
}
}
.trumbowyg-right {
margin-left: auto;
&::before {
display: none !important;
}
}
}
.trumbowyg-dropdown {
width: 200px;
border: 1px solid $light-color;
padding: 5px 0;
border-top: none;
background: #FFF;
margin-left: -1px;
box-shadow: rgba(0, 0, 0, .1) 0 2px 3px;
button {
display: block;
width: 100%;
height: 35px;
line-height: 35px;
text-decoration: none;
background: #FFF;
padding: 0 10px;
color: #333 !important;
border: none;
cursor: pointer;
text-align: left;
font-size: 15px;
transition: all $transition-duration;
&:hover,
&:focus {
background: $light-color;
}
svg {
float: left;
margin-right: 14px;
}
}
}
/* Modal box */
.trumbowyg-modal {
position: absolute;
top: 0;
left: 50%;
transform: translateX(-50%);
max-width: 520px;
width: 100%;
height: 350px;
z-index: 11;
overflow: hidden;
backface-visibility: hidden;
}
.trumbowyg-modal-box {
position: absolute;
top: 0;
left: 50%;
transform: translateX(-50%);
max-width: 500px;
width: calc(100% - 20px);
padding-bottom: 45px;
z-index: 1;
background-color: #FFF;
text-align: center;
font-size: 14px;
box-shadow: rgba(0, 0, 0, .2) 0 2px 3px;
backface-visibility: hidden;
.trumbowyg-modal-title {
font-size: 24px;
font-weight: bold;
margin: 0 0 20px;
padding: 15px 0 13px;
display: block;
border-bottom: 1px solid #EEE;
color: #333;
background: lighten($light-color, 5%);
}
.trumbowyg-progress {
width: 100%;
height: 3px;
position: absolute;
top: 58px;
.trumbowyg-progress-bar {
background: #2BC06A;
height: 100%;
transition: width $transition-duration linear;
}
}
label {
display: block;
position: relative;
margin: 15px 12px;
height: 29px;
line-height: 29px;
overflow: hidden;
.trumbowyg-input-infos {
display: block;
text-align: left;
height: 25px;
line-height: 25px;
transition: all 150ms;
span {
display: block;
color: darken($light-color, 45%);
background-color: lighten($light-color, 5%);
border: 1px solid #DEDEDE;
padding: 0 7px;
width: 150px;
}
span.trumbowyg-msg-error {
color: #e74c3c;
}
}
&.trumbowyg-input-error {
input,
textarea {
border: 1px solid #e74c3c;
}
.trumbowyg-input-infos {
margin-top: -27px;
}
}
input {
position: absolute;
top: 0;
right: 0;
height: 27px;
line-height: 27px;
border: 1px solid #DEDEDE;
background: #fff;
font-size: 14px;
max-width: 330px;
width: 70%;
padding: 0 7px;
transition: all $transition-duration;
&:hover,
&:focus {
outline: none;
border: 1px solid #95a5a6;
}
&:focus {
background: lighten($light-color, 5%);
}
}
}
.error {
margin-top: 25px;
display: block;
color: red;
}
.trumbowyg-modal-button {
position: absolute;
bottom: 10px;
right: 0;
text-decoration: none;
color: #FFF;
display: block;
width: 100px;
height: 35px;
line-height: 33px;
margin: 0 10px;
background-color: #333;
border: none;
cursor: pointer;
font-family: "Trebuchet MS", Helvetica, Verdana, sans-serif;
font-size: 16px;
transition: all $transition-duration;
&.trumbowyg-modal-submit {
right: 110px;
background: darken($modal-submit-color, 3%);
&:hover,
&:focus {
background: lighten($modal-submit-color, 5%);
outline: none;
}
&:active {
background: darken($modal-submit-color, 10%);
}
}
&.trumbowyg-modal-reset {
color: #555;
background: darken($modal-reset-color, 3%);
&:hover,
&:focus {
background: lighten($modal-reset-color, 5%);
outline: none;
}
&:active {
background: darken($modal-reset-color, 10%);
}
}
}
}
.trumbowyg-overlay {
position: absolute;
background-color: rgba(255, 255, 255, 0.5);
width: 100%;
left: 0;
display: none;
z-index: 10;
}
/**
* Fullscreen
*/
body.trumbowyg-body-fullscreen {
overflow: hidden;
}
.trumbowyg-fullscreen {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
margin: 0;
padding: 0;
z-index: 99999;
&.trumbowyg-box,
.trumbowyg-editor {
border: none;
}
.trumbowyg-editor,
.trumbowyg-textarea {
height: calc(100% - 37px) !important;
overflow: auto;
}
.trumbowyg-overlay {
height: 100% !important;
}
.trumbowyg-button-group .trumbowyg-fullscreen-button svg {
color: $dark-color;
fill: transparent;
}
}
.trumbowyg-editor {
object,
embed,
video,
img {
max-width: 100%;
}
video,
img {
height: auto;
}
img {
cursor: move;
}
/*
* lset for resetCss option
*/
&.trumbowyg-reset-css {
background: #FEFEFE !important;
font-family: "Trebuchet MS", Helvetica, Verdana, sans-serif !important;
font-size: 14px !important;
line-height: 1.45em !important;
white-space: normal !important;
color: #333;
a {
color: #15c !important;
text-decoration: underline !important;
}
div,
p,
ul,
ol,
blockquote {
box-shadow: none !important;
background: none !important;
margin: 0 !important;
margin-bottom: 15px !important;
line-height: 1.4em !important;
font-family: "Trebuchet MS", Helvetica, Verdana, sans-serif !important;
font-size: 14px !important;
border: none;
}
iframe,
object,
hr {
margin-bottom: 15px !important;
}
blockquote {
margin-left: 32px !important;
font-style: italic !important;
color: #555;
}
ul,
ol {
padding-left: 20px !important;
}
ul ul,
ol ol,
ul ol,
ol ul {
border: none;
margin: 2px !important;
padding: 0 !important;
padding-left: 24px !important;
}
hr {
display: block;
height: 1px;
border: none;
border-top: 1px solid #CCC;
}
h1,
h2,
h3,
h4 {
color: #111;
background: none;
margin: 0 !important;
padding: 0 !important;
font-weight: bold;
}
h1 {
font-size: 32px !important;
line-height: 38px !important;
margin-bottom: 20px !important;
}
h2 {
font-size: 26px !important;
line-height: 34px !important;
margin-bottom: 15px !important;
}
h3 {
font-size: 22px !important;
line-height: 28px !important;
margin-bottom: 7px !important;
}
h4 {
font-size: 16px !important;
line-height: 22px !important;
margin-bottom: 7px !important;
}
}
}
/*
* Dark theme
*/
.trumbowyg-dark {
.trumbowyg-textarea {
background: #111;
color: #ddd;
}
.trumbowyg-box {
border: 1px solid lighten($dark-color, 7%);
&.trumbowyg-fullscreen {
background: #111;
}
&.trumbowyg-box-blur .trumbowyg-editor {
*,
&::before {
text-shadow: 0 0 7px #ccc;
@media screen and (min-width: 0 \0
) {
color: rgba(20, 20, 20, 0.6) !important;
}
@supports (-ms-accelerator:true) {
color: rgba(20, 20, 20, 0.6) !important;
}
}
}
svg {
fill: $light-color;
color: $light-color;
}
}
.trumbowyg-button-pane {
background-color: $dark-color;
border-bottom-color: lighten($dark-color, 7%);
&::after {
background: lighten($dark-color, 7%);
}
.trumbowyg-button-group:not(:empty) {
&::before {
background-color: lighten($dark-color, 7%);
}
.trumbowyg-fullscreen-button svg {
color: transparent;
}
}
&.trumbowyg-disable {
.trumbowyg-button-group::before {
background-color: lighten($dark-color, 3%);
}
}
button:not(.trumbowyg-disable):hover,
button:not(.trumbowyg-disable):focus,
button.trumbowyg-active {
background-color: #333;
}
.trumbowyg-open-dropdown::after {
border-top-color: #fff;
}
}
.trumbowyg-fullscreen {
.trumbowyg-button-group .trumbowyg-fullscreen-button svg {
color: $light-color;
fill: transparent;
}
}
.trumbowyg-dropdown {
border-color: $dark-color;
background: #333;
box-shadow: rgba(0, 0, 0, .3) 0 2px 3px;
button {
background: #333;
color: #fff !important;
&:hover,
&:focus {
background: $dark-color;
}
}
}
// Modal box
.trumbowyg-modal-box {
background-color: $dark-color;
.trumbowyg-modal-title {
border-bottom: 1px solid #555;
color: #fff;
background: lighten($dark-color, 10%);
}
label {
display: block;
position: relative;
margin: 15px 12px;
height: 27px;
line-height: 27px;
overflow: hidden;
.trumbowyg-input-infos {
span {
color: #eee;
background-color: lighten($dark-color, 5%);
border-color: $dark-color;
}
span.trumbowyg-msg-error {
color: #e74c3c;
}
}
&.trumbowyg-input-error {
input,
textarea {
border-color: #e74c3c;
}
}
input {
border-color: $dark-color;
color: #eee;
background: #333;
&:hover,
&:focus {
border-color: lighten($dark-color, 25%);
}
&:focus {
background-color: lighten($dark-color, 5%);
}
}
}
.trumbowyg-modal-button {
&.trumbowyg-modal-submit {
background: darken($modal-submit-color, 20%);
&:hover,
&:focus {
background: darken($modal-submit-color, 10%);
}
&:active {
background: darken($modal-submit-color, 25%);
}
}
&.trumbowyg-modal-reset {
background: #333;
color: #ccc;
&:hover,
&:focus {
background: #444;
}
&:active {
background: #111;
}
}
}
}
.trumbowyg-overlay {
background-color: rgba(15, 15, 15, 0.6);
}
}

View File

@ -1,584 +0,0 @@
/**
* Trumbowyg v2.5.0 - A lightweight WYSIWYG editor
* Default stylesheet for Trumbowyg editor
* ------------------------
* @link http://alex-d.github.io/Trumbowyg
* @license MIT
* @author Alexandre Demode (Alex-D)
* Twitter : @AlexandreDemode
* Website : alex-d.fr
*/
#trumbowyg-icons {
overflow: hidden;
visibility: hidden;
height: 0;
width: 0; }
#trumbowyg-icons svg {
height: 0;
width: 0; }
.trumbowyg-box *,
.trumbowyg-box *::before,
.trumbowyg-box *::after {
box-sizing: border-box; }
.trumbowyg-box svg {
width: 17px;
height: 100%;
fill: #222; }
.trumbowyg-box,
.trumbowyg-editor {
display: block;
position: relative;
border: 1px solid #DDD;
width: 100%;
min-height: 300px;
margin: 17px auto; }
.trumbowyg-box .trumbowyg-editor {
margin: 0 auto; }
.trumbowyg-box.trumbowyg-fullscreen {
background: #FEFEFE;
border: none !important; }
.trumbowyg-editor,
.trumbowyg-textarea {
position: relative;
box-sizing: border-box;
padding: 20px;
min-height: 300px;
width: 100%;
border-style: none;
resize: none;
outline: none;
overflow: auto; }
.trumbowyg-box-blur .trumbowyg-editor *, .trumbowyg-box-blur .trumbowyg-editor::before {
color: transparent !important;
text-shadow: 0 0 7px #333; }
@media screen and (min-width: 0 \0 ) {
.trumbowyg-box-blur .trumbowyg-editor *, .trumbowyg-box-blur .trumbowyg-editor::before {
color: rgba(200, 200, 200, 0.6) !important; } }
@supports (-ms-accelerator: true) {
.trumbowyg-box-blur .trumbowyg-editor *, .trumbowyg-box-blur .trumbowyg-editor::before {
color: rgba(200, 200, 200, 0.6) !important; } }
.trumbowyg-box-blur .trumbowyg-editor img,
.trumbowyg-box-blur .trumbowyg-editor hr {
opacity: 0.2; }
.trumbowyg-textarea {
position: relative;
display: block;
overflow: auto;
border: none;
white-space: normal;
font-size: 14px;
font-family: "Inconsolata", "Consolas", "Courier", "Courier New", sans-serif;
line-height: 18px; }
.trumbowyg-box.trumbowyg-editor-visible .trumbowyg-textarea {
height: 1px !important;
width: 25%;
min-height: 0 !important;
padding: 0 !important;
background: none;
opacity: 0 !important; }
.trumbowyg-box.trumbowyg-editor-hidden .trumbowyg-textarea {
display: block; }
.trumbowyg-box.trumbowyg-editor-hidden .trumbowyg-editor {
display: none; }
.trumbowyg-box.trumbowyg-disabled .trumbowyg-textarea {
opacity: 0.8;
background: none; }
.trumbowyg-editor[contenteditable=true]:empty:not(:focus)::before {
content: attr(placeholder);
color: #999;
pointer-events: none; }
.trumbowyg-button-pane {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-flow: row wrap;
flex-flow: row wrap;
width: 100%;
min-height: 36px;
background: #ecf0f1;
border-bottom: 1px solid #d7e0e2;
margin: 0;
padding: 0 5px;
list-style-type: none;
line-height: 10px;
-webkit-backface-visibility: hidden;
backface-visibility: hidden; }
.trumbowyg-button-pane::after {
content: " ";
display: block;
position: absolute;
top: 36px;
left: 0;
right: 0;
width: 100%;
height: 1px;
background: #d7e0e2; }
.trumbowyg-button-pane .trumbowyg-button-group {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-flow: row wrap;
flex-flow: row wrap; }
.trumbowyg-button-pane .trumbowyg-button-group .trumbowyg-fullscreen-button svg {
color: transparent; }
.trumbowyg-button-pane .trumbowyg-button-group:not(:empty) + .trumbowyg-button-group::before {
content: " ";
display: block;
width: 1px;
background: #d7e0e2;
margin: 0 5px;
height: 35px; }
.trumbowyg-button-pane button {
display: block;
position: relative;
width: 35px;
height: 35px;
padding: 1px 6px !important;
margin-bottom: 1px;
overflow: hidden;
border: none;
cursor: pointer;
background: none;
-webkit-transition: background-color 150ms, opacity 150ms;
transition: background-color 150ms, opacity 150ms; }
.trumbowyg-button-pane button.trumbowyg-textual-button {
width: auto;
line-height: 35px; }
.trumbowyg-button-pane.trumbowyg-disable button:not(.trumbowyg-not-disable):not(.trumbowyg-active),
.trumbowyg-disabled .trumbowyg-button-pane button:not(.trumbowyg-not-disable):not(.trumbowyg-viewHTML-button) {
opacity: 0.2;
cursor: default; }
.trumbowyg-button-pane.trumbowyg-disable .trumbowyg-button-group::before,
.trumbowyg-disabled .trumbowyg-button-pane .trumbowyg-button-group::before {
background: #e3e9eb; }
.trumbowyg-button-pane button:not(.trumbowyg-disable):hover,
.trumbowyg-button-pane button:not(.trumbowyg-disable):focus,
.trumbowyg-button-pane button.trumbowyg-active {
background-color: #FFF;
outline: none; }
.trumbowyg-button-pane .trumbowyg-open-dropdown::after {
display: block;
content: " ";
position: absolute;
top: 25px;
right: 3px;
height: 0;
width: 0;
border: 3px solid transparent;
border-top-color: #555; }
.trumbowyg-button-pane .trumbowyg-open-dropdown.trumbowyg-textual-button {
padding-left: 10px !important;
padding-right: 18px !important; }
.trumbowyg-button-pane .trumbowyg-open-dropdown.trumbowyg-textual-button::after {
top: 17px;
right: 7px; }
.trumbowyg-button-pane .trumbowyg-right {
margin-left: auto; }
.trumbowyg-button-pane .trumbowyg-right::before {
display: none !important; }
.trumbowyg-dropdown {
width: 200px;
border: 1px solid #ecf0f1;
padding: 5px 0;
border-top: none;
background: #FFF;
margin-left: -1px;
box-shadow: rgba(0, 0, 0, 0.1) 0 2px 3px; }
.trumbowyg-dropdown button {
display: block;
width: 100%;
height: 35px;
line-height: 35px;
text-decoration: none;
background: #FFF;
padding: 0 10px;
color: #333 !important;
border: none;
cursor: pointer;
text-align: left;
font-size: 15px;
-webkit-transition: all 150ms;
transition: all 150ms; }
.trumbowyg-dropdown button:hover, .trumbowyg-dropdown button:focus {
background: #ecf0f1; }
.trumbowyg-dropdown button svg {
float: left;
margin-right: 14px; }
/* Modal box */
.trumbowyg-modal {
position: absolute;
top: 0;
left: 50%;
-webkit-transform: translateX(-50%);
transform: translateX(-50%);
max-width: 520px;
width: 100%;
height: 350px;
z-index: 11;
overflow: hidden;
-webkit-backface-visibility: hidden;
backface-visibility: hidden; }
.trumbowyg-modal-box {
position: absolute;
top: 0;
left: 50%;
-webkit-transform: translateX(-50%);
transform: translateX(-50%);
max-width: 500px;
width: calc(100% - 20px);
padding-bottom: 45px;
z-index: 1;
background-color: #FFF;
text-align: center;
font-size: 14px;
box-shadow: rgba(0, 0, 0, 0.2) 0 2px 3px;
-webkit-backface-visibility: hidden;
backface-visibility: hidden; }
.trumbowyg-modal-box .trumbowyg-modal-title {
font-size: 24px;
font-weight: bold;
margin: 0 0 20px;
padding: 15px 0 13px;
display: block;
border-bottom: 1px solid #EEE;
color: #333;
background: #fbfcfc; }
.trumbowyg-modal-box .trumbowyg-progress {
width: 100%;
height: 3px;
position: absolute;
top: 58px; }
.trumbowyg-modal-box .trumbowyg-progress .trumbowyg-progress-bar {
background: #2BC06A;
height: 100%;
-webkit-transition: width 150ms linear;
transition: width 150ms linear; }
.trumbowyg-modal-box label {
display: block;
position: relative;
margin: 15px 12px;
height: 29px;
line-height: 29px;
overflow: hidden; }
.trumbowyg-modal-box label .trumbowyg-input-infos {
display: block;
text-align: left;
height: 25px;
line-height: 25px;
-webkit-transition: all 150ms;
transition: all 150ms; }
.trumbowyg-modal-box label .trumbowyg-input-infos span {
display: block;
color: #69878f;
background-color: #fbfcfc;
border: 1px solid #DEDEDE;
padding: 0 7px;
width: 150px; }
.trumbowyg-modal-box label .trumbowyg-input-infos span.trumbowyg-msg-error {
color: #e74c3c; }
.trumbowyg-modal-box label.trumbowyg-input-error input,
.trumbowyg-modal-box label.trumbowyg-input-error textarea {
border: 1px solid #e74c3c; }
.trumbowyg-modal-box label.trumbowyg-input-error .trumbowyg-input-infos {
margin-top: -27px; }
.trumbowyg-modal-box label input {
position: absolute;
top: 0;
right: 0;
height: 27px;
line-height: 27px;
border: 1px solid #DEDEDE;
background: #fff;
font-size: 14px;
max-width: 330px;
width: 70%;
padding: 0 7px;
-webkit-transition: all 150ms;
transition: all 150ms; }
.trumbowyg-modal-box label input:hover, .trumbowyg-modal-box label input:focus {
outline: none;
border: 1px solid #95a5a6; }
.trumbowyg-modal-box label input:focus {
background: #fbfcfc; }
.trumbowyg-modal-box .error {
margin-top: 25px;
display: block;
color: red; }
.trumbowyg-modal-box .trumbowyg-modal-button {
position: absolute;
bottom: 10px;
right: 0;
text-decoration: none;
color: #FFF;
display: block;
width: 100px;
height: 35px;
line-height: 33px;
margin: 0 10px;
background-color: #333;
border: none;
cursor: pointer;
font-family: "Trebuchet MS", Helvetica, Verdana, sans-serif;
font-size: 16px;
-webkit-transition: all 150ms;
transition: all 150ms; }
.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit {
right: 110px;
background: #2bc06a; }
.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:hover, .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:focus {
background: #40d47e;
outline: none; }
.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:active {
background: #25a25a; }
.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset {
color: #555;
background: #e6e6e6; }
.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:hover, .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:focus {
background: #fbfbfb;
outline: none; }
.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:active {
background: #d5d5d5; }
.trumbowyg-overlay {
position: absolute;
background-color: rgba(255, 255, 255, 0.5);
width: 100%;
left: 0;
display: none;
z-index: 10; }
/**
* Fullscreen
*/
body.trumbowyg-body-fullscreen {
overflow: hidden; }
.trumbowyg-fullscreen {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
margin: 0;
padding: 0;
z-index: 99999; }
.trumbowyg-fullscreen.trumbowyg-box,
.trumbowyg-fullscreen .trumbowyg-editor {
border: none; }
.trumbowyg-fullscreen .trumbowyg-editor,
.trumbowyg-fullscreen .trumbowyg-textarea {
height: calc(100% - 37px) !important;
overflow: auto; }
.trumbowyg-fullscreen .trumbowyg-overlay {
height: 100% !important; }
.trumbowyg-fullscreen .trumbowyg-button-group .trumbowyg-fullscreen-button svg {
color: #222;
fill: transparent; }
.trumbowyg-editor {
/*
* lset for resetCss option
*/ }
.trumbowyg-editor object,
.trumbowyg-editor embed,
.trumbowyg-editor video,
.trumbowyg-editor img {
max-width: 100%; }
.trumbowyg-editor video,
.trumbowyg-editor img {
height: auto; }
.trumbowyg-editor img {
cursor: move; }
.trumbowyg-editor.trumbowyg-reset-css {
background: #FEFEFE !important;
font-family: "Trebuchet MS", Helvetica, Verdana, sans-serif !important;
font-size: 14px !important;
line-height: 1.45em !important;
white-space: normal !important;
color: #333; }
.trumbowyg-editor.trumbowyg-reset-css a {
color: #15c !important;
text-decoration: underline !important; }
.trumbowyg-editor.trumbowyg-reset-css div,
.trumbowyg-editor.trumbowyg-reset-css p,
.trumbowyg-editor.trumbowyg-reset-css ul,
.trumbowyg-editor.trumbowyg-reset-css ol,
.trumbowyg-editor.trumbowyg-reset-css blockquote {
box-shadow: none !important;
background: none !important;
margin: 0 !important;
margin-bottom: 15px !important;
line-height: 1.4em !important;
font-family: "Trebuchet MS", Helvetica, Verdana, sans-serif !important;
font-size: 14px !important;
border: none; }
.trumbowyg-editor.trumbowyg-reset-css iframe,
.trumbowyg-editor.trumbowyg-reset-css object,
.trumbowyg-editor.trumbowyg-reset-css hr {
margin-bottom: 15px !important; }
.trumbowyg-editor.trumbowyg-reset-css blockquote {
margin-left: 32px !important;
font-style: italic !important;
color: #555; }
.trumbowyg-editor.trumbowyg-reset-css ul,
.trumbowyg-editor.trumbowyg-reset-css ol {
padding-left: 20px !important; }
.trumbowyg-editor.trumbowyg-reset-css ul ul,
.trumbowyg-editor.trumbowyg-reset-css ol ol,
.trumbowyg-editor.trumbowyg-reset-css ul ol,
.trumbowyg-editor.trumbowyg-reset-css ol ul {
border: none;
margin: 2px !important;
padding: 0 !important;
padding-left: 24px !important; }
.trumbowyg-editor.trumbowyg-reset-css hr {
display: block;
height: 1px;
border: none;
border-top: 1px solid #CCC; }
.trumbowyg-editor.trumbowyg-reset-css h1,
.trumbowyg-editor.trumbowyg-reset-css h2,
.trumbowyg-editor.trumbowyg-reset-css h3,
.trumbowyg-editor.trumbowyg-reset-css h4 {
color: #111;
background: none;
margin: 0 !important;
padding: 0 !important;
font-weight: bold; }
.trumbowyg-editor.trumbowyg-reset-css h1 {
font-size: 32px !important;
line-height: 38px !important;
margin-bottom: 20px !important; }
.trumbowyg-editor.trumbowyg-reset-css h2 {
font-size: 26px !important;
line-height: 34px !important;
margin-bottom: 15px !important; }
.trumbowyg-editor.trumbowyg-reset-css h3 {
font-size: 22px !important;
line-height: 28px !important;
margin-bottom: 7px !important; }
.trumbowyg-editor.trumbowyg-reset-css h4 {
font-size: 16px !important;
line-height: 22px !important;
margin-bottom: 7px !important; }
/*
* Dark theme
*/
.trumbowyg-dark .trumbowyg-textarea {
background: #111;
color: #ddd; }
.trumbowyg-dark .trumbowyg-box {
border: 1px solid #343434; }
.trumbowyg-dark .trumbowyg-box.trumbowyg-fullscreen {
background: #111; }
.trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor *, .trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor::before {
text-shadow: 0 0 7px #ccc; }
@media screen and (min-width: 0 \0 ) {
.trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor *, .trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor::before {
color: rgba(20, 20, 20, 0.6) !important; } }
@supports (-ms-accelerator: true) {
.trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor *, .trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor::before {
color: rgba(20, 20, 20, 0.6) !important; } }
.trumbowyg-dark .trumbowyg-box svg {
fill: #ecf0f1;
color: #ecf0f1; }
.trumbowyg-dark .trumbowyg-button-pane {
background-color: #222;
border-bottom-color: #343434; }
.trumbowyg-dark .trumbowyg-button-pane::after {
background: #343434; }
.trumbowyg-dark .trumbowyg-button-pane .trumbowyg-button-group:not(:empty)::before {
background-color: #343434; }
.trumbowyg-dark .trumbowyg-button-pane .trumbowyg-button-group:not(:empty) .trumbowyg-fullscreen-button svg {
color: transparent; }
.trumbowyg-dark .trumbowyg-button-pane.trumbowyg-disable .trumbowyg-button-group::before {
background-color: #2a2a2a; }
.trumbowyg-dark .trumbowyg-button-pane button:not(.trumbowyg-disable):hover,
.trumbowyg-dark .trumbowyg-button-pane button:not(.trumbowyg-disable):focus,
.trumbowyg-dark .trumbowyg-button-pane button.trumbowyg-active {
background-color: #333; }
.trumbowyg-dark .trumbowyg-button-pane .trumbowyg-open-dropdown::after {
border-top-color: #fff; }
.trumbowyg-dark .trumbowyg-fullscreen .trumbowyg-button-group .trumbowyg-fullscreen-button svg {
color: #ecf0f1;
fill: transparent; }
.trumbowyg-dark .trumbowyg-dropdown {
border-color: #222;
background: #333;
box-shadow: rgba(0, 0, 0, 0.3) 0 2px 3px; }
.trumbowyg-dark .trumbowyg-dropdown button {
background: #333;
color: #fff !important; }
.trumbowyg-dark .trumbowyg-dropdown button:hover, .trumbowyg-dark .trumbowyg-dropdown button:focus {
background: #222; }
.trumbowyg-dark .trumbowyg-modal-box {
background-color: #222; }
.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-title {
border-bottom: 1px solid #555;
color: #fff;
background: #3c3c3c; }
.trumbowyg-dark .trumbowyg-modal-box label {
display: block;
position: relative;
margin: 15px 12px;
height: 27px;
line-height: 27px;
overflow: hidden; }
.trumbowyg-dark .trumbowyg-modal-box label .trumbowyg-input-infos span {
color: #eee;
background-color: #2f2f2f;
border-color: #222; }
.trumbowyg-dark .trumbowyg-modal-box label .trumbowyg-input-infos span.trumbowyg-msg-error {
color: #e74c3c; }
.trumbowyg-dark .trumbowyg-modal-box label.trumbowyg-input-error input,
.trumbowyg-dark .trumbowyg-modal-box label.trumbowyg-input-error textarea {
border-color: #e74c3c; }
.trumbowyg-dark .trumbowyg-modal-box label input {
border-color: #222;
color: #eee;
background: #333; }
.trumbowyg-dark .trumbowyg-modal-box label input:hover, .trumbowyg-dark .trumbowyg-modal-box label input:focus {
border-color: #626262; }
.trumbowyg-dark .trumbowyg-modal-box label input:focus {
background-color: #2f2f2f; }
.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit {
background: #1b7943; }
.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:hover, .trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:focus {
background: #25a25a; }
.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:active {
background: #176437; }
.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset {
background: #333;
color: #ccc; }
.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:hover, .trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:focus {
background: #444; }
.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:active {
background: #111; }
.trumbowyg-dark .trumbowyg-overlay {
background-color: rgba(15, 15, 15, 0.6); }

File diff suppressed because one or more lines are too long

View File

@ -1,187 +1,194 @@
@using BuildFeed.Controllers
@using BuildFeed.Model
@model BuildFeed.Model.Build
@model Build
@{
ViewBag.Title = (string)ViewContext.RouteData.Values["action"] == nameof(FrontController.AddBuild)
? $"{VariantTerms.Common_AddBuild} | {InvariantTerms.SiteName}"
: $"{VariantTerms.Front_EditBuild} {Model.FullBuildString} | {InvariantTerms.SiteName}";
Html.EnableClientValidation();
Html.EnableUnobtrusiveJavaScript();
ViewBag.Title = (string)ViewContext.RouteData.Values["action"] == nameof(FrontController.AddBuild)
? $"{VariantTerms.Common_AddBuild} | {InvariantTerms.SiteName}"
: $"{VariantTerms.Front_EditBuild} {Model.FullBuildString} | {InvariantTerms.SiteName}";
Html.EnableClientValidation();
Html.EnableUnobtrusiveJavaScript();
}
@section head
{
<link href="~/Scripts/trumbowyg/ui/trumbowyg.min.css" rel="stylesheet" type="text/css" />
}
@if ((string)ViewContext.RouteData.Values["action"] == nameof(FrontController.AddBuild))
{
<h1>@VariantTerms.Common_AddBuild</h1>
<h1>@VariantTerms.Common_AddBuild</h1>
}
else
{
<h1 class="eager-wrapping">@VariantTerms.Front_EditBuild @Model.AlternateBuildString</h1>
<h1 class="eager-wrapping">@VariantTerms.Front_EditBuild @Model.AlternateBuildString</h1>
}
<div class="form-group">
<label for="quickpaste">@VariantTerms.Front_QuickPaste</label>
<div>
<input id="quickpaste" type="text" />
</div>
<label for="quickpaste">@VariantTerms.Front_QuickPaste</label>
<div>
<input id="quickpaste" type="text" />
</div>
</div>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@Html.ValidationSummary(true)
<div class="form-group">
@Html.LabelFor(model => model.MajorVersion)
<div>
@Html.TextBoxFor(model => model.MajorVersion)
@Html.ValidationMessageFor(model => model.MajorVersion)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.MajorVersion)
<div>
@Html.TextBoxFor(model => model.MajorVersion)
@Html.ValidationMessageFor(model => model.MajorVersion)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.MinorVersion)
<div>
@Html.TextBoxFor(model => model.MinorVersion)
@Html.ValidationMessageFor(model => model.MinorVersion)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.MinorVersion)
<div>
@Html.TextBoxFor(model => model.MinorVersion)
@Html.ValidationMessageFor(model => model.MinorVersion)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Number)
<div>
@Html.TextBoxFor(model => model.Number)
@Html.ValidationMessageFor(model => model.Number)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Number)
<div>
@Html.TextBoxFor(model => model.Number)
@Html.ValidationMessageFor(model => model.Number)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Revision)
<div>
@Html.TextBoxFor(model => model.Revision)
@Html.ValidationMessageFor(model => model.Revision)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Revision)
<div>
@Html.TextBoxFor(model => model.Revision)
@Html.ValidationMessageFor(model => model.Revision)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Lab)
<div>
@Html.TextBoxFor(model => model.Lab)
@Html.ValidationMessageFor(model => model.Lab)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Lab)
<div>
@Html.TextBoxFor(model => model.Lab)
@Html.ValidationMessageFor(model => model.Lab)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.BuildTime)
<div>
@Html.TextBoxFor(model => model.BuildTime, "{0:yyMMdd-HHmm}")
@Html.ValidationMessageFor(model => model.BuildTime)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.BuildTime)
<div>
@Html.TextBoxFor(model => model.BuildTime, "{0:yyMMdd-HHmm}")
@Html.ValidationMessageFor(model => model.BuildTime)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.SourceType)
<div>
@Html.DropDownListFor(model => model.SourceType, EnumHelper.GetSelectList(typeof(TypeOfSource)))
@Html.ValidationMessageFor(model => model.SourceType)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.SourceType)
<div>
@Html.DropDownListFor(model => model.SourceType, EnumHelper.GetSelectList(typeof(TypeOfSource)))
@Html.ValidationMessageFor(model => model.SourceType)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.LeakDate)
<div>
<div class="group-input-button">
@Html.TextBoxFor(model => model.LeakDate, "{0:dd/MM/yyyy}")
<button onclick="$('#@Html.IdFor(model => model.LeakDate)').val('@DateTime.Now.ToShortDateString()');return false;">@VariantTerms.Front_Today</button>
</div>
@Html.ValidationMessageFor(model => model.LeakDate)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.LeakDate)
<div>
<div class="group-input-button">
@Html.TextBoxFor(model => model.LeakDate, "{0:dd/MM/yyyy}")
<button onclick="$('#@Html.IdFor(model => model.LeakDate)').val('@DateTime.Now.ToShortDateString()');return false;">@VariantTerms.Front_Today</button>
</div>
@Html.ValidationMessageFor(model => model.LeakDate)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.SourceDetails)
<div class="wide-group">
@Html.TextAreaFor(model => model.SourceDetails)
@Html.ValidationMessageFor(model => model.SourceDetails)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.SourceDetails)
<div class="wide-group">
@Html.TextAreaFor(model => model.SourceDetails)
@Html.ValidationMessageFor(model => model.SourceDetails)
</div>
</div>
<div class="form-group">
<span class="label-placeholder"></span>
<div>
<input type="submit" value="@((string)ViewContext.RouteData.Values["action"] == nameof(FrontController.AddBuild)
? VariantTerms.Common_AddBuild
: VariantTerms.Front_EditBuild)" />
&ensp;
<a href="/" onclick="window.history.back();return false;" class="button">
@VariantTerms.Front_ReturnToListing
</a>
</div>
</div>
<div class="form-group">
<span class="label-placeholder"></span>
<div>
<input type="submit" value="@((string)ViewContext.RouteData.Values["action"] == nameof(FrontController.AddBuild)
? VariantTerms.Common_AddBuild
: VariantTerms.Front_EditBuild)" />
&ensp;
<a href="/" onclick="window.history.back();return false;" class="button">
@VariantTerms.Front_ReturnToListing
</a>
</div>
</div>
}
@section Scripts
{
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js" type="text/javascript"></script>
<script src="~/Scripts/trumbowyg/trumbowyg.min.js" type="text/javascript"></script>
<link href="~/Scripts/trumbowyg/ui/trumbowyg.min.css" rel="stylesheet" type="text/css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
<script src="~/Scripts/trumbowyg/trumbowyg.min.js" type="text/javascript"></script>
<script src="~/Scripts/jquery.validate.js" type="text/javascript"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js" integrity="sha256-F6h55Qw6sweK+t7SiOJX+2bpSAa3b/fnlrVCJvmEj1A=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.6/jquery.validate.unobtrusive.min.js" integrity="sha256-g1QKGxqsp+x5JkuN/JjHl96je2wztgS5Wo4h4c7gm9M=" crossorigin="anonymous"></script>
<script type="text/javascript">
jQuery(function($)
{
$.validator.addMethod('date',
function(value, element)
{
if (this.optional(element))
{
return true;
}
<script type="text/javascript">
jQuery(function($)
{
$.validator.addMethod('date',
function(value, element)
{
if (this.optional(element))
{
return true;
}
var ok = true;
try
{
new Date(Date.parse(value, "yyMMdd-HHmm"));
}
catch (err)
{
ok = false;
}
return ok;
});
});
var ok = true;
try
{
new Date(Date.parse(value, "yyMMdd-HHmm"));
}
catch (err)
{
ok = false;
}
return ok;
});
});
$(function()
{
$("#@Html.IdFor(model => model.SourceDetails)")
.trumbowyg({
autogrow: true,
btns: [
['strong', 'em'],
'|', 'link',
'|', 'btnGrp-lists',
'|', 'btnGrp-justify',
'|', 'viewHTML',
'|'
]
});
$(function()
{
$.trumbowyg.svgPath = "/Scripts/trumbowyg/ui/icons.svg";
$(".trumbowyg").addClass("trumbowyg-black");
$("#@Html.IdFor(model => model.SourceDetails)")
.trumbowyg({
autogrow: true,
btns: [
['strong', 'em'],
'|', 'link',
'|', ['justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull'],
'|', ['unorderedList', 'orderedList'],
'|', 'viewHTML',
'|'
]
});
$("#quickpaste")
.change(function()
{
var regex = /(([\d]{1,2})\.([\d]{1,2})\.)?([\d]{4,5})(\.([\d]{1,5}))?(\.| \()([a-zA-Z][a-zA-Z0-9._\(\)-]+?)\.(\d\d\d\d\d\d-\d\d\d\d)\)?/;
var result = regex.exec($("#quickpaste").val());
//$(".trumbowyg").addClass("trumbowyg-black");
$("#MajorVersion").val(result[2]);
$("#MinorVersion").val(result[3]);
$("#Number").val(result[4]);
$("#Revision").val(result[6]);
$("#Lab").val(result[8]);
$("#BuildTime").val(result[9]);
});
});
</script>
$("#quickpaste")
.change(function()
{
var regex =
/(([\d]{1,2})\.([\d]{1,2})\.)?([\d]{4,5})(\.([\d]{1,5}))?(\.| \()([a-zA-Z][a-zA-Z0-9._\(\)-]+?)\.(\d\d\d\d\d\d-\d\d\d\d)\)?/;
var result = regex.exec($("#quickpaste").val());
$("#MajorVersion").val(result[2]);
$("#MinorVersion").val(result[3]);
$("#Number").val(result[4]);
$("#Revision").val(result[6]);
$("#Lab").val(result[8]);
$("#BuildTime").val(result[9]);
});
});
</script>
}

View File

@ -2,9 +2,9 @@
@using BuildFeed.Controllers
@using BuildFeed.Model
@using BuildFeed.Model.View
@model Dictionary<BuildFeed.Model.ProjectFamily, BuildFeed.Model.View.FrontPage>
@model Dictionary<ProjectFamily, FrontPage>
@{
ViewBag.Title = string.Format(VariantTerms.Front_HomeH1, InvariantTerms.SiteName);
ViewBag.Title = string.Format(VariantTerms.Front_HomeH1, InvariantTerms.SiteName);
}
@section Head
{
@ -17,79 +17,79 @@
<h3>@VariantTerms.Front_LatestBuilds</h3>
<a href="@Url.Action("IndexPage", new
{
Page = 1
Page = 1
})" class="latest-full">
@VariantTerms.Front_FullBuildListing
@VariantTerms.Front_FullBuildListing
</a>
<div class="trim-wrapper">
<div class="latest-family-wrapper">
@foreach (KeyValuePair<ProjectFamily, FrontPage> item in Model)
{
FrontPage family = item.Value;
<div class="latest-family-wrapper">
@foreach (var item in Model)
{
FrontPage family = item.Value;
<div class="latest-family">
<h3>@MvcExtensions.GetDisplayTextForEnum(item.Key)</h3>
<div class="latest-flex">
@if (family.CurrentCanary != null && family.CurrentCanary.Id != family.CurrentInsider?.Id)
{
<a href="@Url.Action(nameof(FrontController.ViewBuild), new
{
family.CurrentCanary.Id
})" class="latest-flex-item latest-flex-red">
<h4 class="latest-flex-title">@VariantTerms.Front_CurrentCanary</h4>
<div class="latest-flex-detail">
<p class="latest-flex-build">@(family.CurrentCanary.Number).@(family.CurrentCanary.Revision)</p>
<p class="latest-flex-lab">@family.CurrentCanary.Lab</p>
<p class="latest-flex-time">@(family.CurrentCanary.BuildTime?.ToString("HH:mm, dddd dd MMMM yyyy"))</p>
</div>
</a>
}
@if (family.CurrentInsider != null && family.CurrentInsider.Id != family.CurrentRelease?.Id)
{
<a href="@Url.Action(nameof(FrontController.ViewBuild), new
{
family.CurrentInsider.Id
})" class="latest-flex-item latest-flex-yellow">
<h4 class="latest-flex-title">@VariantTerms.Front_CurrentInsider</h4>
<div class="latest-flex-detail">
<p class="latest-flex-build">@(family.CurrentInsider.Number).@(family.CurrentInsider.Revision)</p>
<p class="latest-flex-lab">@family.CurrentInsider.Lab</p>
<p class="latest-flex-time">@(family.CurrentInsider.BuildTime?.ToString("HH:mm, dddd dd MMMM yyyy"))</p>
</div>
</a>
}
@if (family.CurrentRelease != null)
{
<a href="@Url.Action(nameof(FrontController.ViewBuild), new
{
family.CurrentRelease.Id
})" class="latest-flex-item latest-flex-blue">
<h4 class="latest-flex-title">@VariantTerms.Front_CurrentRelease</h4>
<div class="latest-flex-detail">
<p class="latest-flex-build">@(family.CurrentRelease.Number).@(family.CurrentRelease.Revision)</p>
<p class="latest-flex-lab">@family.CurrentRelease.Lab</p>
<p class="latest-flex-time">@(family.CurrentRelease.BuildTime?.ToString("HH:mm, dddd dd MMMM yyyy"))</p>
</div>
</a>
}
@if (family.CurrentXbox != null)
{
<a href="@Url.Action(nameof(FrontController.ViewBuild), new
{
family.CurrentXbox.Id
})" class="latest-flex-item latest-flex-green">
<h4 class="latest-flex-title">@VariantTerms.Front_CurrentXbox</h4>
<div class="latest-flex-detail">
<p class="latest-flex-build">@(family.CurrentXbox.Number).@(family.CurrentXbox.Revision)</p>
<p class="latest-flex-lab">@family.CurrentXbox.Lab</p>
<p class="latest-flex-time">@(family.CurrentXbox.BuildTime?.ToString("HH:mm, dddd dd MMMM yyyy"))</p>
</div>
</a>
}
<div class="latest-family">
<h3>@MvcExtensions.GetDisplayTextForEnum(item.Key)</h3>
<div class="latest-flex">
@if (family.CurrentCanary != null && family.CurrentCanary.Id != family.CurrentInsider?.Id)
{
<a href="@Url.Action(nameof(FrontController.ViewBuild), new
{
family.CurrentCanary.Id
})" class="latest-flex-item latest-flex-red">
<h4 class="latest-flex-title">@VariantTerms.Front_CurrentCanary</h4>
<div class="latest-flex-detail">
<p class="latest-flex-build">@(family.CurrentCanary.Number).@(family.CurrentCanary.Revision)</p>
<p class="latest-flex-lab">@family.CurrentCanary.Lab</p>
<p class="latest-flex-time">@(family.CurrentCanary.BuildTime?.ToString("HH:mm, dddd dd MMMM yyyy"))</p>
</div>
</a>
}
@if (family.CurrentInsider != null && family.CurrentInsider.Id != family.CurrentRelease?.Id)
{
<a href="@Url.Action(nameof(FrontController.ViewBuild), new
{
family.CurrentInsider.Id
})" class="latest-flex-item latest-flex-yellow">
<h4 class="latest-flex-title">@VariantTerms.Front_CurrentInsider</h4>
<div class="latest-flex-detail">
<p class="latest-flex-build">@(family.CurrentInsider.Number).@(family.CurrentInsider.Revision)</p>
<p class="latest-flex-lab">@family.CurrentInsider.Lab</p>
<p class="latest-flex-time">@(family.CurrentInsider.BuildTime?.ToString("HH:mm, dddd dd MMMM yyyy"))</p>
</div>
</a>
}
@if (family.CurrentRelease != null)
{
<a href="@Url.Action(nameof(FrontController.ViewBuild), new
{
family.CurrentRelease.Id
})" class="latest-flex-item latest-flex-blue">
<h4 class="latest-flex-title">@VariantTerms.Front_CurrentRelease</h4>
<div class="latest-flex-detail">
<p class="latest-flex-build">@(family.CurrentRelease.Number).@(family.CurrentRelease.Revision)</p>
<p class="latest-flex-lab">@family.CurrentRelease.Lab</p>
<p class="latest-flex-time">@(family.CurrentRelease.BuildTime?.ToString("HH:mm, dddd dd MMMM yyyy"))</p>
</div>
</a>
}
@if (family.CurrentXbox != null)
{
<a href="@Url.Action(nameof(FrontController.ViewBuild), new
{
family.CurrentXbox.Id
})" class="latest-flex-item latest-flex-green">
<h4 class="latest-flex-title">@VariantTerms.Front_CurrentXbox</h4>
<div class="latest-flex-detail">
<p class="latest-flex-build">@(family.CurrentXbox.Number).@(family.CurrentXbox.Revision)</p>
<p class="latest-flex-lab">@family.CurrentXbox.Lab</p>
<p class="latest-flex-time">@(family.CurrentXbox.BuildTime?.ToString("HH:mm, dddd dd MMMM yyyy"))</p>
</div>
</a>
}
</div>
</div>
</div>
}
</div>
}
</div>
</div>
<h3>@VariantTerms.Front_Share</h3>
<div class="addthis_sharing_toolbox"></div>

View File

@ -8,73 +8,74 @@
Response.PushPromise(VirtualPathUtility.ToAbsolute(((Theme)ViewBag.Theme).CssPath) + "?20170517");
if (isRtl)
{
Response.PushPromise("/res/css/rtl.css");
Response.PushPromise("/res/css/rtl.css");
}
Response.PushPromise("/res/ts/bfs.js");
}
<!DOCTYPE html>
}<!DOCTYPE html>
<html dir="@(isRtl
? "rtl"
: "ltr")" lang="@CultureInfo.CurrentUICulture.IetfLanguageTag">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="format-detection" content="telephone=no" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>@ViewBag.Title</title>
<link href="/res/css/default.css" 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" />
}
@switch (CultureInfo.CurrentUICulture.TwoLetterISOLanguageName)
{
case "ru":
case "uk":
<link href="https://fonts.googleapis.com/css?family=Fira+Sans:300,400,700&amp;subset=cyrillic" rel="stylesheet" type="text/css" />
break;
case "el":
<link href="https://fonts.googleapis.com/css?family=Fira+Sans:300,400,700&amp;subset=greek" rel="stylesheet" type="text/css" />
break;
case "vi":
<link href="https://fonts.googleapis.com/css?family=Fira+Sans:300,400,700&amp;subset=vietnamese" rel="stylesheet" type="text/css" />
break;
default:
<link href="https://fonts.googleapis.com/css?family=Fira+Sans:300,400,700" rel="stylesheet" type="text/css" />
break;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" type="text/css" integrity="sha256-eZrrJcwDc/3uDhsdt61sL2oOBY362qM3lon1gyExkL0=" crossorigin="anonymous" />
<link rel="manifest" href="~/manifest.json">
<link rel="shortcut icon" href="~/favicon.ico" />
<link rel="icon" href="~/favicon.ico" />
<link rel="canonical" href="@Url.Action()" />
<meta property="og:type" content="website" />
<meta property="og:site_name" content="@InvariantTerms.SiteName" />
<meta property="og:url" content="@Url.Action()" />
<meta name="theme-color" content="#373736">
<meta name="application-name" content="@InvariantTerms.SiteName" />
<meta name="twitter:site" content="@("@")buildfeed">
@RenderSection("head", false)
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="format-detection" content="telephone=no" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>@ViewBag.Title</title>
<link href="/res/css/default.css" 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" />
}
@switch (CultureInfo.CurrentUICulture.TwoLetterISOLanguageName)
{
case "ru":
case "uk":
<link href="https://fonts.googleapis.com/css?family=Fira+Sans:300,400,700&amp;subset=cyrillic" rel="stylesheet" type="text/css" />
break;
case "el":
<link href="https://fonts.googleapis.com/css?family=Fira+Sans:300,400,700&amp;subset=greek" rel="stylesheet" type="text/css" />
break;
case "vi":
<link href="https://fonts.googleapis.com/css?family=Fira+Sans:300,400,700&amp;subset=vietnamese" rel="stylesheet" type="text/css" />
break;
default:
<link href="https://fonts.googleapis.com/css?family=Fira+Sans:300,400,700" rel="stylesheet" type="text/css" />
break;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" type="text/css" integrity="sha256-eZrrJcwDc/3uDhsdt61sL2oOBY362qM3lon1gyExkL0=" crossorigin="anonymous" />
<link rel="manifest" href="~/manifest.json" />
<link rel="shortcut icon" href="~/favicon.ico" />
<link rel="icon" href="~/favicon.ico" />
<link rel="canonical" href="@Url.Action()" />
<meta property="og:type" content="website" />
<meta property="og:site_name" content="@InvariantTerms.SiteName" />
<meta property="og:url" content="@Url.Action()" />
<meta name="theme-color" content="#3B4252" />
<meta name="application-name" content="@InvariantTerms.SiteName" />
<meta name="twitter:site" content="@("@")buildfeed" />
@RenderSection("head", false)
<script src="https://cdn.onesignal.com/sdks/OneSignalSDK.js" async></script>
<script>
var OneSignal = window.OneSignal || [];
OneSignal.push(["init", {
appId: "94384f83-dced-4d66-a88c-c2b6e3cdfbaa",
safari_web_id: "web.onesignal.auto.4cc30974-98f9-47ba-8e02-4635d2d477f2",
persistNotification: false,
allowLocalhostAsSecureOrigin: true,
autoRegister: true,
notifyButton: {
enable: false
}
}]);
</script>
<script src="https://cdn.onesignal.com/sdks/OneSignalSDK.js" async="async"></script>
<script>
var OneSignal = window.OneSignal || [];
OneSignal.push([
"init", {
appId: "94384f83-dced-4d66-a88c-c2b6e3cdfbaa",
safari_web_id: "web.onesignal.auto.4cc30974-98f9-47ba-8e02-4635d2d477f2",
persistNotification: false,
allowLocalhostAsSecureOrigin: true,
autoRegister: true,
notifyButton: {
enable: false
}
}
]);
</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);
@ -86,235 +87,239 @@
ga('require', 'displayfeatures');
ga('require', 'linkid', 'linkid.js');
ga('send', 'pageview');
</script>
<header id="page-header">
<div class="container">
<h1>
</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">
{
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">
</button>
<ul id="page-navigation-links">
<li>
<a href="#" id="page-navigation-search" title="@VariantTerms.Search_Title">
<i class="fa fa-fw fa-search"></i> @VariantTerms.Search_Title
</a>
<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
<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>
<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" rel="noopener">
<i class="fa fa-fw fa-twitter"></i> @VariantTerms.Common_Twitter
</a>
<a href="https://twitter.com/buildfeed" title="@VariantTerms.Common_Twitter" target="_blank" rel="noopener">
<i class="fa fa-fw fa-twitter"></i> @VariantTerms.Common_Twitter
</a>
</li>
<li class="dropdown-parent">
<a href="#">
<i class="fa fa-fw fa-user"></i>
</a>
<ul class="dropdown-menu">
<li id="user-action-menu" class="dropdown-menu-block">
<ul>
@if (!User.Identity.IsAuthenticated)
{
<li>
<a href="@Url.Action(nameof(AccountController.Login), new
{
controller = "Account",
area = ""
})" title="@VariantTerms.Common_LogIn">
<i class="fa fa-fw fa-user"></i> @VariantTerms.Common_LogIn
</a>
</li>
}
else
{
if (Roles.IsUserInRole("Administrators"))
{
<li>
<a href="@Url.Action("Index", new
{
controller = "Root",
area = "admin"
})" title="@VariantTerms.Common_Admin">
<i class="fa fa-fw fa-cogs"></i> @VariantTerms.Common_Admin
</a>
</li>
}
if (Roles.IsUserInRole("Administrators") || Roles.IsUserInRole("Editors"))
{
<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>
}
if (Roles.IsUserInRole("Administrators"))
{
<li>
<a href="@Url.Action(nameof(FrontController.AddBulk), new
{
controller = "Front",
area = ""
})" title="@VariantTerms.Common_AddBulk">
<i class="fa fa-fw fa-database"></i> @VariantTerms.Common_AddBulk
</a>
</li>
}
<li>
<a href="@Url.Action(nameof(AccountController.Logout), new
{
controller = "Account",
area = ""
})" title="@VariantTerms.Common_LogOut">
<i class="fa fa-fw fa-user"></i> @VariantTerms.Common_LogOut
</a>
</li>
<li>
<a href="@Url.Action(nameof(AccountController.Password), new
{
controller = "Account",
area = ""
})" title="@VariantTerms.Common_ChangePassword">
<i class="fa fa-fw fa-key"></i> @VariantTerms.Common_ChangePassword
</a>
</li>
}
</ul>
</li>
</ul>
<a href="#">
<i class="fa fa-fw fa-user"></i>
</a>
<ul class="dropdown-menu">
<li id="user-action-menu" class="dropdown-menu-block">
<ul>
@if (!User.Identity.IsAuthenticated)
{
<li>
<a href="@Url.Action(nameof(AccountController.Login), new
{
controller = "Account",
area = ""
})" title="@VariantTerms.Common_LogIn">
<i class="fa fa-fw fa-user"></i> @VariantTerms.Common_LogIn
</a>
</li>
}
else
{
if (Roles.IsUserInRole("Administrators"))
{
<li>
<a href="@Url.Action("Index", new
{
controller = "Root",
area = "admin"
})" title="@VariantTerms.Common_Admin">
<i class="fa fa-fw fa-cogs"></i> @VariantTerms.Common_Admin
</a>
</li>
}
if (Roles.IsUserInRole("Administrators") || Roles.IsUserInRole("Editors"))
{
<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>
}
if (Roles.IsUserInRole("Administrators"))
{
<li>
<a href="@Url.Action(nameof(FrontController.AddBulk), new
{
controller = "Front",
area = ""
})" title="@VariantTerms.Common_AddBulk">
<i class="fa fa-fw fa-database"></i> @VariantTerms.Common_AddBulk
</a>
</li>
}
<li>
<a href="@Url.Action(nameof(AccountController.Logout), new
{
controller = "Account",
area = ""
})" title="@VariantTerms.Common_LogOut">
<i class="fa fa-fw fa-user"></i> @VariantTerms.Common_LogOut
</a>
</li>
<li>
<a href="@Url.Action(nameof(AccountController.Password), new
{
controller = "Account",
area = ""
})" title="@VariantTerms.Common_ChangePassword">
<i class="fa fa-fw fa-key"></i> @VariantTerms.Common_ChangePassword
</a>
</li>
}
</ul>
</li>
</ul>
</li>
<li class="dropdown-parent">
<a href="#">
<i class="fa fa-gear fa-fw"></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
<a href="#">
<i class="fa fa-gear fa-fw"></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>
}
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
</li>
</ul>
@locale.DisplayName
</a>
</li>
}
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></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">
</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
<p>
<a href="@Url.Action(nameof(SupportController.Sitemap), new
{
controller = "Support",
area = ""
})">
@VariantTerms.Common_Sitemap
</a>
</p>
<p>
<a href="@Url.Action(nameof(SupportController.Credits), new
{
controller = "Support",
area = ""
})">
@VariantTerms.Common_Credits
</a>
</p>
<p>
<i class="fa fa-language"></i>&ensp;
@CultureInfo.CurrentUICulture.NativeName
</p>
@VariantTerms.Common_Sitemap
</a>
</p>
<p>
<a href="@Url.Action(nameof(SupportController.Credits), new
{
controller = "Support",
area = ""
})">
@VariantTerms.Common_Credits
</a>
</p>
<p>
<i class="fa fa-language"></i>&ensp;
@CultureInfo.CurrentUICulture.NativeName
</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\" rel=\"noopener\">{InvariantTerms.DeveloperName}</a>"))
</p>
<p>
@Html.Raw(string.Format(VariantTerms.Common_ContributeOn, "<a href=\"https://github.com/hounsell/BuildFeed\" target=\"_blank\" dir=\"ltr\" rel=\"noopener\"><i class=\"fa fa-github\"></i>&ensp;GitHub</a>"))
</p>
<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\" rel=\"noopener\">{InvariantTerms.DeveloperName}</a>"))
</p>
<p>
@Html.Raw(string.Format(VariantTerms.Common_ContributeOn, "<a href=\"https://github.com/hounsell/BuildFeed\" target=\"_blank\" dir=\"ltr\" rel=\"noopener\"><i class=\"fa fa-github\"></i>&ensp;GitHub</a>"))
</p>
</div>
</div>
</div>
</footer>
</div>
</div>
</footer>
<div id="modal-search-overlay">
<div id="modal-search">
<h3>@VariantTerms.Search_BuildFeed</h3>
<div id="modal-search-box">
<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>
<i class="fa fa-search"></i>
</button>
</div>
<div id="modal-search-result"></div>
</div>
</div>
<div id="menu-open-overlay"></div>
</div>
<div id="modal-search-result"></div>
</div>
</div>
<div id="menu-open-overlay"></div>
<script type="text/javascript" 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.js" async="async"></script>
@RenderSection("scripts", false)
<script id="result-template" type="text/x-jsrender">
<script type="text/javascript" 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.js" async="async"></script>
@if (((Theme)ViewBag.Theme).Value == SiteTheme.Winter)
{
<script type="text/javascript" src="~/res/ts/christmas.js" async="async"></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>
<script type="text/javascript" src="https://s7.addthis.com/js/300/addthis_widget.js#pubid=ra-5431719a661cbfd0" async="async"></script>
</body>
</html>

View File

@ -1,370 +1,375 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings file="settings.config">
<add key="webpages:Version" value="3.0.0.0"/>
<add key="webpages:Enabled" value="false"/>
<add key="PreserveLoginUrl" value="true"/>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
<add key="data:MongoDB" value="BuildFeed"/>
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="PreserveLoginUrl" value="true" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
<add key="data:MongoDB" value="BuildFeed" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.7">
<assemblies>
<add assembly="System.Globalization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
<add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
<add assembly="System.Globalization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</assemblies>
</compilation>
<httpRuntime targetFramework="4.7" enableVersionHeader="false"/>
<globalization culture="auto:en" uiCulture="auto:en"/>
<trace enabled="true" requestLimit="40" pageOutput="false"/>
<sessionState cookieless="UseCookies"/>
<anonymousIdentification cookieless="UseCookies" enabled="false"/>
<httpRuntime targetFramework="4.7" enableVersionHeader="false" />
<globalization culture="auto:en" uiCulture="auto:en" />
<trace enabled="true" requestLimit="40" pageOutput="false" />
<sessionState cookieless="UseCookies" />
<anonymousIdentification cookieless="UseCookies" enabled="false" />
<authentication mode="Forms">
<forms loginUrl="/login/" cookieless="UseCookies" name="BuildFeedAuth"/>
<forms loginUrl="/login/" cookieless="UseCookies" name="BuildFeedAuth" />
</authentication>
<membership defaultProvider="BuildFeedMemberProvider">
<providers>
<clear/>
<add name="BuildFeedMemberProvider" type="MongoAuth.MongoMembershipProvider,MongoAuth"/>
<clear />
<add name="BuildFeedMemberProvider" type="MongoAuth.MongoMembershipProvider,MongoAuth" />
</providers>
</membership>
<roleManager defaultProvider="BuildFeedRoleProvider" enabled="true">
<providers>
<clear/>
<add name="BuildFeedRoleProvider" type="MongoAuth.MongoRoleProvider,MongoAuth"/>
<clear />
<add name="BuildFeedRoleProvider" type="MongoAuth.MongoRoleProvider,MongoAuth" />
</providers>
</roleManager>
<httpModules/>
<httpHandlers/>
<httpModules />
<httpHandlers />
</system.web>
<system.webServer>
<urlCompression doDynamicCompression="true"/>
<validation validateIntegratedModeConfiguration="false"/>
<modules/>
<urlCompression doDynamicCompression="true" />
<validation validateIntegratedModeConfiguration="false" />
<modules />
<rewrite>
<rules>
<rule name="(2015-05) Support Pages">
<match url=".*"/>
<match url=".*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{Support Pages:{REQUEST_URI}}" pattern="(.+)"/>
<add input="{Support Pages:{REQUEST_URI}}" pattern="(.+)" />
</conditions>
<action type="Redirect" url="{C:1}" appendQueryString="true"/>
<action type="Redirect" url="{C:1}" appendQueryString="true" />
</rule>
<rule name="(2015-05) Pagination">
<match url="(.*)page/(\d+)/(.*)"/>
<action type="Redirect" redirectType="Permanent" url="/{R:1}{R:3}"/>
<match url="(.*)page/(\d+)/(.*)" />
<action type="Redirect" redirectType="Permanent" url="/{R:1}{R:3}" />
</rule>
<rule name="(2015-12) Build Info Pages">
<match url="^actions/info/([0-9a-f-]+)/(\?.+)?$"/>
<action type="Redirect" redirectType="Permanent" url="/build/{R:1}/{R:2}"/>
<match url="^actions/info/([0-9a-f-]+)/(\?.+)?$" />
<action type="Redirect" redirectType="Permanent" url="/build/{R:1}/{R:2}" />
</rule>
<rule name="(2016-07) RSS Flights">
<match url="^rss/flight/([a-z-]+)/(\?.+)?$"/>
<action type="Redirect" redirectType="Permanent" url="/rss/"/>
<match url="^rss/flight/([a-z-]+)/(\?.+)?$" />
<action type="Redirect" redirectType="Permanent" url="/rss/" />
</rule>
</rules>
<rewriteMaps>
<rewriteMap name="Support Pages">
<add key="/statistics/" value="/"/>
<add key="/support/question/" value="/"/>
<add key="/support/stats/" value="/"/>
<add key="/support/rss/" value="/rss/"/>
<add key="/actions/create/" value="/add/"/>
<add key="/support/login/" value="/login/"/>
<add key="/support/logout/" value="/logout/"/>
<add key="/support/password/" value="/password/"/>
<add key="/support/register/" value="/register/"/>
<add key="/support/sitemap/" value="/sitemap/"/>
<add key="/support/xmlsitemap/" value="/xml-sitemap/"/>
<add key="/content/tile/large.png" value="/res/ico/large.png" />
<add key="/content/tile/notify.png" value="/res/ico/notify.png" />
<add key="/content/tile/square.png" value="/res/ico/square.png" />
<add key="/content/tile/tiny.png" value="/res/ico/tiny.png" />
<add key="/content/tile/wide.png" value="/res/ico/wide.png" />
<add key="/statistics/" value="/" />
<add key="/support/question/" value="/" />
<add key="/support/stats/" value="/" />
<add key="/support/rss/" value="/rss/" />
<add key="/actions/create/" value="/add/" />
<add key="/support/login/" value="/login/" />
<add key="/support/logout/" value="/logout/" />
<add key="/support/password/" value="/password/" />
<add key="/support/register/" value="/register/" />
<add key="/support/sitemap/" value="/sitemap/" />
<add key="/support/xmlsitemap/" value="/xml-sitemap/" />
</rewriteMap>
</rewriteMaps>
</rewrite>
<httpProtocol>
<customHeaders>
<clear/>
<add name="X-Content-Type-Options" value="nosniff"/>
<add name="X-Frame-Options" value="DENY"/>
<add name="X-XSS-Protection" value="1; mode=block"/>
<add name="Referrer-Policy" value="origin-when-cross-origin"/>
<clear />
<add name="X-Content-Type-Options" value="nosniff" />
<add name="X-Frame-Options" value="DENY" />
<add name="X-XSS-Protection" value="1; mode=block" />
<add name="Referrer-Policy" value="origin-when-cross-origin" />
</customHeaders>
</httpProtocol>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0"/>
<remove name="OPTIONSVerbHandler"/>
<remove name="TRACEVerbHandler"/>
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
<system.net>
<mailSettings>
<smtp configSource="smtp.config"/>
<smtp configSource="smtp.config" />
</mailSettings>
</system.net>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Reflection.Extensions" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
<assemblyIdentity name="System.Reflection.Extensions" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
<assemblyIdentity name="System.Threading" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading.Overlapped" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0"/>
<assemblyIdentity name="System.Threading.Overlapped" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Text.Encoding.Extensions" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
<assemblyIdentity name="System.Text.Encoding.Extensions" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Text.Encoding" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
<assemblyIdentity name="System.Text.Encoding" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Globalization" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
<assemblyIdentity name="System.Globalization" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.Serialization.Xml" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.1.3.0" newVersion="4.1.3.0"/>
<assemblyIdentity name="System.Runtime.Serialization.Xml" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.3.0" newVersion="4.1.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Security.SecureString" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0"/>
<assemblyIdentity name="System.Security.SecureString" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading.Timer" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
<assemblyIdentity name="System.Threading.Timer" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Primitives" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
<assemblyIdentity name="System.Net.Primitives" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Sockets" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0"/>
<assemblyIdentity name="System.Net.Sockets" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Collections" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
<assemblyIdentity name="System.Collections" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Xml.ReaderWriter" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0"/>
<assemblyIdentity name="System.Xml.ReaderWriter" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.Debug" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
<assemblyIdentity name="System.Diagnostics.Debug" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Resources.ResourceManager" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
<assemblyIdentity name="System.Resources.ResourceManager" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Linq.Queryable" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
<assemblyIdentity name="System.Linq.Queryable" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.ValueTuple" publicKeyToken="CC7B13FFCD2DDD51" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0"/>
<assemblyIdentity name="System.ValueTuple" publicKeyToken="CC7B13FFCD2DDD51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.Contracts" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
<assemblyIdentity name="System.Diagnostics.Contracts" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.Numerics" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
<assemblyIdentity name="System.Runtime.Numerics" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.ComponentModel.EventBasedAsync" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
<assemblyIdentity name="System.ComponentModel.EventBasedAsync" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Collections.Concurrent" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
<assemblyIdentity name="System.Collections.Concurrent" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Dynamic.Runtime" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
<assemblyIdentity name="System.Dynamic.Runtime" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Reflection.Primitives" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
<assemblyIdentity name="System.Reflection.Primitives" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Security.Principal" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
<assemblyIdentity name="System.Security.Principal" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.ComponentModel" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
<assemblyIdentity name="System.ComponentModel" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Security.Cryptography.Algorithms" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0"/>
<assemblyIdentity name="System.Security.Cryptography.Algorithms" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Linq.Parallel" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
<assemblyIdentity name="System.Linq.Parallel" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.StackTrace" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0"/>
<assemblyIdentity name="System.Diagnostics.StackTrace" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Xml.XmlSerializer" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
<assemblyIdentity name="System.Xml.XmlSerializer" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.NetworkInformation" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0"/>
<assemblyIdentity name="System.Net.NetworkInformation" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Xml.XDocument" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
<assemblyIdentity name="System.Xml.XDocument" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.Serialization.Json" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
<assemblyIdentity name="System.Runtime.Serialization.Json" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.ObjectModel" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
<assemblyIdentity name="System.ObjectModel" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Xml.XPath.XDocument" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0"/>
<assemblyIdentity name="System.Xml.XPath.XDocument" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Globalization.Extensions" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0"/>
<assemblyIdentity name="System.Globalization.Extensions" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Linq.Expressions" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0"/>
<assemblyIdentity name="System.Linq.Expressions" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks.Parallel" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
<assemblyIdentity name="System.Threading.Tasks.Parallel" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.Serialization.Primitives" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0"/>
<assemblyIdentity name="System.Runtime.Serialization.Primitives" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.Tools" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
<assemblyIdentity name="System.Diagnostics.Tools" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Requests" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
<assemblyIdentity name="System.Net.Requests" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Data.Common" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0"/>
<assemblyIdentity name="System.Data.Common" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed"/>
<bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0"/>
<assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0"/>
<assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930"/>
<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-3.5.0.2" newVersion="3.5.0.2"/>
<assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.5.0.2" newVersion="3.5.0.2" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.ApplicationInsights" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-1.2.0.5639" newVersion="1.2.0.5639"/>
<assemblyIdentity name="Microsoft.ApplicationInsights" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.2.0.5639" newVersion="1.2.0.5639" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.AI.Agent.Intercept" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-2.0.7.0" newVersion="2.0.7.0"/>
<assemblyIdentity name="Microsoft.AI.Agent.Intercept" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.7.0" newVersion="2.0.7.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0"/>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0"/>
<assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0"/>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Linq" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0"/>
<assemblyIdentity name="System.Linq" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0"/>
<assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Text.RegularExpressions" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0"/>
<assemblyIdentity name="System.Text.RegularExpressions" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.Extensions" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0"/>
<assemblyIdentity name="System.Runtime.Extensions" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0"/>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.InteropServices" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0"/>
<assemblyIdentity name="System.Runtime.InteropServices" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.Tracing" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0"/>
<assemblyIdentity name="System.Diagnostics.Tracing" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Security.Cryptography.X509Certificates" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0"/>
<assemblyIdentity name="System.Security.Cryptography.X509Certificates" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0"/>
<assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Win32.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
<assemblyIdentity name="Microsoft.Win32.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.IO.Compression" publicKeyToken="b77a5c561934e089" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0"/>
<assemblyIdentity name="System.IO.Compression" publicKeyToken="b77a5c561934e089" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /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.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /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.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /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.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
</compilers>
</system.codedom>
</configuration>

View File

@ -3,10 +3,10 @@
<browserconfig>
<msapplication>
<tile>
<square70x70logo src="content/tile/tiny.png" />
<square150x150logo src="content/tile/square.png" />
<wide310x150logo src="content/tile/wide.png" />
<square310x310logo src="content/tile/large.png" />
<square70x70logo src="res/ico/tiny.png" />
<square150x150logo src="res/ico/square.png" />
<wide310x150logo src="res/ico/wide.png" />
<square310x310logo src="res/ico/large.png" />
<TileColor>#2E3440</TileColor>
</tile>
<notification>

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

View File

@ -4,7 +4,7 @@ var sass = require("gulp-sass");
var cleanCss = require("gulp-clean-css");
var sourceMaps = require("gulp-sourcemaps");
var ts = require("gulp-typescript");
var uglify = require("gulp-uglify");
var uglify = require("gulp-uglify-es").default;
var autoprefixer = require("gulp-autoprefixer");
gulp.task("sass-compile",
@ -28,7 +28,7 @@ gulp.task("typescript",
return gulp.src("./res/ts/*.ts")
.pipe(sourceMaps.init())
.pipe(ts({
target: "es5",
target: "es6",
sourceMap: false
}))
.js
@ -40,6 +40,6 @@ gulp.task("typescript",
gulp.task("watch-sass",
function()
{
gulp.watch("./res/scss/*.scss", ["sass-compile"]);
gulp.watch("./res/css/**.scss", ["sass-compile"]);
gulp.watch("./res/ts/*.ts", ["typescript"]);
});

View File

@ -1,16 +1,16 @@
{
"name": "BuildFeed",
"short_name": "BuildFeed",
"background_color": "#2E3440",
"theme_color": "#2E3440",
"description": "Learn what Dona Sarkar won't tell you. Keep up to date with the latest Microsoft Windows developments with BuildFeed, the comprehensive build tracker.",
"icons": [
{
"src": "https://buildfeed.net/content/tile/notify.png",
"sizes": "2048x2048"
}
],
"start_url": "https://buildfeed.net/",
"display": "standalone",
"gcm_sender_id": "482941778795"
"name": "BuildFeed",
"short_name": "BuildFeed",
"background_color": "#3B4252",
"theme_color": "#3B4252",
"description": "Learn what Dona Sarkar won't tell you. Keep up to date with the latest Microsoft Windows developments with BuildFeed, the comprehensive build tracker.",
"icons": [
{
"src": "https://buildfeed.net/res/ico/notify.png",
"sizes": "2048x2048"
}
],
"start_url": "https://buildfeed.net/",
"display": "standalone",
"gcm_sender_id": "482941778795"
}

View File

@ -36,9 +36,9 @@
}
},
"abbrev": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz",
"integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=",
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
"dev": true
},
"acorn": {
@ -48,13 +48,15 @@
"dev": true
},
"ajv": {
"version": "4.11.8",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
"integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-5.3.0.tgz",
"integrity": "sha1-RBT/dKUIecII7l/cgm4ywwNUnto=",
"dev": true,
"requires": {
"co": "4.6.0",
"json-stable-stringify": "1.0.1"
"fast-deep-equal": "1.0.0",
"fast-json-stable-stringify": "2.0.0",
"json-schema-traverse": "0.3.1"
}
},
"amdefine": {
@ -76,9 +78,9 @@
"dev": true
},
"aproba": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.2.tgz",
"integrity": "sha512-ZpYajIfO0j2cOFTO955KUMIKNmj6zhX8kVztMAxFsDaMwz+9Z9SV0uou2pC9HJqcfpffOsjnbrDMvkNy+9RXPw==",
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
"dev": true
},
"archy": {
@ -187,9 +189,9 @@
"dev": true
},
"assert-plus": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
"integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
"dev": true
},
"async-foreach": {
@ -225,9 +227,9 @@
}
},
"aws-sign2": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
"integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
"dev": true
},
"aws4": {
@ -268,12 +270,12 @@
}
},
"boom": {
"version": "2.10.1",
"resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
"integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
"integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
"dev": true,
"requires": {
"hoek": "2.16.3"
"hoek": "4.2.0"
}
},
"brace-expansion": {
@ -475,12 +477,23 @@
}
},
"cryptiles": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
"integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz",
"integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=",
"dev": true,
"requires": {
"boom": "2.10.1"
"boom": "5.2.0"
},
"dependencies": {
"boom": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
"integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
"dev": true,
"requires": {
"hoek": "4.2.0"
}
}
}
},
"css": {
@ -531,14 +544,6 @@
"dev": true,
"requires": {
"assert-plus": "1.0.0"
},
"dependencies": {
"assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
"dev": true
}
}
},
"dateformat": {
@ -854,6 +859,18 @@
"time-stamp": "1.1.0"
}
},
"fast-deep-equal": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz",
"integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=",
"dev": true
},
"fast-json-stable-stringify": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
"integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
"dev": true
},
"filename-regex": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
@ -959,14 +976,14 @@
"dev": true
},
"form-data": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
"integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz",
"integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=",
"dev": true,
"requires": {
"asynckit": "0.4.0",
"combined-stream": "1.0.5",
"mime-types": "2.1.16"
"mime-types": "2.1.17"
}
},
"fs-exists-sync": {
@ -990,7 +1007,7 @@
"graceful-fs": "4.1.11",
"inherits": "2.0.3",
"mkdirp": "0.5.1",
"rimraf": "2.6.1"
"rimraf": "2.6.2"
},
"dependencies": {
"graceful-fs": {
@ -1007,7 +1024,7 @@
"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
"dev": true,
"requires": {
"aproba": "1.1.2",
"aproba": "1.2.0",
"console-control-strings": "1.1.0",
"has-unicode": "2.0.1",
"object-assign": "4.1.1",
@ -1053,14 +1070,6 @@
"dev": true,
"requires": {
"assert-plus": "1.0.0"
},
"dependencies": {
"assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
"dev": true
}
}
},
"glob": {
@ -1282,6 +1291,17 @@
"vinyl-sourcemaps-apply": "0.2.1"
}
},
"gulp-exec": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/gulp-exec/-/gulp-exec-2.1.3.tgz",
"integrity": "sha1-RgpOyN+GhB0XOLx0lYxo5XaTQtk=",
"dev": true,
"requires": {
"gulp-util": "3.0.8",
"gulplog": "1.0.0",
"through2": "2.0.3"
}
},
"gulp-sass": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-3.1.0.tgz",
@ -1290,7 +1310,7 @@
"requires": {
"gulp-util": "3.0.8",
"lodash.clonedeep": "4.5.0",
"node-sass": "4.5.3",
"node-sass": "4.6.1",
"through2": "2.0.3",
"vinyl-sourcemaps-apply": "0.2.1"
}
@ -1335,9 +1355,9 @@
}
},
"gulp-typescript": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-3.2.2.tgz",
"integrity": "sha1-t+Xh08s193LlPmBAJmAYJuK+d/w=",
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-3.2.3.tgz",
"integrity": "sha512-Np2sJXgtDUwIAoMtlJ9uXsVmpu1FWXlKZw164hLuo56uJa7qo5W2KZ0yAYiYH/HUsaz5L0O2toMOcLIokpFCPg==",
"dev": true,
"requires": {
"gulp-util": "3.0.8",
@ -1558,26 +1578,32 @@
}
}
},
"gulp-uglify": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-3.0.0.tgz",
"integrity": "sha1-DfAzHXKg0wLj434QlIXd3zPG0co=",
"gulp-uglify-es": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/gulp-uglify-es/-/gulp-uglify-es-0.1.4.tgz",
"integrity": "sha512-gVAzB1ubmPScn49lU78fA+CZzW8jK6GGAY7p9M11WKO/yIs9DY+4WB+GUnZ53sD6Wq9GpaOPUPH7WRgmKxBsqw==",
"dev": true,
"requires": {
"gulplog": "1.0.0",
"has-gulplog": "0.1.0",
"lodash": "4.17.4",
"make-error-cause": "1.2.2",
"through2": "2.0.3",
"uglify-js": "3.0.28",
"vinyl-sourcemaps-apply": "0.2.1"
"gulp-exec": "2.1.3",
"o-stream": "0.2.2",
"uglify-es": "3.1.9"
},
"dependencies": {
"lodash": {
"version": "4.17.4",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
"integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
},
"uglify-es": {
"version": "3.1.9",
"resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.1.9.tgz",
"integrity": "sha512-wVSiJKHDgDDFmxTVVvnbAH6IpamAFHYDI+5JvwPdaqIMnk8kRTX2JKwq1Fx7gb2+Jj5Dus8kzvIpKkWOMNU51w==",
"dev": true,
"requires": {
"commander": "2.11.0",
"source-map": "0.6.1"
}
}
}
},
@ -1617,19 +1643,19 @@
}
},
"har-schema": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz",
"integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=",
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
"dev": true
},
"har-validator": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
"integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=",
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
"integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
"dev": true,
"requires": {
"ajv": "4.11.8",
"har-schema": "1.0.5"
"ajv": "5.3.0",
"har-schema": "2.0.0"
}
},
"has-ansi": {
@ -1663,21 +1689,21 @@
"dev": true
},
"hawk": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
"integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
"integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
"dev": true,
"requires": {
"boom": "2.10.1",
"cryptiles": "2.0.5",
"hoek": "2.16.3",
"sntp": "1.0.9"
"boom": "4.3.1",
"cryptiles": "3.1.2",
"hoek": "4.2.0",
"sntp": "2.1.0"
}
},
"hoek": {
"version": "2.16.3",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
"integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz",
"integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==",
"dev": true
},
"homedir-polyfill": {
@ -1696,12 +1722,12 @@
"dev": true
},
"http-signature": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
"integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"dev": true,
"requires": {
"assert-plus": "0.2.0",
"assert-plus": "1.0.0",
"jsprim": "1.4.1",
"sshpk": "1.13.1"
}
@ -1968,9 +1994,9 @@
"dev": true
},
"js-base64": {
"version": "2.1.9",
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz",
"integrity": "sha1-8OgK4DmkvWVLXygfyT8EqRSn/M4=",
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.3.2.tgz",
"integrity": "sha512-Y2/+DnfJJXT1/FCwUebUhLWb3QihxiSC42+ctHLGogmW2jPY6LCapMdFZXRvVP2z6qyKW7s6qncE/9gSqZiArw==",
"dev": true
},
"jsbn": {
@ -1986,6 +2012,12 @@
"integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
"dev": true
},
"json-schema-traverse": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
"integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
"dev": true
},
"json-stable-stringify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
@ -2017,14 +2049,6 @@
"extsprintf": "1.3.0",
"json-schema": "0.2.3",
"verror": "1.10.0"
},
"dependencies": {
"assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
"dev": true
}
}
},
"kind-of": {
@ -2325,21 +2349,6 @@
"es5-ext": "0.10.30"
}
},
"make-error": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.0.tgz",
"integrity": "sha1-Uq06M5zPEM5itAQLcI/nByRLi5Y=",
"dev": true
},
"make-error-cause": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-1.2.2.tgz",
"integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=",
"dev": true,
"requires": {
"make-error": "1.3.0"
}
},
"map-cache": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
@ -2457,18 +2466,18 @@
}
},
"mime-db": {
"version": "1.29.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.29.0.tgz",
"integrity": "sha1-SNJtI1WJZRcErFkWygYAGRQmaHg=",
"version": "1.30.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz",
"integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=",
"dev": true
},
"mime-types": {
"version": "2.1.16",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz",
"integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=",
"version": "2.1.17",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz",
"integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=",
"dev": true,
"requires": {
"mime-db": "1.29.0"
"mime-db": "1.30.0"
}
},
"minimatch": {
@ -2519,9 +2528,9 @@
}
},
"nan": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz",
"integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=",
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz",
"integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=",
"dev": true
},
"natives": {
@ -2550,8 +2559,8 @@
"nopt": "3.0.6",
"npmlog": "4.1.2",
"osenv": "0.1.4",
"request": "2.81.0",
"rimraf": "2.6.1",
"request": "2.83.0",
"rimraf": "2.6.2",
"semver": "5.3.0",
"tar": "2.2.1",
"which": "1.3.0"
@ -2595,9 +2604,9 @@
}
},
"node-sass": {
"version": "4.5.3",
"resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.5.3.tgz",
"integrity": "sha1-0JydEXlkEjnRuX/8YjH9zsU+FWg=",
"version": "4.6.1",
"resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.6.1.tgz",
"integrity": "sha512-0zQQ7tjEK5W8RfW9LiQrkzfo7uLZ0QtZGV69rdKn5cFzdweHLJ14lR6xLPvI6UimkXMO8m0qDsXwUCNdnqV3sA==",
"dev": true,
"requires": {
"async-foreach": "0.1.3",
@ -2612,10 +2621,10 @@
"lodash.mergewith": "4.6.0",
"meow": "3.7.0",
"mkdirp": "0.5.1",
"nan": "2.6.2",
"nan": "2.7.0",
"node-gyp": "3.6.2",
"npmlog": "4.1.2",
"request": "2.81.0",
"request": "2.83.0",
"sass-graph": "2.2.4",
"stdout-stream": "1.4.0"
},
@ -2677,7 +2686,7 @@
"integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
"dev": true,
"requires": {
"abbrev": "1.1.0"
"abbrev": "1.1.1"
}
},
"normalize-package-data": {
@ -2731,6 +2740,12 @@
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
"dev": true
},
"o-stream": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/o-stream/-/o-stream-0.2.2.tgz",
"integrity": "sha512-V3j76KU3g/Gyl8rpdi2z72rn5zguMvTCQgAXfBe3pxEefKqXmOUOD7mvx/mNjykdxGqDVfpSoo8r+WdrkWg/1Q==",
"dev": true
},
"oauth-sign": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
@ -2956,9 +2971,9 @@
}
},
"performance-now": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
"integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=",
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
"dev": true
},
"pify": {
@ -3061,9 +3076,9 @@
"dev": true
},
"qs": {
"version": "6.4.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
"integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=",
"version": "6.5.1",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
"integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==",
"dev": true
},
"randomatic": {
@ -3203,31 +3218,31 @@
"dev": true
},
"request": {
"version": "2.81.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
"integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
"version": "2.83.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz",
"integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==",
"dev": true,
"requires": {
"aws-sign2": "0.6.0",
"aws-sign2": "0.7.0",
"aws4": "1.6.0",
"caseless": "0.12.0",
"combined-stream": "1.0.5",
"extend": "3.0.1",
"forever-agent": "0.6.1",
"form-data": "2.1.4",
"har-validator": "4.2.1",
"hawk": "3.1.3",
"http-signature": "1.1.1",
"form-data": "2.3.1",
"har-validator": "5.0.3",
"hawk": "6.0.2",
"http-signature": "1.2.0",
"is-typedarray": "1.0.0",
"isstream": "0.1.2",
"json-stringify-safe": "5.0.1",
"mime-types": "2.1.16",
"mime-types": "2.1.17",
"oauth-sign": "0.8.2",
"performance-now": "0.2.0",
"qs": "6.4.0",
"performance-now": "2.1.0",
"qs": "6.5.1",
"safe-buffer": "5.1.1",
"stringstream": "0.0.5",
"tough-cookie": "2.3.2",
"tough-cookie": "2.3.3",
"tunnel-agent": "0.6.0",
"uuid": "3.1.0"
}
@ -3270,9 +3285,9 @@
"dev": true
},
"rimraf": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz",
"integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=",
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
"integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
"dev": true,
"requires": {
"glob": "7.1.2"
@ -3358,7 +3373,7 @@
"integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
"dev": true,
"requires": {
"js-base64": "2.1.9",
"js-base64": "2.3.2",
"source-map": "0.4.4"
},
"dependencies": {
@ -3404,12 +3419,12 @@
"dev": true
},
"sntp": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
"integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz",
"integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==",
"dev": true,
"requires": {
"hoek": "2.16.3"
"hoek": "4.2.0"
}
},
"source-map": {
@ -3477,14 +3492,6 @@
"getpass": "0.1.7",
"jsbn": "0.1.1",
"tweetnacl": "0.14.5"
},
"dependencies": {
"assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
"dev": true
}
}
},
"stdout-stream": {
@ -3540,12 +3547,6 @@
"integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
"dev": true
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
"dev": true
},
"string-width": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
@ -3557,6 +3558,12 @@
"strip-ansi": "3.0.1"
}
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
"dev": true
},
"stringstream": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
@ -3722,9 +3729,9 @@
}
},
"tough-cookie": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz",
"integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=",
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz",
"integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=",
"dev": true,
"requires": {
"punycode": "1.4.1"
@ -3753,21 +3760,11 @@
"optional": true
},
"typescript": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-2.5.2.tgz",
"integrity": "sha1-A4qV99m7tCCxvzW6MdTFwd0//jQ=",
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.1.tgz",
"integrity": "sha1-7znN6ierrAtQAkLWcmq5DgyEZjE=",
"dev": true
},
"uglify-js": {
"version": "3.0.28",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.28.tgz",
"integrity": "sha512-0h/qGay016GG2lVav3Kz174F3T2Vjlz2v6HCt+WDQpoXfco0hWwF5gHK9yh88mUYvIC+N7Z8NT8WpjSp1yoqGA==",
"dev": true,
"requires": {
"commander": "2.11.0",
"source-map": "0.5.7"
}
},
"unc-path-regex": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
@ -3838,14 +3835,6 @@
"assert-plus": "1.0.0",
"core-util-is": "1.0.2",
"extsprintf": "1.3.0"
},
"dependencies": {
"assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
"dev": true
}
}
},
"vinyl": {

View File

@ -1,15 +1,16 @@
{
"version": "1.0.0",
"name": "buildfeed",
"private": true,
"devDependencies": {
"gulp": "^3.9.1",
"gulp-autoprefixer": "^4.0.0",
"gulp-clean-css": "^3.9.0",
"gulp-sass": "^3.1.0",
"gulp-sourcemaps": "^2.6.1",
"gulp-typescript": "^3.2.2",
"gulp-uglify": "^3.0.0",
"typescript": "^2.5.2"
}
"version": "1.0.0",
"name": "buildfeed",
"private": true,
"devDependencies": {
"gulp": "^3.9.1",
"gulp-autoprefixer": "^4.0.0",
"gulp-clean-css": "^3.9.0",
"gulp-sass": "^3.1.0",
"gulp-sourcemaps": "^2.6.1",
"gulp-typescript": "^3.2.3",
"gulp-uglify-es": "^0.1.4",
"typescript": "^2.6.1",
"node-sass": "^4.6.1"
}
}

View File

@ -2,7 +2,7 @@
<packages>
<package id="AutoMapper" version="6.1.1" targetFramework="net47" />
<package id="google.analytics.TypeScript.DefinitelyTyped" version="0.3.8" targetFramework="net47" />
<package id="HtmlAgilityPack" version="1.5.5" targetFramework="net47" />
<package id="HtmlAgilityPack" version="1.6.3" targetFramework="net47" />
<package id="Humanizer" version="2.2.0" targetFramework="net47" />
<package id="Humanizer.Core" version="2.2.0" targetFramework="net47" />
<package id="Humanizer.Core.af" version="2.2.0" targetFramework="net47" />
@ -56,17 +56,17 @@
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net47" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net47" />
<package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net47" />
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.7" targetFramework="net47" />
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.8" targetFramework="net47" />
<package id="Microsoft.CSharp" version="4.4.0" targetFramework="net47" />
<package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.3" targetFramework="net47" />
<package id="Microsoft.Net.Compilers" version="2.3.2" targetFramework="net47" developmentDependency="true" />
<package id="Microsoft.Net.Compilers" version="2.4.0" targetFramework="net47" developmentDependency="true" />
<package id="Microsoft.NETCore.Platforms" version="2.0.0" targetFramework="net47" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net47" />
<package id="Microsoft.Win32.Primitives" version="4.3.0" targetFramework="net47" />
<package id="MongoDB.Bson" version="2.4.4" targetFramework="net47" />
<package id="MongoDB.Driver" version="2.4.4" targetFramework="net47" />
<package id="MongoDB.Driver.Core" version="2.4.4" targetFramework="net47" />
<package id="NETStandard.Library" version="2.0.0" targetFramework="net47" />
<package id="NETStandard.Library" version="2.0.1" targetFramework="net47" />
<package id="Newtonsoft.Json" version="10.0.3" targetFramework="net47" />
<package id="OneSignal.CSharp.SDK" version="0.10" targetFramework="net47" />
<package id="RestSharp" version="105.2.3" targetFramework="net47" />

View File

@ -1,2 +1,2 @@
body{background-color:#3b4252;color:#f8fbff}a{color:#fff}#page-footer a,h1>a{color:#f8fbff}table thead th{border-bottom-color:#f8fbff}#page-content{background-color:#2e3440;color:#f8fbff}#page-content h3{border-bottom-color:#d8dee9}#page-navigation{background-color:#434c5e;color:#e5e9f0;border-bottom-color:#2e3440}#page-navigation button{color:#e5e9f0}#page-navigation #page-navigation-links>li a{color:#e5e9f0}#page-navigation #page-navigation-links>li.open>a,#page-navigation #page-navigation-links>li>a:hover{background-color:#4c566a}.dropdown-menu{background-color:#4c566a;border-color:#2e3440;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.15);box-shadow:0 5px 10px rgba(0,0,0,.15)}.dropdown-menu a:active,.dropdown-menu a:focus,.dropdown-menu a:hover{background-color:#434c5e}article{-webkit-box-shadow:0 0 15px rgba(0,0,0,.15) inset;box-shadow:0 0 15px rgba(0,0,0,.15) inset}article h1,article h3{color:#f8fbff}article .build-details-comments a,article .build-group>h3>a,article a.more-link{color:#e5e9f0}article .build-group-listing .build-group{background-color:#4c566a}.latest-flex .latest-flex-item{background:#4c566a}.latest-flex .latest-flex-item .latest-flex-detail{color:#fff}ul.pagination>li.active>a{background:#f8fbff;color:#3b4252!important}ul.pagination>li:active:not(.disabled)>a,ul.pagination>li:focus:not(.disabled)>a,ul.pagination>li:hover:not(.disabled)>a{background:#e5e9f0;color:#2e3440!important}#modal-search-overlay #modal-search{background-color:#3b4252}#modal-search-overlay #modal-search h3{color:#f8fbff}#modal-search-overlay #modal-search>#modal-search-box>#modal-search-button,#modal-search-overlay #modal-search>#modal-search-box>#modal-search-input{background-color:#2e3440;color:#f8fbff;border-color:#e5e9f0}
body{background-color:#3b4252;color:#f8fbff}a{color:#fff}#page-footer a,h1>a{color:#f8fbff}table thead th{border-bottom-color:#f8fbff}#page-content{background-color:#2e3440;color:#f8fbff}#page-content h3{border-bottom-color:#d8dee9}#page-navigation{background-color:#434c5e;color:#e5e9f0;border-bottom-color:#2e3440}#page-navigation button{color:#e5e9f0}#page-navigation #page-navigation-links>li a{color:#e5e9f0}#page-navigation #page-navigation-links>li.open>a,#page-navigation #page-navigation-links>li>a:hover{background-color:#4c566a}.dropdown-menu{background-color:#4c566a;border-color:#2e3440;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.15);box-shadow:0 5px 10px rgba(0,0,0,.15)}.dropdown-menu a:active,.dropdown-menu a:focus,.dropdown-menu a:hover{background-color:#434c5e}article{-webkit-box-shadow:0 0 15px rgba(0,0,0,.15) inset;box-shadow:0 0 15px rgba(0,0,0,.15) inset}article h1,article h3{color:#f8fbff}article .build-details-comments a,article .build-group>h3>a,article a.more-link{color:#e5e9f0}article .build-group-listing .build-group{background-color:#4c566a}article .build-group-listing .build-group:hover{-webkit-box-shadow:0 0 10px 0 rgba(0,0,0,.33);box-shadow:0 0 10px 0 rgba(0,0,0,.33)}.latest-flex .latest-flex-item{background:#4c566a}.latest-flex .latest-flex-item .latest-flex-detail{color:#fff}.latest-flex .latest-flex-item:hover{-webkit-box-shadow:0 0 10px 0 rgba(0,0,0,.33);box-shadow:0 0 10px 0 rgba(0,0,0,.33)}ul.pagination>li.active>a{background:#f8fbff;color:#3b4252!important}ul.pagination>li:active:not(.disabled)>a,ul.pagination>li:focus:not(.disabled)>a,ul.pagination>li:hover:not(.disabled)>a{background:#e5e9f0;color:#2e3440!important}#modal-search-overlay #modal-search{background-color:#3b4252}#modal-search-overlay #modal-search h3{color:#f8fbff}#modal-search-overlay #modal-search>#modal-search-box>#modal-search-button,#modal-search-overlay #modal-search>#modal-search-box>#modal-search-input{background-color:#2e3440;color:#f8fbff;border-color:#e5e9f0}
/*# sourceMappingURL=dark.css.map */

File diff suppressed because one or more lines are too long

View File

@ -1,147 +1,157 @@
@import "inc/variables.scss";
@import "inc/_variables.scss";
body
{
background-color: $nord1;
color: $nord6;
background-color: $nord1;
color: $nord6;
}
a
{
color: #fff;
color: #fff;
}
h1 > a,
#page-footer a
{
color: $nord6;
color: $nord6;
}
table thead th
{
border-bottom-color: $nord6;
border-bottom-color: $nord6;
}
#page-content
{
background-color: $nord0;
color: $nord6;
background-color: $nord0;
color: $nord6;
h3
{
border-bottom-color: $nord4;
}
h3
{
border-bottom-color: $nord4;
}
}
#page-navigation
{
background-color: $nord2;
color: $nord5;
border-bottom-color: $nord0;
background-color: $nord2;
color: $nord5;
border-bottom-color: $nord0;
button
{
color: $nord5;
}
button
{
color: $nord5;
}
#page-navigation-links
{
> li
{
a
{
color: $nord5;
}
#page-navigation-links
{
> li
{
a
{
color: $nord5;
}
&.open > a,
> a:hover
{
background-color: $nord3;
}
}
}
&.open > a,
> a:hover
{
background-color: $nord3;
}
}
}
}
.dropdown-menu
{
background-color: $nord3;
border-color: $nord0;
box-shadow: 0 5px 10px rgba(0,0,0,0.15);
background-color: $nord3;
border-color: $nord0;
box-shadow: 0 5px 10px rgba(0,0,0,0.15);
a:hover,
a:focus,
a:active
{
background-color: $nord2;
}
a:hover,
a:focus,
a:active
{
background-color: $nord2;
}
}
article
{
box-shadow: 0 0 15px rgba(0,0,0,0.15) inset;
box-shadow: 0 0 15px rgba(0,0,0,0.15) inset;
h1, h3
{
color: $nord6;
}
h1, h3
{
color: $nord6;
}
.build-group > h3 > a,
a.more-link,
.build-details-comments a
{
color: $nord5;
}
.build-group > h3 > a,
a.more-link,
.build-details-comments a
{
color: $nord5;
}
.build-group-listing .build-group
{
background-color: $nord3;
}
.build-group-listing .build-group
{
background-color: $nord3;
&:hover
{
@include standard-box-shadow(black);
}
}
}
.latest-flex
{
.latest-flex-item
{
background: $nord3;
.latest-flex-item
{
background: $nord3;
.latest-flex-detail
{
color: #fff;
}
}
.latest-flex-detail
{
color: #fff;
}
&:hover
{
@include standard-box-shadow(black);
}
}
}
ul.pagination
{
> li.active > a
{
background: $nord6;
color: $nord1 !important;
}
> li.active > a
{
background: $nord6;
color: $nord1 !important;
}
> li:hover:not(.disabled) > a,
> li:focus:not(.disabled) > a,
> li:active:not(.disabled) > a
{
background: $nord5;
color: $nord0 !important;
}
> li:hover:not(.disabled) > a,
> li:focus:not(.disabled) > a,
> li:active:not(.disabled) > a
{
background: $nord5;
color: $nord0 !important;
}
}
#modal-search-overlay #modal-search
{
background-color: $nord1;
background-color: $nord1;
h3
{
color: $nord6;
}
h3
{
color: $nord6;
}
> #modal-search-box > #modal-search-input,
> #modal-search-box > #modal-search-button
{
background-color: $nord0;
color: $nord6;
border-color: $nord5;
}
> #modal-search-box > #modal-search-input,
> #modal-search-box > #modal-search-button
{
background-color: $nord0;
color: $nord6;
border-color: $nord5;
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,21 @@
.snow-container
{
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
z-index: 1000;
pointer-events: none;
> div
{
width: 2px;
height: 2px;
background-color: #fff;
border-radius: 50%;
position: absolute;
will-change: transform;
transition: transform linear 125ms;
}
}

View File

@ -150,7 +150,7 @@ $nord5: #E5E9F0;
/// @see $nord4
/// @since 0.1.0
//$nord6: #ECEFF4;
$nord6: #f8fbff;
$nord6: #F8FBFF;
/// Bluish core color.
///

View File

@ -0,0 +1,14 @@
@import "_nord.scss";
$container-width: 1340px;
$border-size: 2px;
$strong-red: #A72F3B;
$strong-yellow: #F5B83D;
$strong-green: #76B540;
$strong-blue: #4076B5;
@mixin standard-box-shadow($color)
{
box-shadow: 0 0 10px 0 rgba($color, 0.33);
}

View File

@ -1,9 +0,0 @@
@import "nord.scss";
$container-width: 1340px;
$border-size: 2px;
$strong-red: #A72F3B;
$strong-yellow: #F5B83D;
$strong-green: #76B540;
$strong-blue: #4076b5;

View File

@ -1,2 +1,2 @@
body{background-color:#2e3440;color:#f8fbff}a{color:#2e3440}#page-footer a,h1>a{color:#f8fbff}table thead th{border-bottom-color:#2e3440}#page-content{background-color:#f8fbff;color:#2e3440}#page-content h3{border-bottom-color:#d8dee9}#page-navigation{background-color:#3b4252;color:#e5e9f0;border-bottom-color:#2e3440}#page-navigation button{color:#e5e9f0}#page-navigation #page-navigation-links>li a{color:#e5e9f0}#page-navigation #page-navigation-links>li.open>a,#page-navigation #page-navigation-links>li>a:hover{background-color:#434c5e}.dropdown-menu{background-color:#434c5e;border-color:#2e3440;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.15);box-shadow:0 5px 10px rgba(0,0,0,.15)}.dropdown-menu a:active,.dropdown-menu a:focus,.dropdown-menu a:hover{background-color:#4c566a}article{-webkit-box-shadow:0 0 15px rgba(0,0,0,.15) inset;box-shadow:0 0 15px rgba(0,0,0,.15) inset}article h1,article h3{color:#4c566a}article .build-details-comments a,article .build-group>h3>a,article a.more-link{color:#4c566a}article .build-group-listing .build-group{background-color:#fff}ul.pagination>li.active>a{background:#2e3440;color:#e5e9f0!important}ul.pagination>li:active:not(.disabled)>a,ul.pagination>li:focus:not(.disabled)>a,ul.pagination>li:hover:not(.disabled)>a{background:#4c566a;color:#f8fbff!important}.latest-flex .latest-flex-item{background:#fff}.latest-flex .latest-flex-item .latest-flex-detail{color:#4c566a}#modal-search-overlay #modal-search{background-color:#f8fbff}#modal-search-overlay #modal-search h3{color:#2e3440}#modal-search-overlay #modal-search>#modal-search-box>#modal-search-button,#modal-search-overlay #modal-search>#modal-search-box>#modal-search-input{background-color:#fff;color:#2e3440;border-color:#4c566a}
body{background-color:#2e3440;color:#f8fbff}a{color:#2e3440}#page-footer a,h1>a{color:#f8fbff}table thead th{border-bottom-color:#2e3440}#page-content{background-color:#f8fbff;color:#2e3440}#page-content h3{border-bottom-color:#d8dee9}#page-navigation{background-color:#3b4252;color:#e5e9f0;border-bottom-color:#2e3440}#page-navigation button{color:#e5e9f0}#page-navigation #page-navigation-links>li a{color:#e5e9f0}#page-navigation #page-navigation-links>li.open>a,#page-navigation #page-navigation-links>li>a:hover{background-color:#434c5e}.dropdown-menu{background-color:#434c5e;border-color:#2e3440;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.15);box-shadow:0 5px 10px rgba(0,0,0,.15)}.dropdown-menu a:active,.dropdown-menu a:focus,.dropdown-menu a:hover{background-color:#4c566a}article{-webkit-box-shadow:0 0 15px rgba(0,0,0,.15) inset;box-shadow:0 0 15px rgba(0,0,0,.15) inset}article h1,article h3{color:#4c566a}article .build-details-comments a,article .build-group>h3>a,article a.more-link{color:#4c566a}article .build-group-listing .build-group{background-color:#fff}article .build-group-listing .build-group:hover{-webkit-box-shadow:0 0 10px 0 rgba(46,52,64,.33);box-shadow:0 0 10px 0 rgba(46,52,64,.33)}ul.pagination>li.active>a{background:#2e3440;color:#e5e9f0!important}ul.pagination>li:active:not(.disabled)>a,ul.pagination>li:focus:not(.disabled)>a,ul.pagination>li:hover:not(.disabled)>a{background:#4c566a;color:#f8fbff!important}.latest-flex .latest-flex-item{background:#fff}.latest-flex .latest-flex-item .latest-flex-detail{color:#4c566a}.latest-flex .latest-flex-item:hover{-webkit-box-shadow:0 0 10px 0 rgba(46,52,64,.33);box-shadow:0 0 10px 0 rgba(46,52,64,.33)}#modal-search-overlay #modal-search{background-color:#f8fbff}#modal-search-overlay #modal-search h3{color:#2e3440}#modal-search-overlay #modal-search>#modal-search-box>#modal-search-button,#modal-search-overlay #modal-search>#modal-search-box>#modal-search-input{background-color:#fff;color:#2e3440;border-color:#4c566a}
/*# sourceMappingURL=light.css.map */

File diff suppressed because one or more lines are too long

View File

@ -1,147 +1,157 @@
@import "inc/variables.scss";
@import "inc/_variables.scss";
body
{
background-color: $nord0;
color: $nord6;
background-color: $nord0;
color: $nord6;
}
a
{
color: $nord0;
color: $nord0;
}
h1 > a,
#page-footer a
{
color: $nord6;
color: $nord6;
}
table thead th
{
border-bottom-color: $nord0;
border-bottom-color: $nord0;
}
#page-content
{
background-color: $nord6;
color: $nord0;
background-color: $nord6;
color: $nord0;
h3
{
border-bottom-color: $nord4;
}
h3
{
border-bottom-color: $nord4;
}
}
#page-navigation
{
background-color: $nord1;
color: $nord5;
border-bottom-color: $nord0;
background-color: $nord1;
color: $nord5;
border-bottom-color: $nord0;
button
{
color: $nord5;
}
button
{
color: $nord5;
}
#page-navigation-links
{
> li
{
a
{
color: $nord5;
}
#page-navigation-links
{
> li
{
a
{
color: $nord5;
}
&.open > a,
> a:hover
{
background-color: $nord2;
}
}
}
&.open > a,
> a:hover
{
background-color: $nord2;
}
}
}
}
.dropdown-menu
{
background-color: $nord2;
border-color: $nord0;
box-shadow: 0 5px 10px rgba(0,0,0,0.15);
background-color: $nord2;
border-color: $nord0;
box-shadow: 0 5px 10px rgba(0,0,0,0.15);
a:hover,
a:focus,
a:active
{
background-color: $nord3;
}
a:hover,
a:focus,
a:active
{
background-color: $nord3;
}
}
article
{
box-shadow: 0 0 15px rgba(0,0,0,0.15) inset;
box-shadow: 0 0 15px rgba(0,0,0,0.15) inset;
h1, h3
{
color: $nord3;
}
h1, h3
{
color: $nord3;
}
.build-group > h3 > a,
a.more-link,
.build-details-comments a
{
color: $nord3;
}
.build-group > h3 > a,
a.more-link,
.build-details-comments a
{
color: $nord3;
}
.build-group-listing .build-group
{
background-color: #fff;
}
.build-group-listing .build-group
{
background-color: #fff;
&:hover
{
@include standard-box-shadow($nord0);
}
}
}
ul.pagination
{
> li.active > a
{
background: $nord0;
color: $nord5 !important;
}
> li.active > a
{
background: $nord0;
color: $nord5 !important;
}
> li:hover:not(.disabled) > a,
> li:focus:not(.disabled) > a,
> li:active:not(.disabled) > a
{
background: $nord3;
color: $nord6 !important;
}
> li:hover:not(.disabled) > a,
> li:focus:not(.disabled) > a,
> li:active:not(.disabled) > a
{
background: $nord3;
color: $nord6 !important;
}
}
.latest-flex
{
.latest-flex-item
{
background: #fff;
.latest-flex-item
{
background: #fff;
.latest-flex-detail
{
color: $nord3;
}
}
.latest-flex-detail
{
color: $nord3;
}
&:hover
{
@include standard-box-shadow($nord0);
}
}
}
#modal-search-overlay #modal-search
{
background-color: $nord6;
background-color: $nord6;
h3
{
color: $nord0;
}
h3
{
color: $nord0;
}
> #modal-search-box > #modal-search-input,
> #modal-search-box > #modal-search-button
{
background-color: #fff;
color: $nord0;
border-color: $nord3;
}
> #modal-search-box > #modal-search-input,
> #modal-search-box > #modal-search-button
{
background-color: #fff;
color: $nord0;
border-color: $nord3;
}
}

View File

@ -0,0 +1,2 @@
body{background-color:#3b4252;color:#f8fbff}a{color:#fff}#page-footer a,h1>a{color:#f8fbff}table thead th{border-bottom-color:#f8fbff}#page-content{background-color:#2e3440;color:#f8fbff}#page-content h3{border-bottom-color:#d8dee9}#page-navigation{background-color:#434c5e;color:#e5e9f0;border-bottom-color:#2e3440}#page-navigation button{color:#e5e9f0}#page-navigation #page-navigation-links>li a{color:#e5e9f0}#page-navigation #page-navigation-links>li.open>a,#page-navigation #page-navigation-links>li>a:hover{background-color:#4c566a}.dropdown-menu{background-color:#4c566a;border-color:#2e3440;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.15);box-shadow:0 5px 10px rgba(0,0,0,.15)}.dropdown-menu a:active,.dropdown-menu a:focus,.dropdown-menu a:hover{background-color:#434c5e}article{-webkit-box-shadow:0 0 15px rgba(0,0,0,.15) inset;box-shadow:0 0 15px rgba(0,0,0,.15) inset}article h1,article h3{color:#f8fbff}article .build-details-comments a,article .build-group>h3>a,article a.more-link{color:#e5e9f0}article .build-group-listing .build-group{background-color:#4c566a}article .build-group-listing .build-group:hover{-webkit-box-shadow:0 0 10px 0 rgba(0,0,0,.33);box-shadow:0 0 10px 0 rgba(0,0,0,.33)}.latest-flex .latest-flex-item{background:#4c566a}.latest-flex .latest-flex-item .latest-flex-detail{color:#fff}.latest-flex .latest-flex-item:hover{-webkit-box-shadow:0 0 10px 0 rgba(0,0,0,.33);box-shadow:0 0 10px 0 rgba(0,0,0,.33)}ul.pagination>li.active>a{background:#f8fbff;color:#3b4252!important}ul.pagination>li:active:not(.disabled)>a,ul.pagination>li:focus:not(.disabled)>a,ul.pagination>li:hover:not(.disabled)>a{background:#e5e9f0;color:#2e3440!important}#modal-search-overlay #modal-search{background-color:#3b4252}#modal-search-overlay #modal-search h3{color:#f8fbff}#modal-search-overlay #modal-search>#modal-search-box>#modal-search-button,#modal-search-overlay #modal-search>#modal-search-box>#modal-search-input{background-color:#2e3440;color:#f8fbff;border-color:#e5e9f0}.snow-container{position:fixed;top:0;bottom:0;left:0;right:0;z-index:1000;pointer-events:none}.snow-container>div{width:2px;height:2px;background-color:#fff;border-radius:50%;position:absolute;will-change:transform;-webkit-transition:-webkit-transform linear 125ms;transition:-webkit-transform linear 125ms;-o-transition:transform linear 125ms;transition:transform linear 125ms;transition:transform linear 125ms,-webkit-transform linear 125ms}
/*# sourceMappingURL=winter.css.map */

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,2 @@
@import "dark.scss";
@import "inc/_christmas.scss";

View File

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

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

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,2 @@
"use script";var BuildFeed;!function(t){!function(t){function e(){window.requestAnimationFrame(n)}function n(){if(s%5==0)for(let t=0;t<2;t++){const t=new d;o.push(t),i.appendChild(t.getElement())}for(const t of o){t.bumpElement(!0)&&o.splice(o.indexOf(t),1)}s++}let i,o=[],s=0;class d{getElement(){return this.element}bumpElement(t){let e=Math.round(5*(Math.random()/2+.5));return this.top=this.top+e,this.top<-10||this.top>window.innerHeight+10?(this.element.remove(),!0):t&&(e=Math.round(5*(Math.random()/2+.5)),this.left=Math.random()>.5?this.left+e:this.left-e,this.left<-10||this.left>window.innerWidth+10)?(this.element.remove(),!0):(this.element.style.transform=`translate(${this.left}px, ${this.top}px)`,!1)}constructor(){this.element=document.createElement("div"),this.top=0,this.left=Math.round(Math.random()*window.innerWidth)}}t.Setup=function(){(i=document.createElement("div")).className="snow-container",document.body.appendChild(i),window.requestAnimationFrame(n),setInterval(e,125)}}(t.Christmas||(t.Christmas={}))}(BuildFeed||(BuildFeed={})),window.addEventListener("load",BuildFeed.Christmas.Setup);
//# sourceMappingURL=christmas.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,100 @@
"use script";
module BuildFeed.Christmas
{
const movementSpeed = 5;
let snowContainer: HTMLDivElement;
let snow: Array<Snowflake> = [];
let counter: number = 0;
let tick: number = 0;
class Snowflake
{
private readonly element: HTMLDivElement;
private top: number;
private left: number;
public getElement()
{
return this.element;
}
public bumpElement(moveX: boolean)
{
let localSpeed = Math.round(((Math.random() / 2) + 0.5) * movementSpeed);
this.top = this.top + localSpeed;
if (this.top < -10 || this.top > (window.innerHeight + 10))
{
this.element.remove();
return true;
}
if (moveX)
{
localSpeed = Math.round(((Math.random() / 2) + 0.5) * movementSpeed);
this.left = Math.random() > 0.5
? this.left + localSpeed
: this.left - localSpeed;
if (this.left < -10 || this.left > (window.innerWidth + 10))
{
this.element.remove();
return true;
}
}
this.element.style.transform = `translate(${this.left}px, ${this.top}px)`;
return false;
}
constructor()
{
this.element = document.createElement("div");
this.top = 0;
this.left = Math.round(Math.random() * window.innerWidth);
}
}
function deferAnimate()
{
window.requestAnimationFrame(animate);
}
function animate()
{
if (counter % 5 === 0)
{
for (let i = 0; i < 2; i++)
{
const newSnow = new Snowflake();
snow.push(newSnow);
snowContainer.appendChild(newSnow.getElement());
}
}
for (const flake of snow)
{
const result = flake.bumpElement(true);
if (result)
{
snow.splice(snow.indexOf(flake), 1);
}
}
counter++;
}
export function Setup()
{
snowContainer = document.createElement("div");
snowContainer.className = "snow-container";
document.body.appendChild(snowContainer);
window.requestAnimationFrame(animate);
setInterval(deferAnimate, 125);
}
}
window.addEventListener("load", BuildFeed.Christmas.Setup);