diff --git a/src/Squidex.Read/History/IHistoryEventEntity.cs b/src/Squidex.Read/History/IHistoryEventEntity.cs new file mode 100644 index 000000000..f1e9f0f85 --- /dev/null +++ b/src/Squidex.Read/History/IHistoryEventEntity.cs @@ -0,0 +1,17 @@ +// ========================================================================== +// IHistoryEventEntity.cs +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex Group +// All rights reserved. +// ========================================================================== + +namespace Squidex.Read.History +{ + public interface IHistoryEventEntity : IEntity + { + string Channel { get; } + + string Message { get; } + } +} diff --git a/src/Squidex.Read/History/Repositories/IHistoryEventRepository.cs b/src/Squidex.Read/History/Repositories/IHistoryEventRepository.cs new file mode 100644 index 000000000..e59b9f5f0 --- /dev/null +++ b/src/Squidex.Read/History/Repositories/IHistoryEventRepository.cs @@ -0,0 +1,18 @@ +// ========================================================================== +// IHistoryEventRepository.cs +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex Group +// All rights reserved. +// ========================================================================== + +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Squidex.Read.History.Repositories +{ + public interface IHistoryEventRepository + { + Task> FindHistoryByChannel(string channelPrefix, int count); + } +} diff --git a/src/Squidex.Read/IEntity.cs b/src/Squidex.Read/IEntity.cs index 351f99e99..17d62ee2f 100644 --- a/src/Squidex.Read/IEntity.cs +++ b/src/Squidex.Read/IEntity.cs @@ -12,10 +12,10 @@ namespace Squidex.Read { public interface IEntity { - Guid Id { get; set; } + Guid Id { get; } - DateTime Created { get; set; } + DateTime Created { get; } - DateTime LastModified { get; set; } + DateTime LastModified { get; } } } \ No newline at end of file diff --git a/src/Squidex.Store.MongoDb/Apps/MongoAppRepository.cs b/src/Squidex.Store.MongoDb/Apps/MongoAppRepository.cs index 10ec12ba8..45594a869 100644 --- a/src/Squidex.Store.MongoDb/Apps/MongoAppRepository.cs +++ b/src/Squidex.Store.MongoDb/Apps/MongoAppRepository.cs @@ -22,7 +22,7 @@ using Squidex.Infrastructure; namespace Squidex.Store.MongoDb.Apps { - public sealed class MongoAppRepository : MongoRepositoryBase, IAppRepository, ICatchEventConsumer + public class MongoAppRepository : MongoRepositoryBase, IAppRepository, ICatchEventConsumer { public MongoAppRepository(IMongoDatabase database) : base(database) @@ -55,7 +55,7 @@ namespace Squidex.Store.MongoDb.Apps return entity; } - public Task On(AppCreated @event, EnvelopeHeaders headers) + protected Task On(AppCreated @event, EnvelopeHeaders headers) { return Collection.CreateAsync(headers, a => { @@ -63,7 +63,7 @@ namespace Squidex.Store.MongoDb.Apps }); } - public Task On(AppContributorRemoved @event, EnvelopeHeaders headers) + protected Task On(AppContributorRemoved @event, EnvelopeHeaders headers) { return Collection.UpdateAsync(headers, a => { @@ -71,7 +71,7 @@ namespace Squidex.Store.MongoDb.Apps }); } - public Task On(AppLanguagesConfigured @event, EnvelopeHeaders headers) + protected Task On(AppLanguagesConfigured @event, EnvelopeHeaders headers) { return Collection.UpdateAsync(headers, a => { @@ -79,7 +79,7 @@ namespace Squidex.Store.MongoDb.Apps }); } - public Task On(AppClientAttached @event, EnvelopeHeaders headers) + protected Task On(AppClientAttached @event, EnvelopeHeaders headers) { return Collection.UpdateAsync(headers, a => { @@ -87,7 +87,7 @@ namespace Squidex.Store.MongoDb.Apps }); } - public Task On(AppClientRevoked @event, EnvelopeHeaders headers) + protected Task On(AppClientRevoked @event, EnvelopeHeaders headers) { return Collection.UpdateAsync(headers, a => { @@ -95,7 +95,7 @@ namespace Squidex.Store.MongoDb.Apps }); } - public Task On(AppClientRenamed @event, EnvelopeHeaders headers) + protected Task On(AppClientRenamed @event, EnvelopeHeaders headers) { return Collection.UpdateAsync(headers, a => { @@ -103,7 +103,7 @@ namespace Squidex.Store.MongoDb.Apps }); } - public Task On(AppContributorAssigned @event, EnvelopeHeaders headers) + protected Task On(AppContributorAssigned @event, EnvelopeHeaders headers) { return Collection.UpdateAsync(headers, a => { diff --git a/src/Squidex.Store.MongoDb/History/Messages.cs b/src/Squidex.Store.MongoDb/History/Messages.cs new file mode 100644 index 000000000..9ffd1165a --- /dev/null +++ b/src/Squidex.Store.MongoDb/History/Messages.cs @@ -0,0 +1,17 @@ +// ========================================================================== +// Messages.cs +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex Group +// All rights reserved. +// ========================================================================== + +namespace Squidex.Store.MongoDb.History +{ + public static class Messages + { + public const string AppCreated = "AppCreated"; + + public const string AppContributor = "SchemaDeleted"; + } +} diff --git a/src/Squidex.Store.MongoDb/History/MessagesEN.cs b/src/Squidex.Store.MongoDb/History/MessagesEN.cs new file mode 100644 index 000000000..0470188dc --- /dev/null +++ b/src/Squidex.Store.MongoDb/History/MessagesEN.cs @@ -0,0 +1,30 @@ +// ========================================================================== +// MessagesEN.cs +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex Group +// All rights reserved. +// ========================================================================== + +using System.Collections.Generic; +using Squidex.Events.Apps; +using Squidex.Infrastructure; + +namespace Squidex.Store.MongoDb.History +{ + public static class MessagesEN + { + public static readonly IReadOnlyDictionary Texts = + new Dictionary + { + { + TypeNameRegistry.GetName(), + "[User] assigned [Contributor] to app with permission [Permission]" + }, + { + TypeNameRegistry.GetName(), + "[User] removed [Contributor] from app" + } + }; + } +} diff --git a/src/Squidex.Store.MongoDb/History/MongoHistoryEventEntity.cs b/src/Squidex.Store.MongoDb/History/MongoHistoryEventEntity.cs new file mode 100644 index 000000000..ecfd33945 --- /dev/null +++ b/src/Squidex.Store.MongoDb/History/MongoHistoryEventEntity.cs @@ -0,0 +1,61 @@ +// ========================================================================== +// MongoHistoryEventEntity.cs +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex Group +// All rights reserved. +// ========================================================================== + +using System.Collections.Generic; +using MongoDB.Bson.Serialization.Attributes; +using Squidex.Infrastructure; +using Squidex.Infrastructure.CQRS; +using Squidex.Store.MongoDb.Utils; + +namespace Squidex.Store.MongoDb.History +{ + public sealed class MongoHistoryEventEntity : MongoEntity + { + [BsonRequired] + [BsonElement] + public string Channel { get; set; } + + [BsonRequired] + [BsonElement] + public string Message { get; set; } + + [BsonRequired] + [BsonElement] + public UserToken User { get; set; } + + [BsonRequired] + [BsonElement] + public Dictionary Parameters { get; set; } + + public MongoHistoryEventEntity() + { + Parameters = new Dictionary(); + } + + public MongoHistoryEventEntity Setup(EnvelopeHeaders headers, string channel) + { + Channel = channel; + + if (headers.Contains(CommonHeaders.User)) + { + AddParameter("User", headers[CommonHeaders.User].ToString()); + } + + Message = TypeNameRegistry.GetName(); + + return this; + } + + public MongoHistoryEventEntity AddParameter(string key, string value) + { + Parameters.Add(key, value); + + return this; + } + } +} diff --git a/src/Squidex.Store.MongoDb/History/MongoHistoryEventRepository.cs b/src/Squidex.Store.MongoDb/History/MongoHistoryEventRepository.cs new file mode 100644 index 000000000..e3cc20a17 --- /dev/null +++ b/src/Squidex.Store.MongoDb/History/MongoHistoryEventRepository.cs @@ -0,0 +1,79 @@ +// ========================================================================== +// MongoHistoryEventRepository.cs +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex Group +// All rights reserved. +// ========================================================================== + +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using MongoDB.Driver; +using Squidex.Events.Apps; +using Squidex.Infrastructure.CQRS; +using Squidex.Infrastructure.CQRS.Events; +using Squidex.Infrastructure.Dispatching; +using Squidex.Read.History; +using Squidex.Read.History.Repositories; +using Squidex.Store.MongoDb.Utils; +using System.Linq; + +namespace Squidex.Store.MongoDb.History +{ + public class MongoHistoryEventRepository : MongoRepositoryBase, IHistoryEventRepository, ICatchEventConsumer + { + public MongoHistoryEventRepository(IMongoDatabase database) + : base(database) + { + } + + protected override string CollectionName() + { + return "Projections_History"; + } + + protected override Task SetupCollectionAsync(IMongoCollection collection) + { + return Task.WhenAll( + collection.Indexes.CreateOneAsync(IndexKeys.Ascending(x => x.Channel)), + collection.Indexes.CreateOneAsync(IndexKeys.Ascending(x => x.Created), new CreateIndexOptions { ExpireAfter = TimeSpan.FromDays(365) })); + } + + public async Task> FindHistoryByChannel(string channelPrefix, int count) + { + var entities = + await Collection.Find(x => x.Channel.StartsWith(channelPrefix)).Limit(count).ToListAsync(); + + return entities.Select(x => (IHistoryEventEntity)new ParsedHistoryEvent(x, MessagesEN.Texts)).ToList(); + } + + protected Task On(AppContributorAssigned @event, EnvelopeHeaders headers) + { + return Collection.CreateAsync(headers, x => + { + var channel = $"Apps.{headers.AggregateId()}.Contributors"; + + x.Setup(headers, channel) + .AddParameter("Contributor", @event.ContributorId) + .AddParameter("Permission", @event.Permission.ToString()); + }); + } + + protected Task On(AppContributorRemoved @event, EnvelopeHeaders headers) + { + return Collection.CreateAsync(headers, x => + { + var channel = $"Apps.{headers.AggregateId()}.Contributors"; + + x.Setup(headers, channel) + .AddParameter("Contributor", @event.ContributorId); + }); + } + + public Task On(Envelope @event) + { + return this.DispatchActionAsync(@event.Payload, @event.Headers); + } + } +} diff --git a/src/Squidex.Store.MongoDb/History/ParsedHistoryEvent.cs b/src/Squidex.Store.MongoDb/History/ParsedHistoryEvent.cs new file mode 100644 index 000000000..8da989b70 --- /dev/null +++ b/src/Squidex.Store.MongoDb/History/ParsedHistoryEvent.cs @@ -0,0 +1,62 @@ +// ========================================================================== +// ParsedHistoryEvent.cs +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex Group +// All rights reserved. +// ========================================================================== + +using System; +using System.Collections.Generic; +using Squidex.Read.History; + +namespace Squidex.Store.MongoDb.History +{ + internal sealed class ParsedHistoryEvent : IHistoryEventEntity + { + private readonly MongoHistoryEventEntity inner; + private readonly Lazy message; + + public Guid Id + { + get { return inner.Id; } + } + + public DateTime Created + { + get { return inner.Created; } + } + + public DateTime LastModified + { + get { return inner.LastModified; } + } + + public string Channel + { + get { return inner.Channel; } + } + + public string Message + { + get { return message.Value; } + } + + public ParsedHistoryEvent(MongoHistoryEventEntity inner, IReadOnlyDictionary texts) + { + this.inner = inner; + + message = new Lazy(() => + { + var result = texts[inner.Message]; + + foreach (var kvp in inner.Parameters) + { + result = result.Replace("[" + kvp.Key + "]", kvp.Value); + } + + return result; + }); + } + } +} diff --git a/src/Squidex.Store.MongoDb/Infrastructure/MongoStreamPositionEntity.cs b/src/Squidex.Store.MongoDb/Infrastructure/MongoStreamPositionEntity.cs index 6297da0e0..2157f405a 100644 --- a/src/Squidex.Store.MongoDb/Infrastructure/MongoStreamPositionEntity.cs +++ b/src/Squidex.Store.MongoDb/Infrastructure/MongoStreamPositionEntity.cs @@ -18,9 +18,11 @@ namespace Squidex.Store.MongoDb.Infrastructure [BsonId] public ObjectId Id { get; set; } + [BsonRequired] [BsonElement] public string SubscriptionName { get; set; } + [BsonRequired] [BsonElement] public int? Position { get; set; } } diff --git a/src/Squidex.Store.MongoDb/Schemas/MongoSchemaRepository.cs b/src/Squidex.Store.MongoDb/Schemas/MongoSchemaRepository.cs index 5e60fb92c..89e06540d 100644 --- a/src/Squidex.Store.MongoDb/Schemas/MongoSchemaRepository.cs +++ b/src/Squidex.Store.MongoDb/Schemas/MongoSchemaRepository.cs @@ -24,7 +24,7 @@ using Squidex.Store.MongoDb.Utils; namespace Squidex.Store.MongoDb.Schemas { - public sealed class MongoSchemaRepository : MongoRepositoryBase, ISchemaRepository, ICatchEventConsumer + public class MongoSchemaRepository : MongoRepositoryBase, ISchemaRepository, ICatchEventConsumer { private readonly SchemaJsonSerializer serializer; private readonly FieldRegistry fieldRegistry; @@ -88,54 +88,54 @@ namespace Squidex.Store.MongoDb.Schemas return entity?.Id; } - public Task On(SchemaDeleted @event, EnvelopeHeaders headers) + protected Task On(SchemaDeleted @event, EnvelopeHeaders headers) { - return Collection.UpdateAsync(headers, e => e.IsDeleted = true); + return Collection.UpdateAsync(headers, s => s.IsDeleted = true); } - public Task On(FieldDeleted @event, EnvelopeHeaders headers) + protected Task On(FieldDeleted @event, EnvelopeHeaders headers) { return UpdateSchema(headers, s => s.DeleteField(@event.FieldId)); } - public Task On(FieldDisabled @event, EnvelopeHeaders headers) + protected Task On(FieldDisabled @event, EnvelopeHeaders headers) { return UpdateSchema(headers, s => s.DisableField(@event.FieldId)); } - public Task On(FieldEnabled @event, EnvelopeHeaders headers) + protected Task On(FieldEnabled @event, EnvelopeHeaders headers) { return UpdateSchema(headers, s => s.EnableField(@event.FieldId)); } - public Task On(FieldHidden @event, EnvelopeHeaders headers) + protected Task On(FieldHidden @event, EnvelopeHeaders headers) { return UpdateSchema(headers, s => s.HideField(@event.FieldId)); } - public Task On(FieldShown @event, EnvelopeHeaders headers) + protected Task On(FieldShown @event, EnvelopeHeaders headers) { return UpdateSchema(headers, s => s.ShowField(@event.FieldId)); } - public Task On(FieldUpdated @event, EnvelopeHeaders headers) + protected Task On(FieldUpdated @event, EnvelopeHeaders headers) { return UpdateSchema(headers, s => s.UpdateField(@event.FieldId, @event.Properties)); } - public Task On(SchemaUpdated @event, EnvelopeHeaders headers) + protected Task On(SchemaUpdated @event, EnvelopeHeaders headers) { return UpdateSchema(headers, s => s.Update(@event.Properties)); } - public Task On(FieldAdded @event, EnvelopeHeaders headers) + protected Task On(FieldAdded @event, EnvelopeHeaders headers) { var field = fieldRegistry.CreateField(@event.FieldId, @event.Name, @event.Properties); return UpdateSchema(headers, s => s.AddOrUpdateField(field)); } - public Task On(SchemaCreated @event, EnvelopeHeaders headers) + protected Task On(SchemaCreated @event, EnvelopeHeaders headers) { var schema = Schema.Create(@event.Name, @event.Properties); diff --git a/src/Squidex.Store.MongoDb/Utils/EntityMapper.cs b/src/Squidex.Store.MongoDb/Utils/EntityMapper.cs index 8539f8029..c22f71fd0 100644 --- a/src/Squidex.Store.MongoDb/Utils/EntityMapper.cs +++ b/src/Squidex.Store.MongoDb/Utils/EntityMapper.cs @@ -19,7 +19,7 @@ namespace Squidex.Store.MongoDb.Utils { public static class EntityMapper { - public static T Create(EnvelopeHeaders headers) where T : IEntity, new() + public static T Create(EnvelopeHeaders headers) where T : MongoEntity, new() { var timestamp = headers.Timestamp().ToDateTimeUtc(); @@ -49,7 +49,7 @@ namespace Squidex.Store.MongoDb.Utils return JToken.Parse(json); } - public static T Update(T entity, EnvelopeHeaders headers) where T : IEntity + public static T Update(T entity, EnvelopeHeaders headers) where T : MongoEntity { var timestamp = headers.Timestamp().ToDateTimeUtc(); @@ -58,7 +58,7 @@ namespace Squidex.Store.MongoDb.Utils return entity; } - public static Task CreateAsync(this IMongoCollection collection, EnvelopeHeaders headers, Action updater) where T : class, IEntity, new() + public static Task CreateAsync(this IMongoCollection collection, EnvelopeHeaders headers, Action updater) where T : MongoEntity, new() { var entity = Create(headers); @@ -67,7 +67,7 @@ namespace Squidex.Store.MongoDb.Utils return collection.InsertOneIfNotExistsAsync(entity); } - public static async Task UpdateAsync(this IMongoCollection collection, EnvelopeHeaders headers, Action updater) where T : class, IEntity + public static async Task UpdateAsync(this IMongoCollection collection, EnvelopeHeaders headers, Action updater) where T : MongoEntity { var entity = await collection.Find(t => t.Id == headers.AggregateId()).FirstOrDefaultAsync(); diff --git a/src/Squidex/app-libs/icomoon/fonts/icomoon.eot b/src/Squidex/app-libs/icomoon/fonts/icomoon.eot index 2edfdbf36..3f50dc509 100644 Binary files a/src/Squidex/app-libs/icomoon/fonts/icomoon.eot and b/src/Squidex/app-libs/icomoon/fonts/icomoon.eot differ diff --git a/src/Squidex/app-libs/icomoon/fonts/icomoon.svg b/src/Squidex/app-libs/icomoon/fonts/icomoon.svg index ab4642183..289fb3988 100644 --- a/src/Squidex/app-libs/icomoon/fonts/icomoon.svg +++ b/src/Squidex/app-libs/icomoon/fonts/icomoon.svg @@ -12,7 +12,10 @@ + + + \ No newline at end of file diff --git a/src/Squidex/app-libs/icomoon/fonts/icomoon.ttf b/src/Squidex/app-libs/icomoon/fonts/icomoon.ttf index 0d67ef815..54ff05883 100644 Binary files a/src/Squidex/app-libs/icomoon/fonts/icomoon.ttf and b/src/Squidex/app-libs/icomoon/fonts/icomoon.ttf differ diff --git a/src/Squidex/app-libs/icomoon/fonts/icomoon.woff b/src/Squidex/app-libs/icomoon/fonts/icomoon.woff index cb3cec212..be25d55a5 100644 Binary files a/src/Squidex/app-libs/icomoon/fonts/icomoon.woff and b/src/Squidex/app-libs/icomoon/fonts/icomoon.woff differ diff --git a/src/Squidex/app-libs/icomoon/selection.json b/src/Squidex/app-libs/icomoon/selection.json index e291ec861..d1971cff1 100644 --- a/src/Squidex/app-libs/icomoon/selection.json +++ b/src/Squidex/app-libs/icomoon/selection.json @@ -94,6 +94,66 @@ "setId": 2, "iconIdx": 46 }, + { + "icon": { + "paths": [ + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM320 512c0-106.040 85.96-192 192-192s192 85.96 192 192-85.96 192-192 192-192-85.96-192-192zM925.98 683.476v0l-177.42-73.49c12.518-30.184 19.44-63.276 19.44-97.986s-6.922-67.802-19.44-97.986l177.42-73.49c21.908 52.822 34.020 110.73 34.020 171.476s-12.114 118.654-34.020 171.476v0zM683.478 98.020v0 0l-73.49 177.42c-30.184-12.518-63.276-19.44-97.988-19.44s-67.802 6.922-97.986 19.44l-73.49-177.422c52.822-21.904 110.732-34.018 171.476-34.018 60.746 0 118.654 12.114 171.478 34.020zM98.020 340.524l177.422 73.49c-12.518 30.184-19.442 63.276-19.442 97.986s6.922 67.802 19.44 97.986l-177.42 73.49c-21.906-52.822-34.020-110.73-34.020-171.476s12.114-118.654 34.020-171.476zM340.524 925.98l73.49-177.42c30.184 12.518 63.276 19.44 97.986 19.44s67.802-6.922 97.986-19.44l73.49 177.42c-52.822 21.904-110.73 34.020-171.476 34.020-60.744 0-118.654-12.114-171.476-34.020z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "lifebuoy", + "support", + "help" + ], + "defaultCode": 59713, + "grid": 16 + }, + "attrs": [], + "properties": { + "ligatures": "lifebuoy, support", + "name": "lifebuoy", + "id": 65, + "order": 12, + "prevSize": 32, + "code": 59713 + }, + "setIdx": 0, + "setId": 2, + "iconIdx": 65 + }, + { + "icon": { + "paths": [ + "M640 64c247.424 0 448 200.576 448 448s-200.576 448-448 448v-96c94.024 0 182.418-36.614 248.902-103.098s103.098-154.878 103.098-248.902c0-94.022-36.614-182.418-103.098-248.902s-154.878-103.098-248.902-103.098c-94.022 0-182.418 36.614-248.902 103.098-51.14 51.138-84.582 115.246-97.306 184.902h186.208l-224 256-224-256h164.57c31.060-217.102 217.738-384 443.43-384zM832 448v128h-256v-320h128v192z" + ], + "width": 1088, + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "history", + "time", + "archive", + "past" + ], + "defaultCode": 59725, + "grid": 16 + }, + "attrs": [], + "properties": { + "ligatures": "history, time", + "name": "history", + "id": 77, + "order": 11, + "prevSize": 32, + "code": 59725 + }, + "setIdx": 0, + "setId": 2, + "iconIdx": 77 + }, { "icon": { "paths": [ @@ -191,6 +251,34 @@ "setId": 2, "iconIdx": 172 }, + { + "icon": { + "paths": [ + "M512 0c-282.77 0-512 71.634-512 160v96l384 384v320c0 35.346 57.306 64 128 64 70.692 0 128-28.654 128-64v-320l384-384v-96c0-88.366-229.23-160-512-160zM94.384 138.824c23.944-13.658 57.582-26.62 97.278-37.488 87.944-24.076 201.708-37.336 320.338-37.336 118.628 0 232.394 13.26 320.338 37.336 39.696 10.868 73.334 23.83 97.28 37.488 15.792 9.006 24.324 16.624 28.296 21.176-3.972 4.552-12.506 12.168-28.296 21.176-23.946 13.658-57.584 26.62-97.28 37.488-87.942 24.076-201.708 37.336-320.338 37.336s-232.394-13.26-320.338-37.336c-39.696-10.868-73.334-23.83-97.278-37.488-15.792-9.008-24.324-16.624-28.298-21.176 3.974-4.552 12.506-12.168 28.298-21.176z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "filter", + "funnel" + ], + "defaultCode": 59995, + "grid": 16 + }, + "attrs": [], + "properties": { + "ligatures": "filter, funnel", + "name": "filter", + "id": 347, + "order": 10, + "prevSize": 32, + "code": 59995 + }, + "setIdx": 0, + "setId": 2, + "iconIdx": 347 + }, { "icon": { "paths": [ diff --git a/src/Squidex/app-libs/icomoon/style.css b/src/Squidex/app-libs/icomoon/style.css index 0ce3c086c..45040573a 100644 --- a/src/Squidex/app-libs/icomoon/style.css +++ b/src/Squidex/app-libs/icomoon/style.css @@ -1,10 +1,10 @@ @font-face { font-family: 'icomoon'; - src: url('fonts/icomoon.eot?k706v2'); - src: url('fonts/icomoon.eot?k706v2#iefix') format('embedded-opentype'), - url('fonts/icomoon.ttf?k706v2') format('truetype'), - url('fonts/icomoon.woff?k706v2') format('woff'), - url('fonts/icomoon.svg?k706v2#icomoon') format('svg'); + src: url('fonts/icomoon.eot?7p76ib'); + src: url('fonts/icomoon.eot?7p76ib#iefix') format('embedded-opentype'), + url('fonts/icomoon.ttf?7p76ib') format('truetype'), + url('fonts/icomoon.woff?7p76ib') format('woff'), + url('fonts/icomoon.svg?7p76ib#icomoon') format('svg'); font-weight: normal; font-style: normal; } @@ -33,6 +33,12 @@ .icon-schemas:before { content: "\e92e"; } +.icon-lifebuoy:before { + content: "\e941"; +} +.icon-history:before { + content: "\e94d"; +} .icon-settings:before { content: "\e994"; } @@ -42,6 +48,9 @@ .icon-bin:before { content: "\e9ac"; } +.icon-filter:before { + content: "\ea5b"; +} .icon-plus:before { content: "\e901"; }